Tag: 헤드퍼스트
Singleton Pattern 싱글턴 패턴을 액션스크립트로 컨버팅 – Head First Design Pattern
by 세계의끝 on 6.18, 2009, under Design Pattern
헤드퍼스트 디자인 패턴 제 5 장 싱글턴 패턴 입니다. 싱글턴 패턴은 스터디에서는 건너뛰었지만, 이 일련의 디자인 패턴을 다룬 포스트들은 모든 패턴을 한 번씩 다뤄 보는데도 나름의 의의가 있기도 하므로 짚고 넘어가 보겠습니다.
싱글턴 패턴 – 싱글턴 패턴은 해당 클래스의 인스턴스가 하나만 만들어지고, 어디서든지 그 인스턴스에 접근할 수 있도록 하기 위한 패턴입니다.
싱글턴 패턴은 객체가 두개가 되지 않도록 구조화 되어있으므로 애플리케이션에서 히스토리를 관리한다던가, 모달리스 다이알로그 박스를 띄운다던가, 사용자 설정이나 포커스 관리 같이 객체가 하나 이상이 되면 안되는 부분에 사용하게 됩니다.
본문 예제에서는 밀크 초콜렛을 끓여 만드는 초콜렛 보일러를 예로 들고 있습니다. 초콜렛 보일러는 초콜렛 공장의 유일한 보일러 이므로 객체 생성도 한번밖에 할 수 없도록 해야합니다.
보일러는 재료 넣기 –> 끓이기 –> 추출의 3 단계를 거쳐 초콜렛을 관리하게 되는데 이전 단계가 완수되지 않으면 다음 단계로 넘어갈 수 없도록 조건문이 걸려 있습니다.
Abstract Factory Pattern 추상 팩토리 패턴을 액션스크립트로 컨버팅 – Head First Design Pattern
by 세계의끝 on 5.30, 2009, under Design Pattern
헤드퍼스트 디자인 패턴의 제 4 장의 내용은 팩토리 패턴 입니다. 팩토리 패턴에 관련한 포스트는 아래 세 개의 목록이 계속 연결되는 내용이므로 차례대로 읽어나가면 이해에 도움이 될 수 있을 것 입니다.
- Simple Factory 심플 팩토리 : 팩토리 패턴의 워밍업
- Factory Method Pattern 팩토리 메서드 패턴을 액션스크립트로 컨버팅
- Abstract Factory Pattern 추상 팩토리 패턴을 액션스크립트로 컨버팅 (현재 글)
우선 추상 팩토리 패턴의 정의를 보도록 하죠.
“추상 팩토리 패턴 – 추상 팩토리 패턴에서는 인터페이스를 이용하여 서로 연관된, 또는 의존하는 객체를 구상 클래스를 지정하지 않고도 생성할 수 있습니다.”
앞서 다룬 팩토리 메서드 패턴에서도 하위형으로 NYPizzaStore 구상 객체를 만들고 상위형이자 추상층인 PizzaStore 로 업 캐스팅 하는 부분이 있습니다만,[01] 팩토리 메서드 패턴의 핵심은 그 부분에 있는 것이 아니라, 객체 생성을 서브클래스에 캡슐화 시킨다는 훨씬 중요한 내용에 있습니다.
- 이 부분이 팩토리 메서드와 추상 팩토리의 경계를 모호하게 만드는 것 같습니다. [↑]
Factory Method Pattern 팩토리 메서드 패턴을 액션스크립트로 컨버팅 – Head First Design Pattern
by 세계의끝 on 5.27, 2009, under Design Pattern
헤드퍼스트 디자인 패턴의 제 4 장의 내용은 팩토리 패턴 입니다. 이전 포스트에서 심플 팩토리로 워밍업 했었는데요, 형태 자체는 거의 동일하므로 심플 팩토리를 읽고 이 포스트를 읽는다면 보다 확실한 이해를 할 수 있으리라 생각합니다.
우선 팩토리 메서드 패턴의 정의를 보도록 하죠.
“팩토리 메서드 패턴 – 팩토리 메서드 패턴에서는 객체를 생성하기 위한 인터페이스[01] 를 정의하는데, 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정하게 만듭니다. 팩토리 메서드 패턴을 이용하면 클래스의 인스턴스를 만드는 일을 서브클래스에게 맡기는 것이죠.”
피자 프랜차이즈가 분점을 내게 되었습니다. 뉴욕과 시카고는 서울과 대구 양키스와 레드삭스 만큼이나 달라서 피자에 들어가는 재료가 꽤나 다릅니다. 실제로 업무에서도 객체를 생산하는 구조는 동일하지만, 구상 클래스들의 형식이 달라서 그에따른 카테고리를 나눠서 객체를 생성해야 하는때가 빈번하게 생기는데 바로 그런 경우에 팩토리 메서드 패턴을 사용하면 좋을것 같습니다.
- 여기에서의 인터페이스는 interface 키워드를 사용하는 인터페이스를 지칭한다기 보다는 추상메서드도 포함하는 좀더 넓은 의미의 인터페이스를 의미합니다. [↑]
Blog under the Creative Commons Attribution-NoDerivs 3.0 License