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
- 독서일지
- Java
- 상속
- 주니어개발자
- 코딩
- 디자인패턴
- docker
- 클린코드
- IntelliJ
- 직장인
- 객체지향
- Linux
- 책읽기
- 성수직장인
- 성수핫플
- 독서
- 직장인점심
- 성수
- 오브젝트
- 성수맛집
- JAVA개발자
- 개발자
- 책너두
- 성수볼거리
- 객체지향프로그래밍
- JavaScript
- 헤드퍼스트디자인패턴
- 깨끗한코드
- DesignPattern
- 헤드퍼스트
Archives
- Today
- Total
런타임노트
[헤드퍼스트 디자인패턴] 11일차. 153-165pg 본문
728x90
11일차
헤드퍼스트 디자인패턴 [금요일]
153-165pg
요약
CHAPTER 04. 객체지향 빵 굽기 (feat. 팩토리 패턴)
[ 다양한 팩토리 만들기 - 피자 프랜차이즈 사업 시작 ]
피자가게 지점내기.
PizzaStrore 코드를 모든 지점에서 활용한다.
⁉ 문제발생 : 굽는방식이나 자르는 것이 사라지거나 하는 문제 발생
해결 : PizzaStore와 피자 제작코드 전체를 하나로 묶어주는 프레임워크 만들기. + 유연성 잃으면 안됨.
[ 피자가게 프레임워크 만들기 ]
각 지점마다 달라지는 것은 ‘피자 스타일’ 뿐.
달라지는 점을 createPizza()에 넣는다.
Pizza는 추상 클래스라서 orderPizza()는 실제로 어떤 구상 클래스에서 작업이 처리되고 있는지 전혀 알 수 없다.
→ PizzaStore와 Pizza는 서로 완전히 분리되어 있다.
orderPizza() -호출→ createPizza() -받음→ Pizza의 서브클래스
서브클래스에서 피자 종류를 실시간으로 결정하는 것이 아니라, 피자 종류는 어떤 서브클래스를 선택했느냐에 따라 결정된다.
[ 팩토리 메소드 선언하기 ]
- 팩토리 메소드를 추상 메소드로 선언해서 서브클래스가 객체 생성을 책임지도록 합니다.
- 팩토리 메소드는 특정 객체를 리턴하며, 그 객체는 보통 슈퍼클래스가 정의한 메소드 내에서 쓰입니다.
- 팩토리 메소드는 클라이언트(슈퍼클래스에 있는 orderPizza())같은 코드에서 실제로 생성되는 구상 객체가 무엇인지 알 수 없게 만드는 역할도 합니다.
모든 팩토리 패턴은 객체 생성을 캡슐화한다.
팩토리 메소드 패턴은 서브클래스에서 어떤 클래스를 만들지 결정함으로써 객체 생성을 캡슐화한다.
- 생산자(Creator) 클래스
- PizzaStore, NYPizzaStore, ChicagoPizzaStore
- 제품(Product) 클래스
- Pizza의 종류 : 뉴욕스타일치즈피자, 시카고 스타일치즈 피자 등등
발췌
💡 서브클래스에서 피자 종류를 실시간으로 결정하는 것이 아니라, 피자 종류는 어떤 서브클래스를 선택했느냐에 따라 결정된다.
💡 팩토리 메소드는 객체 생성을 서브클래스에 캡슐화할 수 있습니다. 그러면 슈퍼클래스에 있는 클라이언트 코드와 서브 클래스에 있는 객체 생성 코드를 분리할 수 있습니다.
숙제
158p ChicagoPizzaStroe, CaliforniaPizzaStrore 지점 만들기
public class ChicagoPizzaStore extends PizzaStore {
Pizza createPizza(String item) {
if(item.equals("chees")) {
return new ChicagoCheesePizza();
} else if(item.equals("veggie")) {
return new ChicagoVeggiePizza();
} else if(item.equals("clam")) {
return new ChicagoClamPizza();
} else if(item.equals("pepperoni")) {
return new ChicagoPepperoniPizza();
} else return null;
}
}
public class CaliforniaPizzaStore extends PizzaStore {
Pizza createPizza(String item) {
if(item.equals("chees")) {
return new CaliforniaCheesePizza();
} else if(item.equals("veggie")) {
return new CaliforniaVeggiePizza();
} else if(item.equals("clam")) {
return new CaliforniaClamPizza();
} else if(item.equals("pepperoni")) {
return new CaliforniaPepperoniPizza();
} else return null;
}
}
728x90
반응형
'책책책 책을 읽읍시다‼ ver.개발 > [ 헤드퍼스트 디자인패턴 ]' 카테고리의 다른 글
| [헤드퍼스트 디자인패턴] 13일차. 180-189pg (0) | 2023.05.08 |
|---|---|
| [헤드퍼스트 디자인패턴] 12일차. 166-179pg (0) | 2023.05.08 |
| [헤드퍼스트 디자인패턴] 10일차. 140-152pg (0) | 2023.05.04 |
| [헤드퍼스트 디자인패턴] 9일차. 126-139pg (0) | 2023.05.04 |
| [헤드퍼스트 디자인패턴] 8일차. 114-125pg (0) | 2023.05.02 |