728x90
반응형
1. 싱글톤 패턴이란?
하나의 인스턴스만 만들고, 그 인스턴스를 사용하는 디자인 패턴
2. 스프링 컨테이너
- 스프링 컨테이너는 싱글톤 패턴을 적용하지 않아도, 객체 인스턴스를 싱글톤으로 관리한다.
- 스프링 컨테이너는 싱글톤 컨테이너 역할을 한다. 이렇게 싱글톤 객체를 생성하고 관리하는 기능을 싱글톤 레지스트리라 한다.
- 스프링 컨테이너는 지저분한 코드가 들어가지 않아도 된다.
3. 싱글톤 패턴의 주의점
- 여러 클라이언트가 하나의 같은 객체를 공유하기때문에 싱글톤 객체는 상태를 유지하게 설계하면 안된다.
- 특정 클라이언트에 의존적인 필드가 있으면 안된다.
- 특정 클라이언트가 값을 변경할 수 있는 필드가 있으면 안된다.
- 가급적 읽기만 가능해야 한다.
- 변수를 따로 할당해주어서 쓰거나 해야지 직접 값을 변경하는 방법은 좋지 않다.
4. @Configration , 싱글톤
@Configuration
public class AppConfig {
@Bean
public MemberService memberService() {
System.out.println("call AppConfig.memberService");
return new MemberServiceImpl(memberRepository());
}
@Bean
public MemoryMemberRepository memberRepository() {
System.out.println("call AppConfig.memberRepository");
return new MemoryMemberRepository();
}
@Bean
public OrderService orderService() {
System.out.println("call AppConfig.orderService");
return new OrderServiceImpl(memberRepository(),discountPolicy());
}
@Bean
public DiscountPolicy discountPolicy() {
return new RateDiscountPolicy();
}
}
이런 식의 코드가 있을 때 일반적인 생각으로는 AppConfig 파일이 불러와질 때 memberRepository는 3번이 불러와져야 한다.
하지만 스프링이 싱글톤 패턴을 적용시켜서 한 번만 불러와진다.
5. 바이트코드 조작법
AppConfig 를 로그로 찍어보면 CGLIB이 붙은 것을 볼 수 있다.
자바 코드를 바이트 코드로 바꿔서 스프링 컨테이너에 등록을 하는 것을 알 수 있다.
바이트 코드를 비교해서 이미 등록이 된 bean 을 두 번 반환하지 않고 한 번만 반환하는 것을 알 수 있다.
이는 @Configuration Annotation 을 사용해야지만 바이트 코드를 사용한 싱글톤이 보장됨을 의미한다.
728x90
반응형
'Back-End > Spring Boot' 카테고리의 다른 글
Spring Boot | 지식 | 포트 변경 방법 (0) | 2022.08.28 |
---|---|
Spring Boot | 지식 | LOMBOK Library 사용법 (0) | 2022.08.25 |
Spring Boot | 지식 | IoC, DI, Container (0) | 2022.08.24 |
Spring Boot | 지식 | SOLID (0) | 2022.08.23 |
Spring Boot | 입문 | JPA, 스프링 데이터 JPA , AOP (0) | 2022.08.20 |