분류 전체보기 210

[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와 같은)을 인터페이스로 선언한다. 모든 명령들이 공통적으로 ..

[Java][디자인 패턴] 14. 반복자 패턴 (Iterator Pattern)

디자인패턴 [Java][디자인 패턴] 14. 반복자 패턴 (Iterator Pattern) 반복자 패턴은 내부 구조를 노출하지 않고 집합체를 통해 원소 객체에 순차적으로 접근할 수 있는 방법을 제공한다. 반복자 패턴이란? 반복자 패턴은 순한 알고리즘이 실제 구현된 객체에 의존하지 않고, 독립적인 동작을 유지하기 위해 객체의 내부 메서드에 직접 접근하지 않는다. 대신 반복자의 메서드를 호출하여 처리한다. 반복자 패턴 구조 Iterator 집합체의 요소들을 순서대로 검색하기 위한 인터페이스 ConcreateIterator Iterator 인터페이스 구현 Aggregate 여러 요소들로 이루어져 있는 집합체 ConcreateAggregate Aggreagate 인터페이스를 구현하는 클래스 반복자 패턴 예시 코..

[Java][디자인 패턴] 13. 프록시 패턴 (Proxy Pattern)

디자인패턴 [Java][디자인 패턴] 13. 프록시 패턴 (Proxy Pattern) 객체 접근을 제어하기 위해 중간 단계에 대리자를 위치시키는 패턴이다. 프록시 패턴이란? 프록시는 실제 객체를 호출하면 행위를 중간에 가로채서 다른 동작을 수행하는 객체로 변경한다. 객체를 정교하게 제어해야 하거나 객체 참조가 필요한 경우 프록시 패턴을 사용한다. 프록시 패턴의 적용 사례는 매우 다양하고 다른 패턴과 결합하여 사용되는 경우도 많다 프록시 패턴의 특징은 투명성을 이용해 객체를 분리하여 재위임한다는 것이다. 분리된 객체를 위임함으로써 대리 작업을 중간 단계에 삽입할 수도 있으며 분리된 객체를 동적으로 연결함으로써 객체의 실행 시점을 관리할 수도 있다. 프록시 패턴은 세밀한 객체의 접근이 필요할 때도 매우 유용..