22.11.25.(금)-스프링 컨테이너, 싱글톤, @Component, @Autowired
스프링 컨테이너(ApplicationContext)를 생성하고 @Bean Annotation을 메서드에 등록하면 컨테이너에서 @Bean을 스캔하여 스프링 빈을 등록한다.
@CompoenetScan은 @Component가 붙은 모든 클래스를 스프링 빈으로 등록한다.
@Autowired를 지정하면 스프링 컨테이너가 자동으로 해당 스프링 빈을 찾아 주입한다.
(getBean(MemberRepository.class)와 동일)
싱글톤 패턴은 클래스의 인스턴스가 1개만 생성되는 것을 보장하는 디자인 패턴이다. 하지만 싱글톤 패턴을 사용하면 문제점이 여러가지가 발생한다. 다 이해하는건 어렵지만 결론적으로 유연성이 떨어진다고 한다.
그래서 스프링 컨테이너는 인스턴스를 한 개만 생성(싱글톤)하여 관리한다.
내부 로직은 자세히 알 수 없지만 스프링이 CGLIB라는 바이트코드 조작 라이브러리를 사용하여 싱글톤을 보장해준다고 한다. 바이트코드를 조작하는 CGLIB 기술을 사용해서 싱글톤을 보장해주려면 클래스에 @Configuration을 붙여주면 된다.
그래고 의존관계를 주입할 때 생성자 주입, 수정자(setter) 주입, 필드 주입, 일반 메서드 주입이 있는데 4가지 중에 대부분 생성자 주입을 사용한다고 하고 종종 수정자 주입을 한다고 한다.
생성자 주입을 하면 한 번만 호출 되는 것을 보장된다. 그리고 불변, 필수 의존관계에 사용된다.
내가 블로그에 찾아본 예제에는 필드에 @Autowired를 사용했는데 이 방법은 좋은 방법이 아니었다...
사실 @Autowired나 @Component도 왜 사용하는지 몰랐다. 하지만 순수 자바 코드로 AppConfig를 만들어 사용하는 클래스를 메서드로 사용하여 main 함수에 AppConfig 인스턴스를 생성해주면 되었다. 하지만 스프링 컨테이너를 사용하고 나면 싱글톤을 보장해주고 Annotation으로 OCP, DIP 원칙을 지키면서 코딩을 할 수 있게 해준다.
- 이제 스프링 부트로 개발을 시작할 날이 얼마 안 남았다
ㄴ 이번에 블랙프라이데이 이벤트라서 김영한님의 강의 실전 JPA1, 2 강의를 구매하였다.
ㄴ 요즘 개인적으로 재정긴축해서 아껴쓰고 있긴하지만... 과감하게 강의를 질러야될 만큼 속도감있게 올바른 방향으로 공부를 해야되었다. 현재 위기기만 기회로 만들기 위해서 계속 노력이 필요하다. 강의가 비싸지만 영한님 버프 받고 생존의 굴레에서 벗어나자
댓글을 작성해보세요.