개발/디자인패턴 24

[Java][디자인 패턴] 24. 인터프리터 패턴 (Interpreter Pattern)

디자인패턴 [Java][디자인 패턴] 24. 인터프리터 패턴 (Interpreter Pattern) 인터프리터 패턴은 간단한 언어적 문법을 표현하는 패턴이다. 인터프리터 패턴이란? 프로그램을 여러 시스템 환경에서 구동하기 위해서는 추상화된 언어의 해석 과정이 필요하다. 이 과정에서 언어적 해석을 담당하는 것이 바로 인터프리터(해석자) 패턴이다. 인터프리터 패턴 구조 추상 구문 트리 인터페이스 (Abstract Expression) 종료 기호(Terminal Expression) 비종료 기호(Non-Terminal Expression) 해석기 정보(Context) 문장을 나타내는 추상 구문 트리(Client) 일반적인 상황에서 해석자패턴을 직접 구현하는 일은 거의 없을거라고 생각되고 적절한 예시 코드가 떠..

[Java][디자인 패턴] 23. 전략 패턴 (Strategy Pattern)

디자인패턴 [Java][디자인 패턴] 23. 전략 패턴 (Strategy Pattern) 전략 패턴은 객체 내부에서 해결해야 하는 목적을 알고리즘 객체로 분리 적용하는 기법이다. 실제 내부 동작을 외부 알고리즘 객체로 분리하여 유연하게 동작을 변경시킬 수 있다. 전략 패턴이란? 전략 패턴은 구조 그대로 사용하면서 캡슐화된 알고리즘으로 동작을 변경하는 행위 (전체 행위 변경) 전략 패턴은 행동 변경 시 조건문을 사용하지 않음. 알고리즘 캡슐화를 통해 조건문 없이도 원하는 행동으로 교체 가능하다. 하지만 알고리즘 객체가 교체된다는 점에서 실행 시 많은 수의 객체를 갖는다는 단점이 있다. 전략패턴은 다양한 알고리즘을 적용하여 처리할 때 매우 유용하여 다양한 경우에 사용된다. 전략 패턴 구조 전략 패턴 코드 1..

[Java][디자인 패턴] 22. 템플릿 메서드 패턴

디자인패턴 [Java][디자인 패턴] 22. 템플릿 메서드 패턴 템플릿 메서드 패턴은 메서드를 이용해 각 단계를 템플릿 구조화하고 행동을 구분한다. 템플릿 메서드 패턴이란? 템플릿 메서드는 공통된 로직을 분리하여 캡슐화한다. (붕어빵 틀 만들기) 공통 단계인 템플릿은 별도의 메서드로 작성한다. 이 때 공통 기능이 하위 클래스에서 오버라이딩 되지 않도록 final을 사용한다. 템플릿 메서드는 공통된 알고리즘을 정의하며, 공통된 로직을 처리하는 행동이다. 템플릿 메서드는 로직 전체의 구조를 변경하지 않고 일부분만 수정할 때 유용하다. 큰 틀의 공통된 로직만 처리하는 메서드와 변화된 작은 동작을 처리하는 메서드를 서로 분리한다. 이런 분리는 추상 클래스로 구현한다. 템플릿 메서드 패턴 예시 코드 구조 템플릿 ..

[Java][디자인 패턴] 21. 메멘토 패턴 (Memento Pattern)

