Java 92

[헤드퍼스트 디자인 패턴] 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

[헤드퍼스트 디자인 패턴] 6. 커맨드 패턴

에릭 프리먼 님의 "헤드퍼스트 디자인 패턴" 책을 정리한 포스팅 입니다 1. 커맨드 패턴요청 내용 캡슐화객체를 서로 다른 요청 내역에 따라 매개변수화 할 수 있음 요소Receiver: 실제 작업을 수행하는 객체Command: 작업을 캡슐화Invoker: 작업 실행을 요청하는 객체 장점작업을 요청하는 쪽과 작업을 처리하는 쪽을 분리할 수 있음 2. 리모컨리모컨 (Receiver)public class RemoteControl { Command[] onCommands, offCommands; Command undoCommand; public RemoteControl() { onCommands = new Command[7]; offCommands = new Comma..

Java/Design Pattern 2024.12.17

[헤드퍼스트 디자인 패턴] 5. 싱글턴 패턴

에릭 프리먼 님의 "헤드퍼스트 디자인 패턴" 책을 정리한 포스팅 입니다 1. 싱글턴 패턴애플리케이션에 하나만 있어도 되는 객체두개 이상일 경우자원을 불필요하게 많이 잡아먹음결과에 일관성 X전역 접근 가능필요할 때만 객체를 생성할 수 있음 사용스레드 풀, 캐시, 다이얼로그, 디바이스 드라이버, 설정 등 2. 구현public class Singleton { private static Singleton uniqueInstance; private Singleton() {} public static Singleton getInstance() { if (uniqueInstance == null) uniqueInstance = new Singleton(); re..

Java/Design Pattern 2024.12.16

[헤드퍼스트 디자인 패턴] 4. 팩토리 패턴

에릭 프리먼 님의 "헤드퍼스트 디자인 패턴" 책을 정리한 포스팅 입니다 1. new 키워드특정 구현이 아닌 인터페이스로 프로그래밍해야 함그러나, 객체 생성시 특정 구현체를 생성해야 함구현체 클래스에 의존적인 코드가 발생함변경에만 닫혀있는 코드가 생겨남 2. 팩토리 메서드 패턴객체를 생성할 때, 어떤 클래스의 인스턴스를 만들지를 서브클래스에서 결정하도록 하는 패턴클라이언트 코드와 구현체 생성 코드를 분리시킴 Factorypublic class PizzaStore { SimplePizzaFactory factory; public PizzaStore(SimplePizzaFactory factory) { this.factory = factory; } public Pizza ord..

Java/Design Pattern 2024.12.16

[헤드퍼스트 디자인 패턴] 3. 데코레이터 패턴

에릭 프리먼 님의 "헤드퍼스트 디자인 패턴" 책을 정리한 포스팅 입니다 1. OCP새로운 행동을 추가하여 확장기존 코드를 수정 필요 없음 2. 데코레이터 패턴모든 서브클래스를 위한 필드들을 슈퍼클래스에서 가질 경우, 일부 서브클래스에서는 적합하지 않은 필드를 가져야 함이를 해결하기 위해 장식을 달고, 장식에게 위임 데코레이터 형식감싸는 객체의 형식과 같음 (상속을 사용해서 형식을 맞춤) 이점객체에 추가 요소를 동적으로 더할 수 있음여러 개의 데코레이터로 감쌀 수 있음자신이 장식하고 있는 객체에게 작업을 위임하는 일 말고도 추가 작업을 수행할 수 있음 3. 스타버즈Beveragepublic abstract class Beverage { private String descript; publ..

Java/Design Pattern 2024.12.16