728x90
스프링 컨테이너의 존재 이유는?
객체들을 관리하는 행위를 컨테이너에서 진행한다는 것. 객체를 생성, 소멸까지의 관리를
개발자가 아닌 컨테이너가 대신 해주기 때문에 개발자는 로직 관리에만 집중할 수 있다.
스프링 Bean LifeCycle
db연결, 네트워크 소켓 연결 등 시작 시점에 미리 연결한 뒤 어플리케이션 종료시점에 연결을 종료해야 하는 경우
객체의 초기화 및 종료 작업이 필요하다.
그런데 어떤 타이밍에 초기화를 하고 종료할지에 대한 정보가 콜백이다.
스프링 컨테이너 생성 → 스프링 Bean 생성 → 의존관계 주입 → 초기화 콜백 메서드 호출 → 초기화(사용)
→ 소멸전 콜백 메서드 호출 → 스프링 종료
Bean 라이프 사이클을 압축시키기 위해 생성자 주입을 통해 객체 생성과 의존관계 주입을 한번에 처리하면
더 좋지 않을까?
Solid 원칙 중에 SRP라는 개념이 있다.
하나의 클래스는 하나의 책임만을 져야한다는 것.
그렇기에 클래스 마다 역할을 나누는 이유도 있고
더 디테일하게 들어가면 생성자는 객체를 생성하는 역할, 초기화는 이런 값들을 이용해 외부 커넥션과 연결하는 등
의 무거운 역할을 수행한다.
이렇기에 한번에 객체 생성과 초기화를 하는 것 보다 명확하게 나누는 것이 유지보수 관점에서 좋음.
객체를 생성해놓고 나중에서야 초기화를 진행하는 예시가 있을 수 있는데
이 경우에도 분리하는 것이 이득.(지연 초기화?라고 하는듯)
728x90
'Spring Boot 개념 정리' 카테고리의 다른 글
JWT 개념 정리 (0) | 2023.03.26 |
---|---|
빈 스코프 핵심 내용 이해하기 (0) | 2023.02.19 |
자동 bean 등록, 수동 bean 등록 어떤 경우에 하는게 좋을까? (0) | 2023.02.19 |
너무 복잡한 @Service 코드 리팩토링 해보기 (0) | 2023.02.18 |
abstract와 interface의 공통점, 차이점 이해하기 (0) | 2023.02.17 |