행동패턴 8

Design Pattern 디자인 패턴 State Pattern 상태 패턴

State Pattern 상태 패턴 행동 패턴으로, 상태변화에 따라 클래스의 행동을 바꾸는 패턴입니다. 상태 패턴에서는 다양한 상태를 나타내는 객체와 상태 객체가 변경됨에 따라 동작이 달라지는 컨텍스트 객체를 생성합니다. State Pattern 상태 패턴 사용이 적합한 경우 현재 상태에 따라 행동(기능)이 변화되는 객체인 경우, 상태의 가짓수가 많고, 상태가 빈번하게 변경되는 경우 클래스의 상태 필드에 따라서 기능을 변경하는, 수많은 조건문으로 코드가 복잡해진 경우 상태 필드를 변경하는 조건 코드가 많이 중복해서 사용되고 있는 경우 장단점 장점 상태를 관리하는 로직을 클래스 객체에서 분리해 관리할 수 있습니다. (단일책임원칙) 기존 상태 클래스와 컨텍스트 객체의 수정 없이 새로운 상태를 추가할 수 있습..

JAVA/DesignPattern 2021.12.29

Design Pattern 디자인 패턴 Observer Pattern 옵저버 패턴

Observer Pattern 옵저버 패턴 행동 패턴으로, 1대다 (1 : N, one-to-many) 관계에서 사용됩니다. 객체 하나를 수정했을때, 연관된 다른 객체들에게 알림을 자동적으로 보내는 패턴입니다. Observer Pattern 옵저버 패턴이 적합한 경우 한 객체의 변경사항이 다른 객체들에게도 전달되어야 하는 경우, 다른 객체들이 사전에 변경사항을 알아채지 못하거나, 동적으로 변경되는 경우 몇 개의 오브젝트가 다른 오브젝트들에 의해 감시되어야 하는 경우 장단점 장점 publisher(알림을 보내는 객체) 코드를 수정하지 않고 새로운 subscriber(observer) 를 추가할 수 있습니다. (개방/폐쇄원칙) 런타임에 객체의 관계를 설정할 수 있습니다. 단점 Observer들은 무작위 순서..

JAVA/DesignPattern 2021.12.28

Design Pattern 디자인 패턴 Memento Pattern 메멘토 패턴

Memento Pattern 메멘토 패턴 행동 패턴으로, 객체의 과거 버전을 저장하기 위해 사용됩니다. 프로세스가 진행되는 중에 원하는 지점에서 객체를 저장하고, 나중에 저장한 지점으로 복원할 수 있습니다. (Undo) Memento Pattern 메멘토 패턴 사용이 적합한 경우 객체의 상태 변화 이력을 저장하고 싶은 경우 (스냅샷을 남기고 싶은 경우) field나 getter/setter를 이용해서 객체에 직접 접근하여 캡슐화가 손상된 경우 장단점 장점 캡슐화는 손상시키지 않고 객체의 상태 변화 이력을 저장할 수 있습니다. 객체의 상태 변화 이력을 관리함으로써 객체의 코드를 단순하게 할 수 있습니다. 단점 메멘토 패턴이 너무 자주 사용되면, RAM 사용량이 많을 수 있습니다. 과거 이력을 삭제할 수 있..

JAVA/DesignPattern 2021.12.27

Design Pattern 디자인 패턴 Mediator Pattern 중재자 패턴

Mediator Pattern 중재자 패턴 행동 패턴으로, 여러 객체와 클래스들 사이에서 의사소통의 복잡도를 낮추기 위해 사용되는 패턴입니다. 객체 간의 직접적인 소통을 제한하고, 중재자 객체를 통해서 협력하도록 강제합니다. Mediator Pattern 중재자 패턴 사용이 적합한 경우 클래스끼리 밀접하게 묶여 있어, 몇개의 클래스를 수정하기가 어려운 경우 클래스들 간의 관계를 분리된 클래스로 추출하여 변경사항을 관리할 수 있습니다. 다른 컴포넌트에 너무 많이 의존하고 있어서, 다른 프로그램에서 컴포넌트를 재사용하기 어려운 경우 중재자 패턴을 적용하면, 개별 컴포넌트들은 다른 컴포넌트를 인지하지 못합니다. 다른 앱에서 컴포넌트를 재사용하려면, 새로운 중재자 객체를 제공해야 합니다. 다양한 컨텍스트에서 몇..

