일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 스프링 포매터
- open-session-in-view
- 동적파라미터
- 스프링
- 그래프큐엘
- ioc컨테이너
- 수정자주입
- 스프링di
- 정적팩토리메서드
- 도커 이미지 빌드
- 토비의 스프링
- Spring
- spring formatter
- java predicate
- 스프링 시큐리티 설정
- 소프트웨어의 품격
- jpa no session
- IOC
- kotlin ::
- 자바 필터
- jpa lazy
- 스프링시큐리티
- method refetence
- 비기능적 요구사항
- 기능적 요구사항
- 스프링부트 도커
- fetch join
- 생성자주입
- Atomicity
- kotlin 리팩터링
Archives
- Today
- Total
공부기록
아이템3. private생성자나 열거타입으로 싱글턴임을 보증하라 본문
반응형
private 생성자나 열거 타입으로 싱글턴임을 보증하라.
싱글턴?
- 인스턴스를 오직 하나만 생성할 수 있는 클래스.
- 무상태 객체나, 설계상 유일해야 하는 시스템컴포넌트 등.
만드는 방식
public static final 필드 방식의 싱글턴
public class Singleton { public static final Singleton INSTANCE = new Singleton(); private Singleton() { ... } }
- private 생성자는 Singleton.INSTANCE를 초기화할 때 딱 한 번만 호출된다.
- private 생성자이므로 인스턴스가 전체 시스템에서 하나 뿐임을 보장한다. ( 예외로는 리플렉션을 이용한 생성자 호출)
정적 팩터리 방식의 싱글턴
public class Singleton { **private** static final Singleton INSTANCE = new Singleton(); private Singleton() { ... } public static Singleton getInstance() { return INSTANCE; } }
- Singleton.getInstance()는 항상 같은 객체의 참조를 반환하므로 또 다른 인스턴스는 만들어지지않는다.
- 원소가 하나인 열거타입을 선언하는 것.
public enum Singleton { INSTANCE; }
- 앞선 두가지 방법 모두 리플렉션을 공격에 취약한데, 이 방식은 리플렉션 공격에도 안전하다.
- 대부분 상황에서는 이 방식이 가장 좋다. 단! 만드려는 싱글턴이 Enum외의 클래스를 상속해야한다면 이 방식은 쓸 수 없다. ( 다른 인터페이스를 구현하도록 선언은 가능 )
반응형
'JAVA' 카테고리의 다른 글
아이템5. 자원을 직접 명시하지 말고 의존객체주입을 사용하라. (0) | 2019.11.27 |
---|---|
아이템4. 인스턴스화를 막으려거든 private 생성자를 사용하라. (0) | 2019.11.26 |
아이템2. 생성자에 매개변수가 많다면 빌더를 고려하라 (0) | 2019.11.26 |
아이템1. 생성자 대신 정적 팩터리 메서드를 고려하라. (2) | 2019.11.26 |
1022 템플릿메서드 (0) | 2019.10.22 |