싱글톤 패턴

Jungmin Lee·2021년 4월 21일
1

CS

목록 보기
6/8
post-thumbnail

gyoogle.dev 블로그와 jeong-pro 블로그를 참고하여 작성하였습니다.
이미지를 누르면 이미지의 출처로 이동합니다.

싱글톤패턴

  • 어플리케이션이 시작될 때 클래스가 최초 한번만 메모리 할당하고 해당 메모리에 인스턴스 만들어 사용하는 패턴 -> static!
  • java 에서는 생성자를 private로 선언해 다른 곳에서 생성 막고, getInstace()메소드 이용해 사용하게 구성
  • 단 하나의 인스턴스 생성해서 사용하는 디자인 패턴

사용이유

  • 고정된 메모리 영역 얻으면서 한번의 new 인스턴스를 사용하기 때문에 메모리 낭비를 방지
  • 전역 인스턴스이기 때문에 데이터 공유가 쉬움
  • 공통객체 여러개 생성해서 사용해야 하는 상황에 좋음
    • DB에서 커넥션풀, 스레드 풀, 캐시, 로그기록 객체 등
  • 안드로이드 앱에서 액티비티 들이나 클래스마다 클래스 하나씩 전달번거로워 접근쉽게
  • 인스턴스가 절대적으로 한개만 존재하는것을 보증하고 싶을때 사용

문제점

  • 많은 데이터를 싱글톤을 통해 공유할 경우 다른 클래스 간 인스턴스에 결합도 높아져 개방-폐쇄원칙 위배(객체지향 설계원칙 위배)
  • 수정, 테스트 어려워짐
  • 멀티스레드 환경에서 동기화 처리 안하면 인스턴스 중복생성 가능성 발생
  • 꼭 필요한 상황 제외하면 지양

멀티스레드 환경에서 안전한 싱글톤 만드는 법

  • Lazy Initialization
  • Lazy Initialization+Double-checked Locking
  • Initialization on demand holder idiom(holder에 의한 초기화)
    -> 비용문제와 정확성때문에 Holder을 이용하는 법을 가장많이 사용(JVM 클래스 초기화 과정에서 보장되는 원자적 특성이용)

코드 참고

profile
금융 도메인과 개발 지식을 함께 쌓아가는 주니어 개발자입니다😊

0개의 댓글