JAVA/DesignPattern 2021.12.25

Design Pattern 디자인 패턴 Interpreter Pattern 인터프리터 패턴

Interpreter Pattern 인터프리터 패턴 행동패턴으로, 특정한 표현이나 언어로 바꿔주는 표현 인터페이스를 사용하는 패턴입니다. 보통 SQL을 파싱하거나, 기호를 처리하기 위해 사용합니다. 트리구조로 인해 컴포지트 패턴과 유사한 형태를 띱니다. 트리는 평가할 표현식을 포함하고, 보통 파서(Parser)에 의해 생성됩니다. 파서(Parser) 자체는 인터프리터 패턴의 일부가 아닙니다. Interpreter Pattern 인터프리터 패턴 Expression public interface Expression { boolean interprete(String context); } MinusExpression public class MinusExpression implements Expression { ..

JAVA/DesignPattern 2021.12.24

Design Pattern 디자인 패턴 Iterator Pattern 이터레이터 패턴

Iterator Pattern 이터레이터 패턴 행동패턴으로, 콜랙션(리스트,맵 등)의 기본 표현을 노출하지 않고 요소에 순차적으로 접근해야 할 때 사용하는 패턴입니다. Iterator Pattern 이터레이터 패턴이 적합한 경우 콜랙션이 복합한 데이터 구조를 가지고 있지만, 고객에게 그 복잡함을 보여주고 싶지 않은 경우 데이터 구조가 복합하더라고 이터레이터를 이용해서 고객이 순차적으로 값에 접근하게 할 수 있습니다. (ex, HashMap, HashSet) 순회 코드의 중복을 줄이고 싶은 경우 사전에 데이터 구조가 알려지지 않은 경우, 기존 코드가 다양한 데이터 구조를 순환할 수 있도록 하고 싶은 경우 장단점 장점 다양한 데이터 순회 알고리즘을 코드를 분리할 수 있습니다.(단일책임원칙) 기존 코드를 수정..

JAVA/DesignPattern 2021.12.23

Design Pattern 디자인 패턴 Command Pattern 커맨드 패턴

Command Pattern 커맨드 패턴 행동 패턴으로, 요청을 커맨드 객체로 감싸서, 요청 객체에게 전달합니다. 요청 객체는 요청(명령)을 처리할 적잘한 객체를 찾아 명령을 전달합니다. Command Pattern 커맨드 패턴이 적합한 경우 객체의 작업을 파라미터화 하고 싶을 때 객체의 작업을 queue로 관리하고 싶을때 (작업을 스케쥴링하고 싶을 때) 되돌릴 수 있는 작업을 구현하고 싶을 때 (Redo, Undo) 작업의 이력을 STACK 방식으로 기록해두고 사용할 수 있습니다. 작업을 되돌리고 싶을 때, 현재 상태에 지정된 되돌리는 작업 (reverseOperation)을 수행하면 됩니다. Memento Pattern 장단점 장점 작업 요청과 수행을 분리할 수 있습니다. (단일책임원칙) 기존 코드를..

JAVA/DesignPattern 2021.12.22

Design Pattern 디자인 패턴 Chain of Responsibility Pattern 책임체인패턴

Chain of Responsibility Pattern 책임체인패턴 행동패턴으로, 요청을 받아 수행할 객체들을 엮어내는 패턴입니다. 요청의 타입에 따라, 각 객체가 요청을 수행할 것인지, 다음 객체로 넘겨줄 것인지를 판단합니다. 책임체인 패턴이 적합한 경우 요청의 경우의 수에 따라 다른 종류의 작업이 진행되어야 하는 경우, 단 요청의 타입을 정의할 수 있고, 실행 순서를 미리 알 수 없는 경우 정의된 순서에 따라 몇개의 작업이 진행되어야만 하는 경우 런타임 시점에 작업의 순서나 작업 그룹을 정의해야 하는 경우 장단점 장점 요청의 처리 순서를 결정할 수 있습니다. 작업을 요청하는 클래스와 작업을 수행하는 클래스를 분리할 수 있습니다. (단일책임원칙) 기존의 요청 코드(client code)를 수정하지 않..

JAVA/DesignPattern 2021.12.21