헤드퍼스트 디자인 패턴 5장 | 싱글턴 패턴 - 하나뿐인 특별한 객체 만들기
(에릭 프리먼 외 4인, 서환수 옮김, 한빛미디어)
"어떻게 하면 한 클래스의 인스턴스를 2개 이상 만들지 않게 하지?"라는 질문을 던져보세요.
- 204p
고전적인 싱글턴 패턴 구현법
public class Singleton {
private static Singleton uniqueInstance;
=> Singleton 클래스의 하나뿐인 인스턴스를 저장하는 정적 변수
private Singleton() {}
=> 생성자를 private로 선언했으므로 singleont에서만 클래스의 인스턴스를 만들 수 있습니다.
public static Singleton getInstance() {
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
return uniqueInstance;
}
}
=> uniqueInstance에 하나뿐인 인스턴스가 저장됩니다. 정적 변수란 걸 잊지 마세요.
=> uniqueInstance가 null이면 아직 인스턴스가 생성되지 않았다는 사실을 알 수 있습니다.=> private으로 선언된 생성자를 사용해서 singleton 객체를 만든 다음 uniqueInstance에 그 객체를 대입합니다.
=> nill이 아니면 이미 객체가 생성된 것이죠. 이때는 바로 return 선언문으로 넘어갑니다 => 인스턴스가 존재하는 상황이므로 그 인스턴스를 리턴하기만 하면 됩니다.
- 207p
싱글톤 => 생성자 private으로 설정 => 인스턴스가 만들어질 수 없음 => 필요할 때는 인스턴스를 달라고 요청 = getInstance()라는 정적 메소드
- 208p
싱글턴 패턴은 클래스 인스턴스를 하나만 만들고, 그 인스턴스로의 전역 접근을 제공합니다.
- 211p
멀티스레딩 문제 해결하기
getInstance()를 동기화하면 멀티스레딩과 관련된 문제가 간단하게 해결됩니다.
= synchronized 키워드 추가
- 214p
enum으로 싱글턴을 생성해서 해결하기
public enum Singleton {
UNIQUE_INSTANCE;
}
public class SingletonClient {
public static void main(Stirng[] args) {
Singleton singleton = Singleton.UNIQUE_INSTANCE;
}
}
반응형
'Book' 카테고리의 다른 글
[독서 기록] 헤드퍼스트 디자인 패턴 7장 | 적응시키기 - 어댑터 패턴과 퍼사드 패턴 (0) | 2022.11.15 |
---|---|
[독서 기록] 헤드퍼스트 디자인 패턴 6장 | 커맨트 패턴 - 호출 캡슐화하기 (0) | 2022.11.15 |
[독서 기록] 헤드퍼스트 디자인 패턴 4장 | 팩토리 패턴 - 객체지향 빵 굽기 (0) | 2022.11.14 |
[독서 기록] 헤드퍼스트 디자인 패턴 3장 | 객체 꾸미기 - 데코레이터 패턴 (0) | 2022.11.14 |
[독서 기록] 헤드퍼스트 디자인 패턴 2장 | 객체들에게 연락 돌리기 - 옵저버 패턴 (0) | 2022.11.14 |