[헤드퍼스트 디자인패턴] 10일차. 140-152pg
10일차
헤드퍼스트 디자인패턴 [목요일]
140-152pg
요약
CHAPTER 04. 객체지향 빵 굽기 (feat. 팩토리 패턴)
: 느슨한 결합으로 객체지향 디자인 만들기
: 팩토리 패턴으로 불필요한 의존성을 없애서 결합문제를 해결하자.
❓어떻게 하면 애플리케이션에서 구상 클래스의 인스턴스 생성 부분을 전부 찾아내서 애플리케이션의 나머지 부분으로부터 분리(캡슐화)할 수 있을까요?
[ 피자 코드 예시 ]
최첨단 피자가게 에서는 신메뉴가 들어오고 삭제되는 메뉴가 생길 때마다 일일히 코드를 코쳐주어야 하는 단점이 있다.
orderPizza() 메소드에서 가장 문제가 되는 부분 : 인스턴스를 만드는 구상 클래스 선택하는 부분
→ 객체 생성 부분 캡슐화 하기
객체 생성을 처리하는 클래스는 팩토리(Factory) : SimplePizzaFactory
[ 객체 생성 팩토리 만들기 ]
SimplePizzaFactory 클래스에서 createPizza() 메소드 정의하기.
[ 정적 팩토리(static factory) ]
간단한 팩토리를 정적 메소드로 정의하는 기법.
정적 메소드를 쓰면 객체 생성 메소드를 실행하려고 객체의 인스턴스를 만들지 않아도 된다.
BUT, 서브클래스를 만들어서 객체 생성 메소드의 행동을 변경할 수 없다는 단점이 있다.
[ 클라이언트 코드 → 팩토리로 피자 객체 생성하도록 수정하기 ]
PizzaStrore 클래스에 SimplePizzaFactory의 레퍼런스 저장하기.
new 연산자 대신 팩토리 객체에 있는 create 메소드를 사용한다.
[ 간단한 팩토리 란? ]
디자인 패턴보다는 프로그래밍에서 자주 쓰이는 “관용구”에 가깝다.
[ 다양한 팩토리 만들기 ]
피자가게 지점내기.
발췌
💡 ‘new’연산자가 눈에 띈다면 ‘구상’이라는 용어를 떠올려 주세요.
💡 간단한 팩토리를 정적 메소드로 정의하는 기법.
정적 메소드를 쓰면 객체 생성 메소드를 실행하려고 객체의 인스턴스를 만들지 않아도 된다.
BUT, 서브클래스를 만들어서 객체 생성 메소드의 행동을 변경할 수 없다는 단점이 있다.