[이펙티브자바] 2-3. private 생성자나 열거 타입으로 싱글턴임을 보증하라

한지연·2023년 2월 17일
0

📘 private 생성자나 열거타입으로 싱글턴임을 보증하라

싱글톤(Singletone)

: 인스턴스를 오직 하나만 생성할 수 있는 클래스

싱글톤 생성 방법

  1. public static final 필드
    : static final 필드를 초기화할 때 딱 한 번만 호출 ▶︎ 해당 인스턴스가 전체 시스템에서 하나뿐
    : 해당 클래스가 싱글턴임이 API에 명백히 드러남
    : 간결함
public static final Smartphone INSTANCE = new Smartphone(); // 이렇게 선언해두고

Smartphone smartphone = Smartphone.INSTANCE; // 이렇게 가져다 씀
  1. 정적 팩터리 메서드 멤버 제공
    : API를 바꾸지 않고도 싱글턴이 아니게 변경할 수 있음
    : 정적 팩터리를 싱글턴 팩터리로 만들 수 있음
    : 정적 팩터리의 메서드 참조를 공급자로 사용할 수 있음
  public static Smartphone getInstance() { return INSTANCE; // 이렇게 메서드로 만들고
    }
  Smartphone smartphone = Smartphone.getInstance(); // 이렇게 가져다 씀
  1. 열거 타입 선언
    : 간결하고 추가 노력없이 직렬화 가능
    : 아주 복잡한 직렬화 상황이나 리플렉션 공격에도 제2의 인스턴스가 생기는 일을 완벽히 막아줌
    : 원소가 하나뿐인 열거 타입으로 싱글턴을 만드는 것이 바람직한 방법
public enum Smartphone {
    INSTANCE; // 이렇게 선언하고
}
Smartphone smartphone = Smartphone.INSTANCE; // 이렇게 가져다 씀

📚 Enum

  • 열거형, 서로 연관된 상수들의 집합

장점

  1. IDE의 적극적인 지원을 받을 수있음
  2. 허용 가능한 값 제한 가능
  3. 리팩토링 시 변경 범위가 최소화
  4. 데이터들 간의 연관 관계 표현
  5. 상태와 행위를 한곳에서 분리

item3 파트에서 eum이라는 개념이 나와 조금 상세하게 더 설명을 붙일까 했는데
6장에서 Enum을 상세하게 다루기 때문에 오늘은 개념과 장점 정도만 간략하게 파악하고 넘어가려 한다.

profile
배우고 활용하는 것을 즐기는 개발자, 한지연입니다!

0개의 댓글