SSAFY11th-book-study / book-study

SSAFY 11기 6반의 '토비의 스프링 스터디'
0 stars 0 forks source link

[7.6.5] 빈 설정 메서드가 스태틱이어야 하는 이유 #92

Open gmelon opened 3 months ago

gmelon commented 3 months ago

p.700 을 보면, 빈 팩토리 후처리기로 사용되는 빈을 정의할 때 빈 설정 메서드가 static 이어야 한다고 되어 있습니다. 왜 static 으로 해야만 하는걸까요?

image
sootudio commented 3 months ago

제가 찾아봤을 때는, 3가지 정도의 이유가 있다고 나왔습니다. 적고 있었는데, 지금 토프링이 시작해버려서 그냥 지피티 답변 붙혀넣을게요...ㅋㅋㅋ


빈 팩토리 후처리기(BeanFactoryPostProcessor)란? 빈 팩토리 후처리기는 스프링 컨테이너가 초기화된 후, 실제 빈 인스턴스가 생성되기 전에 빈 정의(Bean Definition)를 수정할 수 있는 메커니즘을 제공합니다. 이 후처리기는 보통 빈 정의의 메타데이터를 조작하거나, 추가적인 설정을 위해 사용됩니다.

왜 static으로 정의해야 하는가?

  1. 조기 실행: 빈 팩토리 후처리기는 스프링 컨테이너 초기화 시점에 실행됩니다. 이 시점에서는 아직 다른 빈들이 생성되지 않았을 수 있습니다. static 메서드는 클래스 로딩 시점에 실행되므로, 빈 인스턴스화가 완료되기 전에 실행될 수 있습니다. 이를 통해 빈 팩토리 후처리기가 가장 먼저 실행될 수 있게 보장합니다.

  2. 의존성 문제 회피: 빈 팩토리 후처리기가 실행될 때는 다른 빈들이 아직 완전히 초기화되지 않았을 수 있습니다. 만약 이 시점에 다른 빈에 의존한다면, 의존성 주입 문제로 인해 예외가 발생할 수 있습니다. static 메서드는 인스턴스화 과정과 무관하게 실행되므로, 이러한 의존성 문제를 회피할 수 있습니다.

  3. 성능 최적화: static 메서드는 클래스 로딩 시점에 한 번만 로드되므로, 메모리 사용 측면에서 약간의 최적화가 가능합니다. 이는 스프링 컨테이너 초기화 속도에 긍정적인 영향을 미칠 수 있습니다.


2, 3 번에 대해서 지피티가 조금 더 쉬운 설명을 해줘서 아래 함께 넣겠습니다.

  1. 의존성 문제 회피 스프링 컨테이너는 여러 개의 빈을 관리하고, 이 빈들 사이의 의존성을 해결합니다. 하지만 빈 팩토리 후처리기는 컨테이너 초기화 과정에서 실행되므로, 이 시점에는 다른 많은 빈들이 아직 생성되지 않았을 수 있습니다.
  1. 성능 최적화 static 메서드는 클래스가 로딩될 때 메모리에 한번만 로드되기 때문에 인스턴스 메서드에 비해 약간의 성능 이점을 제공합니다.