Skip to content

Latest commit

 

History

History
18 lines (11 loc) · 1.42 KB

singleton-pattern.md

File metadata and controls

18 lines (11 loc) · 1.42 KB

싱글톤 패턴

애플리케이션이 시작되고 하나의 클래스 인스턴스를 보장하고, 전역적인 접근점을 제공하는 패턴

장점으로는 전역 변수를 사용하지 않기 때문에 디버깅이 쉽고, 네임 스페이스가 망가지는 일이 없습니다. 유일하게 존재하는 인스턴스로의 접근을 통제할 수 있습니다. 이는 데이터의 공유를 쉽게합니다.

단점으로는 싱글톤 인스턴스가 너무 많은 일을 하거나, 너무 많은 데이터를 가질 경우 결합도가 높아집니다. 멀티스레드 환경에서 동기화 처리를 하지 않으면 여러개 생성될 수 있습니다.

멀티스레드에서 안전한 싱글톤 인스턴스 만들기

  1. 게으른 초기화(syncronized 블록 사용): 느려서 권장되지 않음
  2. Double-check locking: if문으로 존재여부를 체크하고 syncronized 블록 사용 어느정도 완화되긴 하지만 완벽하진 않음
  3. holder에 의한 초기화: 클래스안에 클래스(Holder)를 두어 JVM의 Class loader 매커니즘을 이용한 방법 개발자가 직접 동기화 문제를 해결하기 보다는 JVM의 원자적 특성을 이용한 초기화의 책임을 JVM으로 이동 (일반적으로 Singleton을 이렇게 사용해야한다.)

어? 너무 복잡해지는데?

그래서 Spring을 사용하는 것, Spring은 Singleton Registry인 Application Context를 가지고 있다.