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

[헤드퍼스트 디자인패턴] 10일차. 140-152pg

D269 2023. 5. 4. 16:58
728x90

10일차

헤드퍼스트 디자인패턴 [목요일]

140-152pg

요약

CHAPTER 04. 객체지향 빵 굽기 (feat. 팩토리 패턴)

: 느슨한 결합으로 객체지향 디자인 만들기

: 팩토리 패턴으로 불필요한 의존성을 없애서 결합문제를 해결하자.

 

❓어떻게 하면 애플리케이션에서 구상 클래스의 인스턴스 생성 부분을 전부 찾아내서 애플리케이션의 나머지 부분으로부터 분리(캡슐화)할 수 있을까요?

 

[ 피자 코드 예시 ]

최첨단 피자가게 에서는 신메뉴가 들어오고 삭제되는 메뉴가 생길 때마다 일일히 코드를 코쳐주어야 하는 단점이 있다.

orderPizza() 메소드에서 가장 문제가 되는 부분 : 인스턴스를 만드는 구상 클래스 선택하는 부분

 

→ 객체 생성 부분 캡슐화 하기

객체 생성을 처리하는 클래스는 팩토리(Factory) : SimplePizzaFactory

 

[ 객체 생성 팩토리 만들기 ]

SimplePizzaFactory 클래스에서 createPizza() 메소드 정의하기.

 

[ 정적 팩토리(static factory) ]

간단한 팩토리를 정적 메소드로 정의하는 기법.

정적 메소드를 쓰면 객체 생성 메소드를 실행하려고 객체의 인스턴스를 만들지 않아도 된다.

BUT, 서브클래스를 만들어서 객체 생성 메소드의 행동을 변경할 수 없다는 단점이 있다.

 

[ 클라이언트 코드 → 팩토리로 피자 객체 생성하도록 수정하기 ]

PizzaStrore 클래스에 SimplePizzaFactory의 레퍼런스 저장하기.

new 연산자 대신 팩토리 객체에 있는 create 메소드를 사용한다.

 

[ 간단한 팩토리 란? ]

디자인 패턴보다는 프로그래밍에서 자주 쓰이는 “관용구”에 가깝다.

 

[ 다양한 팩토리 만들기 ]

피자가게 지점내기.

발췌

💡 ‘new’연산자가 눈에 띈다면 ‘구상’이라는 용어를 떠올려 주세요.
 💡 간단한 팩토리를 정적 메소드로 정의하는 기법.
정적 메소드를 쓰면 객체 생성 메소드를 실행하려고 객체의 인스턴스를 만들지 않아도 된다.
BUT, 서브클래스를 만들어서 객체 생성 메소드의 행동을 변경할 수 없다는 단점이 있다.

 

 

 

 

 

728x90
반응형