본문 바로가기
JAVA/Spring

스프링 IoC 컨테이너에서 빈 명명 및 인스턴스화

by GangDev 2024. 5. 29.

스프링 IoC 컨테이너에서 빈 명명하는 방법

스프링 IoC 컨테이너는 하나 이상의 빈을 관리한다. 이 빈들은 컨테이너에 제공하는 설정 메타데이터(예: XML <bean/> 정의)를 통해 생성된다. 컨테이너 내부에서는 이러한 빈 정의가 BeanDefinition 객체로 표현되며, 이는 빈의 클래스 이름, 스코프, 라이프사이클 콜백 등 다양한 메타 데이터를 포함한다.

 

빈 명명 규칙

  • 빈 식별자: 각 빈은 하나 이상의 식별자를 가진다. 이 식별자는 해당 빈을 호스팅하는 컨테이너 내에서 유일해야 한다. 대부분의 경우, 빈은 하나의 식별자만 가지지만, 필요하다면 추갖거인 별칭을 가질 수 있다.
  • XML 기반 설정: XML 설정 메타데이터에서는 id 속성, name 속성, 또는 둘 다를 사용하여 빈 식별자를 지정할 수 있다. id 속성은 정확히 하나의 id를 지정할 수 있게 해주며, name 속성에서는 콤마(,), 세미콜론(;), 또는 공백으로 구분된 여러 별칭을 지정할 수 있다.
  • 명명 규칙: 빈의 이름을 지정할 때는 표준 Java 인스턴스 필드 이름 규칙을 따르는 것이 좋다. 즉, 빈 이름은 소문자로 시작하고 카멜 케이스로 작성된다. 예를 들어, accountManager, accountService, userDao, loginController 등이 있다. 일관된 방식으로 빈을 명명하면 설정을 더 쉽게 읽고 이해할 수 있으며, Spring AOP를 사용할 때 이름에 따른 조언을 적용하는 데 도움이 된다.

스프링에서는 빈을 명명하는 것이 매우 중요하다. 이는 빈을 참조하거나, 의존성 주입을 위해 특정 빈을 찾을 때 필요하기 때문이다. 또한, 일관된 명명 규칙을 따르면 애플리케이션의 구조를 더 명확하게 이해하고 관리할 수 있다.

스프링 IoC 컨테이너에서 빈을 인스턴스화하는 방법

스프링 IoC 컨테이너는 애플리케이션의 컴포넌트(빈)을 생성하고 관리하는 역할을 한다. 이 과정은 설정 메타데이터를 기반으로 진행되며, 설정 메타데이터는 XML 파일, Java 애노테이션, 또는 Java 코드를 통해 제공될 수 있다. 빈 인스턴스화는 컨테이너가 설정 메타데이터를 읽고 분석한 후, 반영된 빈 정의에 따라 객체를 생성하는 과정을 말한다.

 

빈 인스턴스화 과정

  • 초기화: 스프링 애플리케이션이 시작될 때, IoC 컨테이너가 초기화된다. 이 과정에서 컨테이너는 설정 메타데이터를 읽고 파싱하여 메모리에 빈 정의의 표현을 생성한다.
  • 빈 인스턴스화: 컨테이너는 빈 정의에 기반하여 빈 인스턴스를 생성한다. 이는 생성자나 팩토리 메서드를 호출하여 객체를 인스턴스화하는 방식으로 이루어진다. 이 과정에서 리플렉션(reflection)을 사용하여 객체를 생성한다.
  • 의존성 주입(DI): IoC 컨테이너는 빈에 의존성을 주입한다. 빈이 의존성을 가진다면, 컨테이너는 설정에서 이를 찾아 빈이 생성될 때 주입한다.
  • 라이프사이클 관리: 컨테이너는 빈의 전체 라이프사이클을 관리한다. 빈이 인스턴스화되고 의존성이 주입된 후, @PostConstruct로 주석이 달린 초기화 메서드가 호출된다. 또한, 빈이 DisposableBVean 인ㅍ터페이스를 구현하거나 @PreDestroy로 주석이 달린 메서드를 가지고 있다면, 빈이 파괴되기 전에 이 메서드들이 호출된다.
  • 싱글톤 스코프: 기본적으로 빈들은 싱글톤으로 생성되며, 이는 컨테이너 내에 빈의 인스턴스가 하나만 존재한다는 것을 의미한다. 컨테이너는 싱글톤 빈을 추적하고, 빈이 요청될 때마다 동일한 인스턴스를 반환한다.

스프링 IoC 컨테이너를 사용함으로써 애플리케이션의 컴포넌트 관리와 의존성 주입을 효율적으로 처리할 수 있다. 이는 애플리케이션의 구조를 더 유연하게 만들고, 컴포넌트 간의 결합도를 낮춤으로써 유지보수성을 향상시킨다.