Java - Singleton 디자인패턴

고태희·2022년 1월 20일
0

Java

목록 보기
1/5

Singleton 디자인 패턴

개념

어떤 클래스가 최초 한번만 메모리를 할당하고 그 메모리에 객체를 만들어 사용하는 디자인 패턴

객체의 생성제어가 필요할 때 싱글톤 디자인패턴을 적용하면 좋다.

예를 들어 선생과 학생이 있는데 물론, 학생 한명당 선생 한명을 붙이는 1:1 수업을 진행하면 좋지만, 이는 선생을 불필요하게 많이 사용(메모리 낭비)하는 것이므로, 선생을 한명만 사용하여 일대다 수업을 진행해도 무리는 없다.

이러한 객체(선생)를 stateless 객체라고 한다. 객체의 상태에는 관심이 없고, 오로지 동작에만 관심이 있는 경우이다.
즉, 수정가능한 멤버변수가 없고, 메서드만 존재하는 경우

싱글톤 디자인 패턴을 사용하는 이유는

  • 한번의 객체 생성으로 재사용이 가능하기 때문에 메모리 낭비를 방지할 수 있다.
  • 싱글톤으로 생성된 객체는 무조건 한번 생성으로 전역성을 띄기 때문에 다른 객체와 공유가 용이하다

사용법

  1. 외부에서 생성자 접근 금지 (생성자를 private)
  2. 내부에서 직접 객체 생성(멤버 변수이므로 private, 메모리에 할당해야 하므로 static)
  3. 이미 만들어진 객체만을 사용할 것이므로 setter()는 불필요하다. getter()만 생성(이 또한 static이어야 한다.)
  4. public static getInstance()를 만들어주어서 내부에서 직접생성한 객체를 사용할 수 있도록 해준다
    참고 접근제한자

예제

문제점

  • 위에서 언급된 것처럼 전역성을 띄면서 다른 객체와 공통으로 사용하는 경우와 몇가지 케이스에서만 효율적이다.
  • 해당 싱글톤 객체를 사용하는 다른 객체와의 결함도가 높아져서 객체 지향 설계 원칙에 벗어날 수 있다.
  • 해당 싱글톤 객체를 수정할 경우 싱글톤 객체를 사용하는 곳에서 사이드 이펙트 발생 확률이 생기게 되며, 멀티 스레드 환경에서 동기화 처리 문제등이 생기게 된다.

0개의 댓글