분류 전체보기 414

[헤드퍼스트 디자인 패턴] 12-3. 책임 연쇄 패턴

에릭 프리먼 님의 "헤드퍼스트 디자인 패턴" 책을 정리한 포스팅 입니다1. 책임 연쇄 패턴1개의 요청을 2개 이상의 객체에서 처리해야 할 경우 사용되는 패턴 객체 사슬순차적으로 요청을 처리함자신이 처리할 수 있는 요청만 처리나머지는 다음 객체에 위임 장점요청을 보낸 쪽과 받는 쪽을 분리할 수 있음사슬을 동적으로 수정할 수 있음 2. RemoteControlpublic class RemoteControl { private Handler handlerChain; public void setHandlerChain(Handler handlerChain) { this.handlerChain = handlerChain; } public void pressButton(String r..

Java/Design Pattern 2024.12.19

[헤드퍼스트 디자인 패턴] 12-2. 빌더 패턴

에릭 프리먼 님의 "헤드퍼스트 디자인 패턴" 책을 정리한 포스팅 입니다 1. 빌더 패턴제품의 생산 단계를 캡슐화하여 여러 단계로 나눠서 만들도록 하는 패턴클라이언트는 추상 인터페이스로 제품을 단계적으로 생산 장점유연한 디자인이 필요할 경우여러 조합이 발생할 수 있음생성자가 너무 많아짐명확하게 객체를 생성할 수 있음제품의 내부 구조를 클라이언트로부터 보호할 수 있음 2. VacationVacationBuilderpublic class Vacation { private String date; private String destination; private String accommodation; private List activities; // Private constructor ..

Java/Design Pattern 2024.12.19

[헤드퍼스트 디자인 패턴] 12-1. 브리지 패턴

에릭 프리먼 님의 "헤드퍼스트 디자인 패턴" 책을 정리한 포스팅 입니다1. 브리지 패턴두 계층간의 다리를 만들어 추상 계층과 구현 계층을 분리구현과 더불어 추상화 부분까지 변경해야 할 경우 사용되는 패턴추상화 부분과 구현 부분이 독립적 장점추가로 인한 조합을 모두 만들지 않아도 됨변경으로 인한 기존 코드의 추가 및 수정이 적음 RemoteControlabstract class RemoteControl { protected TV tv; // Bridge to TV public RemoteControl(TV tv) { this.tv = tv; } public abstract void turnOn(); public abstract void turnOff(); pub..

Java/Design Pattern 2024.12.18

[헤드퍼스트 디자인 패턴] 11. 프록시 패턴

에릭 프리먼 님의 "헤드퍼스트 디자인 패턴" 책을 정리한 포스팅 입니다1. 원격 프록시원격 객체의 로컬 대변자어떤 메서드를 호출하면, 다른 원격 객체에게 그 메서드 호출을 전달해 주는 객체핵심 작업이 아닌 저수준 작업을 프록시 객체에서 대신 처리함클라이언트 객체는 원격 객체의 메서드 호출을 하는 것처럼 행동 2. RMI클라이언트와 서비스 보조 객체를 만들어 줌입출력 및 네트워크 관련 코드를 직접 작성하지 않아도 됨 스텁클라이언트 보조 객체 스켈레톤서비스 보조 객체 3. DatingPersonpublic interface Person { String getName(); String getGender(); String getInterests(); int getGeekRating(); ..

Java/Design Pattern 2024.12.18

[헤드퍼스트 디자인 패턴] 10. 상태 패턴

에릭 프리먼 님의 "헤드퍼스트 디자인 패턴" 책을 정리한 포스팅 입니다1. 상태 기계상태를 모음상태를 표현하는 인스턴스 변수 정의 행동을 모음 GumballMachinepublic class GumballMachine { final static int SOLD_OUT = 0; final static int NO_QUARTER = 1; final static int HAS_QUARTER = 2; final static int SOLD = 3; int state = SOLD_OUT, count = 0; public GumballMachine(int count) { this.count = count; if (count > 0) state..

Java/Design Pattern 2024.12.18

[헤드퍼스트 디자인 패턴] 9-2. 컴포지트 패턴

에릭 프리먼 님의 "헤드퍼스트 디자인 패턴" 책을 정리한 포스팅 입니다 1. 컴포지트 패턴객체를 트리구조로 구성해서 부분-전체 계층구조를 구현한 패턴 장점개별 객체와 복합 객체를 똑같은 방법으로 다룰 수 있음투명성이 확보됨어떤 노드가 내부노드인지, 리프노드인지 바로 확인 가능확장성새로운 리프 노드나 복합 객체를 쉽게 추가할 수 있음 단점단일 책임 원칙 위반계층 구조 관리 + 데이터 보관 2. MenuComponentpublic abstract class MenuComponent { public void add(MenuComponent menuComponent) throw new UnsupportedOperationException(); public void remove(MenuComponent..

Java/Design Pattern 2024.12.18

[헤드퍼스트 디자인 패턴] 9-1. 반복자 패턴

에릭 프리먼 님의 "헤드퍼스트 디자인 패턴" 책을 정리한 포스팅 입니다 1. 반복자 패턴컬렉션의 구현 방법을 노출하지 않으면서 집합체 내의 모든 항목에 접근하는 방법 필요할 경우클라이언트 코드에서 처리하는 코드가 제각각임인터페이스 통합이 필요함 2. Iterator반복을 캡슐화하기for (int i = 0; i for (int i = 0; i  Iterator iterator = breakfastMenu.createIterator();while (iterator.hasNext()) { MenuItem menuItem = iterator.next();}Iterator iterator = lunchMenu.createIterator();while (iterator.hasNext()) { Menu..

Java/Design Pattern 2024.12.18

[헤드퍼스트 디자인 패턴] 8. 템플릿 메서드 패턴

에릭 프리먼 님의 "헤드퍼스트 디자인 패턴" 책을 정리한 포스팅 입니다 1. 템플릿 메서드 패턴알고리즘의 각 단계를 정의하며, 서브클래스에서 일부 단계를 구현할 수 있도록 유도하는 패턴 장점알고리즘의 구조가 유지됨알고리즘의 특정 단계를 서브클래스에서 재정의 할 수 있음후크를 사용하여 실행 조건을 서브클래스에서 재정의할 수 있음 2. CaffeineBeveragepublic abstract class CaffeineBeverage { final void prepareRecipe() { boilWater(); brew(); pourInCup(); if (customerWantsCondiments()) addCondiments(); } abs..

Java/Design Pattern 2024.12.18

[헤드퍼스트 디자인 패턴] 7-2. 퍼사드 패턴

에릭 프리먼 님의 "헤드퍼스트 디자인 패턴" 책을 정리한 포스팅 입니다 1. 퍼사드 패턴서브시스템의 기능을 통합 인터페이스로 묶어줌여러개의 인터페이스들을 하나로 통합함인터페이스를 단순하게 바꾸려 함이 목적 2. 홈시어터 퍼사드public class HomeTheaterFacade { Amplifier amp; Tuner tuner; StreamingPlayer player; Projector projector; TheaterLights lights; Screen screen; PopcornPopper popper; public void watchMovie(String movie) { popper.on(); popper.pop(); ..

Java/Design Pattern 2024.12.17

[헤드퍼스트 디자인 패턴] 7-1. 커맨드 패턴

에릭 프리먼 님의 "헤드퍼스트 디자인 패턴" 책을 정리한 포스팅 입니다 1. 어댑터중개어떤 인터페이스를 클라이언트에서 요구하는 인터페이스로 바꿔주는 역할 2. 오리Duckpublic interface Duck { void quack(); void fly();}public class MallardDuck implements Duck { public void quack() { System.out.println("꽥"); } public void fly() { System.out.println("날고 있어요!"); }} Turkeypublic interface Turkey { void gobble(); void fly();}public class WildTurkey im..

Java/Design Pattern 2024.12.17