
🍀 들어가면서
먼저 읽으면 좋은 글.
이 글에서 언급할 제어의 역전(IoC), 의존성 주입(DI) 등에 대한 설명이 포함되어 있다.
Spring을 쓰는 이유: Spring의 등장 배경과 특징
Spring Boot에서 어떻게 Bean을 등록하고 사용할까?
Bean이란?
스프링에서는 개발자가 아닌 IoC 컨테이너에 의해 객체가 생성되고, 의존 관계가 관리되고, 필요 없는 객체가 소멸된다.
@Configuration 어노테이션이 붙은 클래스는 스프링 빈을 설정하는 클래스임을 나타낸다.
@Configuration
public class AppConfig {
// 빈 등록
@Bean
public MyService myService() {
return new MyServiceImpl();
}
}
@Bean 어노테이션을 사용해 특정 클래스를 빈으로 등록한다.
이 메소드(myService())가 여러 번 호출되더라도 실제 인스턴스는 단 하나만 생성되도록, 즉 싱글톤이 보장되도록 처리한다.
@Bean은 주로 외부에서 만든(자신이 개발한 코드가 아닌 다른 사람이 개발한 코드) 클래스의 객체를 등록하기 위해 사용되는데,
외부 라이브러리 클래스의 객체 생성 메소드를 만든 후 해당 메소드의 선언하는 방식으로 사용한다.
이처럼 자바 클래스를 이용해 Bean을 정의하고 의존 관계를 설정하는 방법을
Java Config라고 한다.
사전적으로는 '주석'이라는 의미로 소스 코드가 컴파일되거나 실행될 때 컴파일러 및 다른 프로그램에게 필요한 정보를 전달해 주는 문법 요소이다.
@Bean과 달리 직접 생성하는 클래스를 스프링 빈으로 등록하기 위해 사용한다.
빈으로 등록하고 싶은 클래스에 @Component 어노테이션을 붙인다.
@Component
public class MyComponent {
public void sayHello() {
System.out.println("Hello from MyComponent!");
}
}
위 예시에서 MyComponent 클래스는 @Component 애노테이션 덕분에 Spring 컨테이너에 Bean으로 등록된다.
@Componet를 기반으로 특수화된 어노테이션들이 있다.
자주 사용하는 대표적인 예시로 @Service, @Controller, @Repository가 있다.
기능적으로는 @Component와 같이 클래스를 빈으로 등록하는 역할을 하지만 이름에서 알 수 있듯이 역할이 명확하게 구분이 되어 있다.
@Component는 일반적으로 모든 유형의 클래스에 사용될 수 있으며, 특정한 역할을 명시하지 않는다.
@Service, @Controller, @Repository는 모두 @Component의 특수화된 애노테이션으로, 기본적으로는 @Component와 같은 역할을 한다.
하지만 각 애노테이션은 특정 계층이나 역할을 명확히 표현하여
개발자에게 각 클래스의 의도를 명확히 알려주는 역할을 한다.