본문 바로가기

스터디/헤드퍼스트 디자인패턴11

[헤드퍼스트 디자인패턴] 10. 프록시 패턴 (Proxy pattern) [헤드퍼스트 디자인패턴] 10. 프록시 패턴 (Proxy pattern) 1. 프록시 패턴이란? 특정 객체로의 접근을 제어하는 대리인을 제공한다. 프록시 패턴을 사용하면 원격 객체나 생성하기 힘든 객체, 보안이 중요한 객체와 같은 다른 객체로의 접근을 제어하는 대리인 객체를 만들 수 있다. 2. 프록시에서 접근을 제어하는 몇가지 방법 원격 프록시를 써서 원격 객체로의 접근을 제어할 수 있다. 가상 프록시(virtual proxy)를 써서 생성하기 힘든 자원으로의 접근을 제어할 수 있다. 보호 프록시(protection proxy)를 써서 접근 권한이 필요한 자원으로의 접근을 제어할 수 있다. 3. 프록시 패턴의 클래스 다이어그램 RealSubject : 진짜 작업을 처리하는 객체 Proxy : RealS.. 2022. 8. 21.
[헤드퍼스트 디자인패턴] 09. 상태 패턴(State Pattern) [헤드퍼스트 디자인패턴] 09. 상태 패턴(State Pattern) 1. 상태 패턴이란? 객체의 내부 상태가 바뀜에 따라서 객체의 행동을 바꿀 수 있다. 마치 객체의 클래스가 바뀌는 것과 같은 결과를 얻을 수 있다. 2. 상태 기계 기초 지식 알아보기 뽑기 기계를 만들때, 상태를 이용해 기계를 구현하는 방법을 간단하게 살펴보자. 2.1 우선 상태들을 모아본다. 총 4개의 상태가 존재한다. (No Quarter : 동전 없음, Has Quarter : 동전 있음, Gumball Sold : 알맹이 판매, Out of Gumballs : 알맹이 매진) 2.2 현재 상태를 저장하는 인스턴스 변수를 만들고 각 상태의 값을 정의한다. final static int SOLD_OUT = 0; final static.. 2022. 8. 7.
[헤드퍼스트 디자인패턴] 08. 반복자 패턴 (Iterator Pattern) 과 컴포지트 패턴 (Composite Pattern) [헤드퍼스트 디자인패턴] 08. 반복자 패턴 (Iterator Pattern) 과 컴포지트 패턴 (Composite Pattern) 1. 반복자 패턴 (Iterator Pattern) 1.1 반복자 패턴이란? 컬렉션의 구현 방법을 노출하지 않으면서 집합체 내의 모든 항목에 접근하는 방법을 제공한다. 1.2 요구사항 팬케이크 하우스에서 파는 아침 메뉴와 객체 마을에서 파는 점심메뉴를 한곳에서 제공한다. 팬케이크 하우스에서는 메뉴를 List로 관리하고 객체 마을에서는 메뉴를 Array로 관리한다. 1.3 자격 요건 구현하기: 1차 시도 pancakeHouseMenu pancakeHouseMenu = new PancakeHouseMenu(); ArrayList breakfastItems = pancakeHou.. 2022. 7. 31.
[헤드퍼스트 디자인패턴] 08. 템플릿 메소드 패턴(Template method) [헤드퍼스트 디자인패턴] 08. 템플릿 메소드 패턴(Template method) 1. 템플릿 메소드란? 알고리즘을 일련의 단계로 정의한다. 템플릿 메소드를 사용하면 알고리즘의 일부 단계를 서브클래스에서 구현할 수 있으며, 알고리즘의 구조는 그대로 유지하면서 알고리즘의 특정 단계를 서브클래스에서 재정의할 수도 있다. public abstract class CaffeineBeverage { // prepareRecipe()은 템플릿 메소드 // override를 방지하기 위해 final로 선언 final void preparedRecipe() { boilWater(); brew(); pourInCup(); addCondiments(); } abstract void brew(); abstract void a.. 2022. 7. 24.
[헤드퍼스트 디자인패턴] 07. 어댑터 패턴(Adapter Pattern)과 퍼사드 패턴(Facade Pattern) [헤드퍼스트 디자인패턴] 07. 어댑터 패턴(Adapter Pattern)과 퍼사드 패턴(Facade Pattern) 1. 어댑터 패턴 1.1 어댑터 패턴이란? 특정 클래스 인터페이스를 클라이언트에서 요구하는 다른 인터페이스로 변환한다. 인터페이스가 호환되지 않아 같이 쓸 수 없었던 클래스를 사용할 수 있게 도와준다. 어떤 소프트웨어 시스템에서 새로운 업체에서 제공한 인터페이스가 기존에 사용하던 인터페이스와 다를 때, 어댑터를 사용해 문제를 해결할 수 있다. 1.2 어댑터 사용 방법 알아보기 오리 인터페이스와 구현 클래스를 작성한다. public interface Duck { public void quack(); public void fly(); } public class MallardDuck imple.. 2022. 7. 17.
[헤드퍼스트 디자인패턴] 06. 커맨드 패턴(Command Pattern) [헤드퍼스트 디자인패턴] 06. 커맨드 패턴(Command Pattern) 1. 커맨드 패턴이란? - 커맨드 패턴을 사용하면 요청 내역을 객체로 캡슐화해서 객체를 서로 다른 요청 내역에 따라 매개변수화할 수 있다. 이러면 요청을 큐에 저장하거나 로그로 기록하거나 작업 취소 기능을 사용할 수 있다. 커맨드 패턴은 크게 Invoker(호출자), Receiver(수신자), Command(명령) 객체로 구분된다. 인보커는 기능의 실행을 요청하고 리시버는 명령을 수행하는 객체다. 실행될 기능을 캡슐화함으로써 기능의 실행을 요구하는 호출자(Invoker) 클래스와 실제 기능을 실행하는 수신자(Receiver) 클래스 사이의 의존성을 제거한다. 따라서 실행될 기능의 변경에도 호출자 클래스를 수정 없이 그대로 사용 할.. 2022. 7. 10.
728x90
반응형