| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- Linux
- 성수맛집
- 직장인점심
- docker
- 오브젝트
- 책읽기
- 성수볼거리
- 객체지향
- 책너두
- 깨끗한코드
- DesignPattern
- 헤드퍼스트
- 직장인
- 개발자
- IntelliJ
- 객체지향프로그래밍
- 독서
- 성수핫플
- JavaScript
- 상속
- 헤드퍼스트디자인패턴
- 독서일지
- JAVA개발자
- 코딩
- 클린코드
- 주니어개발자
- 디자인패턴
- 성수직장인
- 성수
- Java
- Today
- Total
런타임노트
[헤드퍼스트 디자인패턴] 12일차. 166-179pg 본문
12일차
헤드퍼스트 디자인패턴 [토요일]
166-179pg
요약
CHAPTER 04. 객체지향 빵 굽기 (feat. 팩토리 패턴)
[ 병렬 클래스 계층구조 알아보기 ]
생산자 클래스와 거기에 대응되는 제품 클래스는 병렬 계층구조로 볼 수 있다.
Pizza(제품 클래스)와 PizzaStore(생산자 클래스) 살펴보기
- 둘 다 추상 클래스로 시작
- 그 클래스를 확장하는 구상 클래스들을 가지고 있다.
- 뉴욕지점, 시카고 지점의 구체적인 구현은 구상 클래스들이 책임지고 있다.
[ 팩토리 메소드 패턴의 정의 ]
팩토리 메소드 패턴에서는 객체를 생성할 때 필요한 인터페이스를 만든다.
어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정한다.
팩토리 메소드 패턴을 사용하면 클래스 인스턴스 만드는 일을 서브클래스에게 맡기게 된다.
추상클래스에서 팩토리 메소드용 인터페이스를 제공한다.
추상클래스에서 구현되어 있는 다른 메소드는 팩토리 메소드에 의해 생산된 제품으로, 필요한 작업을 처리하지만, 실제 팩토리 메소드를 구현하고 제품(객체 인스턴스)을 만드는 일은 서브 클래스만 할 수 있다.
** 사용하는 서브클래스에 따라 생산되는 객체 인스턴스가 결정된다.
[ 간단한 팩토리와 팩토리 메소드 패턴의 차이 ]
간단한 팩토리가 일회용 처방이라면, 팩토리 메소드 패턴은 다회용 처방이다. (여러번 재사용이 가능한 프레임워크 만들기 가능).
간단한 팩토리는 객체 생성을 캡슐화하는 방법을 사용하긴 하지만 생성하는 제품을 마음대로 변경할 수 없기 때문에 팩토리 메소드만큼 유연하지는 않다.
[ 팩토리의 장점 ]
- 객체 생성 코드를 전부 한 객체 또는 메소드에 넣으면 코드에서 중복되는 내용을 제거 할 수 있다.
- 객체 인스턴스를 만들 때 인터페이스만 있으면 된다.
- 인터페이스를 바탕으로 프로그래밍할 수 있어서 유연성과 확장성이 뛰어난 코드를 만들 수 있다.
[ 객체 의존성 ]
PizzaStore는 모든 피자 객체를 직접 생성해야 하므로, 이 PizzaStore는 모든 피자객체에 직접 의존이다.
피자 구상 클래스가 변경되면 PizzaStore까지도 바꿔야 할 수 있으므로, PizzaStore는 피자 클래스 구현에 의존한다.
[ 의존성 뒤집기 원칙 (Dependency Inversion Principle) ]
-추상화된 것에 의존하게 만들고, 구상 클래스에 의존하지 않게 만든다.
-고수준 구성요소(저수준 구성요소에 의해 정의되는 행동이 들어있는 구성요소)가 저수준 구성요소에 의존하면 안되며, 항상 추상화에 의존하게 만들어야 한다.
-구상 클래스처럼 구체적인 것이 아닌 추상 클래스나 인터페이스와 같이 추상적인 것에 의존하는 코드를 만들어야 한다.
-뒤집기 인 이유 : 객체지향 디자인을 할 때 일반적으로 생각하는 방법과는 반대로 뒤집어서 생각해야 하기 때문이다.
- 의존성 뒤집기 원칙을 지키는 법 (다 지킬 순 없지만 생각하면서 코드짜기)
- 변수에 구상 클래스의 레퍼런스를 저장하지 말자. : 팩토리를 써서 구상 클래스의 레퍼런스를 변수에 저장하는 일을 미리 방지하자.
- 구상 클래스에서 유도된 클래스를 만들지 말자 : 인터페이스나 추상 클래스처럼 추상화된 것으로부터 클래스를 만들어야 한다.
- 베이스 클래스에 이미 구현되어 있는 메소드를 오버라이드 하지 말자 : 베이스 클래스에서 메소드를 정의할 때는 모든 서브클래스에서 공유할 수 있는 것만 정의해야 한다.
[ 생각 뒤집기 ]
피자 가게 → 피자 만들기 → 피자 종류..
뒤집으면 Pizza class → 어떤 것을 추상화할 수 있는지 생각한다. → PizzaStore의 디자인
발췌
💡 실행 중에 서브클래스에서 어떤 클래스의 인스턴스를 만들지를 결정하는게 아니라, 생산자 클래스가 실제 생산될 제품을 전혀 모르는 상태로 만들어진다.
💡 PizzaStore는 고수준 구성요소, Pizza클래스는 저수준 구성요소
메모
-
숙제
167p 디자인 퍼즐 맞추기
CaliforniaPizzaStore
CaliforniaStyleLovePizza
CaliforniaStyleFunnyPizza
CaliforniaStyleDreamPizza
CaliforniaStyleCircPizza
171p
구상 피자 클래스 개수 :
뉴욕피자스토어/ 치즈, 베지, clam, 페퍼로니
시카노피자스토어/치즈, 베지, clam, 페퍼로니
피자
→ 총 6개
캘리포니아 스타일 피자를 포함했을 때의 객체 개수 : 5개
'책책책 책을 읽읍시다‼ ver.개발 > [ 헤드퍼스트 디자인패턴 ]' 카테고리의 다른 글
| [헤드퍼스트 디자인패턴] 14일차. 190-204pg (0) | 2023.05.10 |
|---|---|
| [헤드퍼스트 디자인패턴] 13일차. 180-189pg (0) | 2023.05.08 |
| [헤드퍼스트 디자인패턴] 11일차. 153-165pg (0) | 2023.05.08 |
| [헤드퍼스트 디자인패턴] 10일차. 140-152pg (0) | 2023.05.04 |
| [헤드퍼스트 디자인패턴] 9일차. 126-139pg (0) | 2023.05.04 |