런타임노트

[헤드퍼스트 디자인패턴] 16일차. 217-226pg 본문

책책책 책을 읽읍시다‼ ver.개발/[ 헤드퍼스트 디자인패턴 ]

[헤드퍼스트 디자인패턴] 16일차. 217-226pg

D269 2023. 5. 11. 17:33
728x90

16일차

헤드퍼스트 디자인패턴 [3주차_목요일]

217-226pg

요약

CHAPTER 05. 하나뿐인 특별한 객체 만들기 (feat. 싱글턴 패턴)

[ 초콜릿 보일러 문제 해결하기 ]

방법1. getnstance() 메소드 동기화 하기 : 항상 올바른 결과가 나옴. 초콜릿 보일러의 속도문제는 중요히자 않으니 이 방법 괜찮음.

방법2. 인스턴스를 시작하자마자 만들기 : 초콜릿 보일러의 인스턴스는 항상 필요하기 때문에 정적으로 초기화 하는 것도 괜찮은 방법. 하지만 방법1과 큰 차이가 없다.

방법3. DCL 사용하기 : 속도 문제가 중요하지 않기 때문에 DCL까지 쓸 필요 없음.

 

  • 클래스 로더가 2개 이상이라면 같은 클래스를 여러 번 로딩할 수도 있으니, 클래스 로더가 여러 개라면 싱글턴을 조심해서 사용해야 합니다.
  • 리플렉션, 직렬화, 역직렬화도 싱글턴에서 문제가 될 수 있다.
  • 싱글턴은 느슨한 결합 원칙에 위배된다.
  • 싱글턴은 라이브러리에 넣을 수 있는 형태의 해법이 아니며, 싱글턴 코드는 간단하기 때문에 기존 클래스에 있던 코드를 싱글턴 클래스에 넣기 쉽다.
  • 싱글턴은 특수한 상황에서 제한된 용도로 사용하려고 만들어진 것이기 때문에 애플리케이션을 만들 때 싱글턴을 많이 사용했다면 다시 한번 생각해볼 필요가 있다.

⇒ 동기화문제, 클래스로딩문제, 리플렉션, 직렬화, 역직렬화 문제는 enum으로 해결할 수 있다.

 

 

 

[ 객체지향 패턴 추가++ ]

  • 싱글톤 패턴 : 클래스 인스턴스를 하나만 만들고, 그 인스턴스로의 전역 접근을 제공한다.
  • 애플리케이션에서 특정 클래스의 인스턴스가 하나만 있어야 한다면 그 클래스를 싱글톤으로 만들면 된다.

 

CHAPTER 06. 호출 캡슐화하기 (feat. 커맨드 패턴)

메소드 호출을 캡슐화 한다.

 

[ 확장형 기상스테이션 ]

  • 홈오토메이션 리모컨 API 디자인 의뢰

 

 

발췌

💡 자바의 enum을 쓰면 간단하게 싱글톤을 구현할 수 있다.

 

 

 

 

 

 

 

728x90
반응형