본문 바로가기
Book

[독서 기록] 헤드퍼스트 디자인 패턴 5장 | 싱글턴 패턴 - 하나뿐인 특별한 객체 만들기

by Renechoi 2022. 11. 15.
 
헤드 퍼스트 디자인 패턴
이유 1. 흥미로운 이야기와 재치 넘치는 구성이 담긴 〈헤드 퍼스트〉 시리즈! 하나의 패턴에 하나의 이야기를 담았습니다. 틀에 박히지 않아 지루할 틈이 없는 구성과 친구와 이야기하듯 편안한 대화체로 이야기를 풀어냅니다. 이야기 속에 다양한 방법으로 해결할 수 있는 질문과 90개 이상의 연습문제를 담았습니다. 마치 게임 퀘스트를 해결하듯 문제를 하나하나 해결하다 보면 학습한 내용이 머릿속에 강렬하게 남습니다. 이유 2. 원스톱으로 배우는 14가지 GoF 핵심 디자인 패턴과 9가지 객체지향 디자인 원칙! 현장에서 자주 사용되는 옵저버, 어댑터, MVC 패턴 등 14가지 GoF 객체지향 패턴을 중점으로 패턴의 정의, 사용 시기, 사용처, 사용 이유, 즉시 디자인에 적용하는 방법을 알려줍니다. 이와 더불어 객체지향 프로그래밍에 광범위하게 적용할 수 있는 OCP, 할리우드 원칙 등 9가지 객체지향 디자인 원칙과 패턴으로 생각하는 방법도 알려줍니다. 이유 3. 시대의 변화에 맞춘 개정과 한국 독자만을 위한 특별판! 자바 8과 자바 16 이상에서 무리 없이 동작할 수 있도록 예제 코드를 수정했으며, 부가적인 설명과 Q&A 질문을 추가했습니다. 또한 16여 년 만의 개정을 기념해 오직 한국 독자만을 위한 새로운 삽화를 사용하고 한글 친화적인 구성했습니다. 원서를 읽을 때보다 더욱 편안하게 디자인 패턴을 학습할 수 있습니다. ▶ 이 책을 읽어야 하는 당신! ● 소프트웨어 출시는 완벽 그 자체! “어?~ 코드 수정하려고 다시 보니까 난리…” → 유지보수만 생각하면 그저 눈물인 주니어 (자바) 개발자 ● 코딩 실력은 장판파의 장비! “어?~ 팩토리 메소드 패턴을 이렇게 적용했던가?” → 디자인 패턴을 다시 한번 살펴보고 싶은 시니어 (자바) 개발자 ● 혼자 공부해서 다진 프로그래밍 언어 실력! “어?~ 근데 패턴이 뭐야?” → 개발 현장의 소프트웨어 디자인 방법이 궁금한 개발자 지망생
저자
에릭 프리먼, 엘리자베스 롭슨, 케이시 시에라, 버트 베이츠
출판
한빛미디어
출판일
2022.03.16

 

헤드퍼스트 디자인 패턴 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;
    }
}
반응형