Java 디자인 패턴-01.Singleton
(Java 디자인 패턴 스터디 모집 중 : https://github.com/bluedskim/javaDesignPatterns)
(출처 : refactoring.guru : Singleton pattern)
해결하려는 문제
- 공유된 자원은 대체로 한정적이다. 이 자원을 무분별하게 사용하는 경우 쉽게 고갈될 수 있다.
용도
- 어플리케이션을 통틀어 한 개의 인스턴스만 필요할 때
- 그 한 개의 인스턴스를 쉽게 접근하고자 할 때
- 어플리케이션의 전체 영역에서 사용할 수 있는 전역변수가 필요할 때
특징
- 해당 클래스의 생성자는 직접 호출할 수 없음
- 대신 해당 객체를 반환하는 public static 메소드를 만든다
고려사항
- 객체지향 설계원칙에 위배
- singleton 클래스는 상속 불가
- “No control over creation”
- singleton 클래스에 dependency injection 불가
- spring bean은 기본적으로 singleton으로 동작한다(https://www.baeldung.com/spring-bean-scopes)
클래스 다이어그램
소스
-
소스 다운로드 : https://github.com/bluedskim/javaDesignPatterns/tree/master/01.Singleton/dskim_singleton
-
싱글톤 클래스 : Coin.java
-
클라이언트 : SingletonTest.java
참고
(Java 디자인 패턴 스터디 모집 중 : https://github.com/bluedskim/javaDesignPatterns)