Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 성수맛집
- 객체지향프로그래밍
- 코딩
- 성수볼거리
- 상속
- 헤드퍼스트
- DesignPattern
- 헤드퍼스트디자인패턴
- 클린코드
- Linux
- Java
- JavaScript
- 책너두
- 책읽기
- 성수
- 오브젝트
- 디자인패턴
- 독서
- JAVA개발자
- docker
- IntelliJ
- 직장인점심
- 성수핫플
- 개발자
- 독서일지
- 객체지향
- 직장인
- 성수직장인
- 주니어개발자
- 깨끗한코드
Archives
- Today
- Total
런타임노트
[헤드퍼스트 디자인패턴] 15일차. 205-216pg 본문
728x90
15일차
헤드퍼스트 디자인패턴 [3주차_수요일]
205-216pg
요약
CHAPTER 05. 하나뿐인 특별한 객체 만들기 (feat. 싱글턴 패턴)
- 게으른 인스턴스 생성 (lazyinstantiation) : 인스턴스가 필요한 상황이 오기 전까지 아예 인스턴스를 생성하지 않도록 하는 방법.
- 싱글톤 패턴의 생성자는 private으로 저장되어 있다. public으로 지정된 생성자는 없음
- 싱클톤 객체가 필요할 때는 인스턴스를 달라고 요청한다. → getInstance()
[ 초콜릿 보일러 ]
- 보일러가 가득 차 있을 때와 비어있을 때를 분리해서 코딩
[ 싱글톤 패턴 (Singleton Pattern) ]
클래스 인스턴스를 하나만 만들고, 그 인스턴스로의 전역 접근을 제공한다.
- 이 패턴을 실제 적용할 때는 클래스에서 하나뿐인 인스턴스를 관리하도록 만든다.
- 다른 어떤 클래스에서도 자신의 인스턴스를 추가로 만들지 못하게 한다,
→ 인스턴스가 필요하다면 반드시 클래스 자신을 거치도록
- 어디서든 인스턴스에 접근 가능하도록 전역접근 지점을 제공한다.
- 자원을 많이 잡아먹는 인스턴스일 경우, 게으른 인스턴스 생성 방식이 유용하다.
[ 멀티 스레딩 문제 ]
초콜릿 보일러에서 문제가 발생했다.
getInstance()를 동기화하면 멀티스레딩과 관련된 문제가 간단하게 해결된다,
→ 한 스레드가 메소드 사용을 끝내기 전까지 다른 스레드는 기다려야 한다.
하지만 동기화는 불필요한 오버헤드만 증가시킨다.
→ uniqueInstance 변수에 Singleton 인스턴스를 대입하면 동기화 상태로 유지하지 않아도 됨.
[ 멀티 스레딩에서도 싱글톤이 돌아가도록 ]
방법1. 정적초기화 부분에서 싱글톤의 인스턴스를 생성한다.
방법2. DCL(Double-Checked Locking)을 써서 getInstance()에서 동기화되는 부분을 줄인다. : 인스턴스가 생성되어 있는지 확인하고, 생성이 되어있지 않았을 때만 동기화 한다.
발췌
💡 volatile : 멀티스레딩을 쓰더라도 uniqueInstance 변수가 Singleton 인스턴스로 초기화되는 과정이 올바르게 진행된다.
728x90
반응형
'책책책 책을 읽읍시다‼ ver.개발 > [ 헤드퍼스트 디자인패턴 ]' 카테고리의 다른 글
| [헤드퍼스트 디자인패턴] 17일차. 227-239pg (0) | 2023.05.17 |
|---|---|
| [헤드퍼스트 디자인패턴] 16일차. 217-226pg (0) | 2023.05.11 |
| [헤드퍼스트 디자인패턴] 14일차. 190-204pg (0) | 2023.05.10 |
| [헤드퍼스트 디자인패턴] 13일차. 180-189pg (0) | 2023.05.08 |
| [헤드퍼스트 디자인패턴] 12일차. 166-179pg (0) | 2023.05.08 |