TIL #27 Bean

HYEON JIN CHOI·2024년 5월 30일

Spring 프레임워크는 자바 애플리케이션 개발에 있어서 가장 널리 사용되는 프레임워크 중 하나이다. Spring 의 핵심 개념 중 하나는 바로 Bean 이다. BeanSpring IoC(Inversion of Control) 컨테이너에 의해 관리되는 객체를 의미하며, 애플리케이션의 구성 요소를 정의하고 관리하는 데 중요한 역할을 한다. 이번 글에서는 Spring Bean 의 개념과 필요성, 등록과 관리, 그리고 생명 주기에 대해 알아보겠다.

1. Bean의 개념과 필요성

1.1. Bean의 개념

Spring 에서 BeanSpring IoC 컨테이너가 관리하는 객체를 의미한다. 이러한 Bean 은 애플리케이션의 구성 요소로서, 컨트롤러, 서비스, 리포지토리 등 다양한 역할을 수행할 수 있다. BeanXML 설정 파일이나 Java 어노테이션을 통해 정의되며, IoC 컨테이너는 애플리케이션 실행 시점에 Bean 을 생성하고 관리한다.

1.2. 필요성

  1. 의존성 주입 : Bean 은 의존성 주입(Dependency Injection)을 통해 객체 간의 의존성을 해결한다. 이를 통해 객체의 결합도를 낮추고, 테스트와 유지보수를 용이하게 한다.

  2. 객체 관리 : Spring IoC 컨테이너는 Bean 의 생명 주기를 관리하며, 객체의 생성, 초기화, 소멸을 책임진다. 이를 통해 개발자는 객체 관리의 복잡성을 줄일 수 있다.

  3. 유연성 : Bean 을 사용하면 애플리케이션의 구성 요소를 유연하게 정의하고 변경할 수 있다. 설정 파일이나 어노테이션을 통해 Bean 의 속성을 쉽게 수정할 수 있다.

  4. 재사용성 : Bean 은 애플리케이션의 구성 요소를 모듈화하고 재사용 가능하게 한다. 이를 통해 코드의 중복을 줄이고, 개발 효율성을 높일 수 있다.

2. Bean의 등록과 관리

2.1. Bean의 등록

Bean 은 주로 XML 설정 파일이나 Java 어노테이션을 통해 등록된다.

  • XML 설정 파일 : XML 설정 파일을 통해 Bean 을 정의할 수 있다.
    applicationContext.xml 파일에 Bean을 등록하는 예는 다음과 같다.
<bean id="myBean" class="com.example.MyBean">
    <property name="property" value="value"/>
</bean>
  • Java 어노테이션 : Java 클래스에 어노테이션을 사용하여 Bean 을 정의할 수 있다.
    대표적인 어노테이션으로 @Component, @Service, @Repository, @Controller 등이 있다.
@Component
public class MyBean {
    // Bean의 속성과 메서드
}

2.2. Bean의 관리

Spring IoC 컨테이너는 Bean 을 생성하고 관리하며, Bean 의 생명 주기를 책임진다.
Bean 의 관리에는 다음과 같은 작업이 포함된다.

  • 의존성 주입 : Bean 간의 의존성을 설정하고 주입한다.
  • 초기화 : Bean 의 초기화 작업을 수행한다.
  • 소멸 : Bean 의 소멸 작업을 수행한다.

Spring 은 다양한 방식으로 의존성 주입을 지원한다.
대표적인 방식으로 생성자 주입, 세터 주입, 필드 주입이 있다.

  1. 생성자 주입 : 생성자를 통해 의존성을 주입한다.
@Component
public class MyService {
    private final MyRepository myRepository;

    @Autowired
    public MyService(MyRepository myRepository) {
        this.myRepository = myRepository;
    }
}
  1. 세터 주입 : 세터 메서드를 통해 의존성을 주입한다.
@Component
public class MyService {
    private MyRepository myRepository;

    @Autowired
    public void setMyRepository(MyRepository myRepository) {
        this.myRepository = myRepository;
    }
}
  1. 필드 주입 : 필드를 통해 의존성을 주입한다.
@Component
public class MyService {
    @Autowired
    private MyRepository myRepository;
}

3. Bean의 생명 주기

3.1. Bean의 생명 주기

Bean 의 생명 주기는 객체가 생성되고 소멸되는 전체 과정을 의미한다. Spring IoC 컨테이너는 Bean 의 생명 주기를 관리하며, 다음과 같은 단계를 거친다.

  1. Bean 인스턴스 생성 : Bean 정의에 따라 IoC 컨테이너가 Bean 인스턴스를 생성한다.
  2. 의존성 주입 : Bean 인스턴스에 필요한 의존성을 주입한다.
  3. 초기화 : 초기화 메서드를 호출하여 Bean 을 초기화한다.
  4. 사용 : 애플리케이션에서 Bean 을 사용한다.
  5. 소멸 : 소멸 메서드를 호출하여 Bean 을 소멸한다.

3.2. Bean의 초기화와 소멸 메서드

Spring 에서는 Bean 의 초기화와 소멸 작업을 수행하기 위해 초기화 메서드와 소멸 메서드를 정의할 수 있다.
이는 XML 설정 파일이나 어노테이션을 통해 설정할 수 있다.

  • XML 설정 파일 : init-methoddestroy-method 속성을 사용하여 초기화 메서드와 소멸 메서드를 설정할 수 있다.
<bean id="myBean" class="com.example.MyBean" init-method="init" destroy-method="destroy"/>
  • Java 어노테이션 : @PostConstruct@PreDestroy 어노테이션을 사용하여 초기화 메서드와 소멸 메서드를 설정할 수 있다.
@Component
public class MyBean {
    @PostConstruct
    public void init() {
        // 초기화 작업
    }

    @PreDestroy
    public void destroy() {
        // 소멸 작업
    }
}

회고

Bean에 대해 공부하면서 애플리케이션의 구성 요소들을 독립적이고 재사용 가능하게 관리할 수 있다는 점이 매우 인상적이었다. 특히 의존성 주입을 통해 코드의 유연성과 유지보수성이 크게 향상된다는 점을 깨달았다.

0개의 댓글