싱글턴 패턴 vs static

static과 싱글턴의 핵심 차이는?

  • 싱글턴은 실제 개체(인스턴스), static은 개체가 아니라 클래스 소속
  • 싱글턴은 개체 생성 개념이 있어 생성 시점을 제어할 수 있음 (getInstance() 첫 호출 시 생성)
  • static은 개체 생성 개념이 없고 클래스 로딩 시 초기화

static으로는 못 하는 일 3가지는? (싱글턴 개체로는 가능)

  1. 다형성: 인터페이스 구현·오버라이드를 통한 다형적 사용 (static은 개체가 아니라 불가)
  2. 개체를 인자로 전달: 참조형으로 매개변수에 넘기거나 변수에 담기 (static은 개체가 없어 불가)
  3. 생성(초기화) 시점 제어: static은 클래스 로딩 시 자동 초기화되어 시점을 제어 불가 (싱글턴은 lazy 생성)

싱글턴 개체는 언제 생성되는가?

처음으로 getInstance()가 호출될 때 생성됨 (lazy initialization)

  • 여러 곳에서 호출하면 생성 시점을 제어하기 어려움
  • 초기화 순서를 보장하려면 프로그램 시작 시 정해진 순서대로 getInstance()를 호출 (외부 API 사용 시 자주 함)

0건의 항목