디자인패턴 [Java][디자인 패턴] 21. 메멘토 패턴 (Memento Pattern) 메멘토 패턴은 상태의 객체를 저장하여 이전 상태로 복구하는 패턴이다. 메멘토 패턴이란? 메맨토 패턴은 중간 매개체를 통해 객체의 상태를 다른 객체에 저장했다가 복원하는 방법을 사용한다. 메멘토 패턴은 객체의 상태를 관리한다. 객체의 상태를 저장하고, 저장된 상태의 객체로 복원한다. 메멘토 패턴 구성요소 원조본(originator) 케어테이커(caretaker) 메멘토 패턴 코드 1. 상태 클래스 (TextWindowState) public class TextWindowState { private String text; public TextWindowState(String text) { this.text = text;..

[Java][디자인 패턴] 20. 상태 패턴 (State Pattern)

디자인패턴 [Java][디자인 패턴] 20. 상태 패턴 (State Pattern) 상태 패턴은 조건에 따른 별개의 동작을 제어문으로 사용하지 않고 대신 객체를 캡슐화하여 독립된 동작으로 구분한다. 상태 패턴이란? 각각의 함수 형태로 구별하는 것과 달리 객체로 동작을 분리한다. 객체의 상태에 따라 위임하는 객체를 변경한다. 상태 패턴에서는 함수 형태가 아니라 서브 클래스 형태로 분리한다. 각각의 상태를 객체로 캡슐화하기 때문에 클래스 파일이 늘어난다는 단점이 있으나 상태 패턴을 이용하지 않고 수많은 조건문을 사용하는 것보다는 유연하게 확장할 수 있다. 상태 패턴은 행동 패턴으로 분류되고 객체 내부 상태에 따른 동작 객체를 결정한다. 상태별로 분리된 동작 객체는 독립적이며, 각 상태값에 따라 국지화된 객체..

[Java][디자인 패턴] 19. 중재자 패턴 (Mediator Pattern)

디자인패턴 [Java][디자인 패턴] 19. 중재자 패턴 (Mediator Pattern) 중재자 패턴은 분산된 다수의 객체 역할을 조정할 때 주로 사용한다. 중재자 패턴이란? 중재자 패턴은 객체의 관계를 하나의 객체로 정리하는 패턴이다. 중자재 패턴은 서로 의존적인 M:N 관계를 가진 객체를 느슨한 1:1 관계로 변경한다 복잡한 통신과 제어를 한 곳에 집중하여 처리하는 효과가 있다. 다른 동료 객체에 직접 접근해서 호출하지 않고 중재자를 의존해서 다른 동료 객체를 호출한다. 중재자 패턴은 객체의 강력한 구조적 결합 문제점을 해결한다. 중재자를 이용하지 않으면 다수의 동료 객체가 서로 정보를 직접 주고받는다. 중재자 패턴은 동료 객체끼리 정보를 직접 주고받지 않도록 통신 경로를 제한한다. 중재자는 하나의..

[Java][디자인 패턴] 18. 감시자 패턴 (Observer Pattern)

디자인패턴 [Java][디자인 패턴] 18. 감시자 패턴 (Observer Pattern) 감시자 패턴은 직접 상태 값을 관찰하는게 아니라 수동적으로 상태 값을 전달 받아 처리하는 패턴이다. 감시자 패턴이란? 감시자 패턴은 직접 상태 값을 관찰하는 것이 아니라 수동적으로 상태 값을 전달받아 처리하는 패턴이다. 상태가 변경되었을 때 실제 동작하는 객체(Observer)에 통보하거나 갱신 작업을 통보한다. 감시자 패턴은 상태를 감시하는 행동과 실제 동작을 처리하는 행동을 분리해서 구현한다. 모던 언어에서 많이 응용되는 대표적인 패턴이다. 단방향성의 감시자 패턴은 다른 말로 게시-구독(Publish-Subscribe) 패턴이라고 한다. 혹은 리스너 패턴(Listener Pattern)이라고도 한다. 감시자 패..

[Java][디자인 패턴] 17. 체인 패턴 (Chain Pattern)

디자인패턴 [Java][디자인 패턴] 17. 체인 패턴 (Chain Pattern) 체인 패턴은 객체 메시지의 송신과 수신을 분리해서 처리한다. 체인 패턴이란? 체인 패턴은 처리 로직을 요청하는 송신부와 처리하는 수신부를 분리하는 효과가 있다. 체인 패턴은 여러 객체에 요청된 이벤트를 처리할 수 있도록 균등한 기회를 제공한다. 체인 패턴은 자신이 요청한 이벤트의 상태를 어떤 객체가 처리할지 모른다. 하나의 요청을 세부적으로 분리하거나 복수의 동작을 처리할 때 유용하다 체인 패턴은 사슬로 묶인 객체를 순차적으로 탐색하면서 요청된 객체를 수행한다. 순차적으로 모든 객체를 처리하기 때문에 다소 지연 시간이 발생한다. 이는 체인 패턴의 단점이다. 체인 패턴의 특징은 하나의 객체를 처리할 때 클래스 객체 한 개의..

[Java][디자인 패턴] 16. 방문자 패턴 (Visitor Pattern)

디자인패턴 [Java][디자인 패턴] 16. 방문자 패턴 (Visitor Pattern) 방문자(Visitor) 패턴은 방문자(Visitor)와 방문 공간(Visitable)을 분리하여 공통된 객체의 데이터 구조와 처리를 분리하는 패턴이다. 방문자 패턴이란? OCP(개방 폐쇄 원칙)을 위한 디자인 패턴으로, 기존 클래스를 수정하지 않고 새로운 기능을 코드에 추가하기 위해 사용하는 패턴이다. 각 Element 구조에 Visitor 클래스를 accept 함으로써 새로운 함수를 추가할 수 있다. 그렇게 하면 Element를 통해 ConcreteVisitor가 Element를 ‘visit’ 하고 해당 요소에 대해 필요한 작업을 수행할 수 있다. 결과적으로 코드를 수정하지 않고 OCP를 준수하면서 새로운 Conc..

[Java][디자인 패턴] 15. 명령 패턴 (Command Pattern)

디자인패턴 [Java][디자인 패턴] 15. 명령 패턴 (Command Pattern) 명령 패턴은 행동의 호출을 객체로 캡슐화하여 실행하는 패턴이다. 명령 패턴이란? 작업하는 동작 자체를 다른 객체에 전달하는 경우 사용한다. 행동을 객체로 캡슐화한다. 유사한 동작을 하나의 객체로 묶어 실행하는 행위 패턴이다. 실제 작업을 수행하는 객체와 이를 실행하는 객체로 분리하여 설계한다. 객체의 실행 동작 시점을 분리시켜 지연시키는데, 이는 절차 지향적 개발에서 콜백 함수를 처리하는 것과 같다. (객체지향적인 콜백 처리) 명령 패턴은 요청과 실행이 서로 의존하지 않는 구조를 만들 때 유용하다. 명령 패턴 구조 Command 추상화된 명령 (execute와 같은)을 인터페이스로 선언한다. 모든 명령들이 공통적으로 ..