본문 바로가기
반응형

IT 개인 공부/디자인패턴21

커맨드 패턴(Command Pattern) 커맨드 패턴(Command Pattern)은 행위(Behavioral) 패턴 중 하나로써 요청을 객체의 형태로 캡슐화하여 재이용하거나 취소할 수 있도록 요청에 필요한 정보를 저장하거나 로그에 남기는 패턴이다. 요청에 사용되는 각종 명령어들을 추상 클래스와 구체 클래스로 분리하여 단순화한다. 요청을 객체화시키기 때문에 상태가 남게 되며 이는 나중에 작업을 취소, 로그 등에 활용할 수 있다. 커맨드 패턴의 구조는 다음과 같다. Invoker : Client가 요청을 전달하는 매개체, 내부에서 적절한 Command에게 해당 요청을 처리하도록 위임 Receiver : 요청을 처리하기 위해 수행해야 하는 일을 가지는 객체 Command : 요청을 실행, 취소하는 기능을 가지는 인터페이스, Receiver에게 요청.. 2021. 8. 13.
프록시 패턴(Proxy Pattern) 프록시 패턴(Proxy Pattern)은 구조(Structural) 패턴 중 하나로써 접근이 어려운 객체와 여기에 연결하려는 객체 사이에서 인터페이스 역할을 수행하는 패턴이다. ​프록시는 대리인을 의미한다. 어떤 업무가 발생하였을 경우 그 업무가 사장이 직접 처리해도 되지 않을 정도의 업무라면 굳이 사장에게 보고하지 않고 대리인을 통해 처리할 것이다. 프록시 패턴 역시 이러한 원리이다. ​중요한 것은 프록시는 대리인의 역할로 요청을 처리해 줘야 한다. 즉, 사장과 고객을 연결해 주는 인터페이스 역할을 수행할 뿐 자신이 고객의 요청에 대해 관여해서는 안 된다. ​주로 네트워크 연결, 메모리의 대용량 객체로의 접근 등에 이용한다. 또한, 스프링을 공부하다보면 프록시 패턴을 굉장히 히 활용하는 것을 알 수 있.. 2021. 7. 31.
플라이웨이트 패턴(Flyweight Pattern) 플라이웨이트 패턴(Flyweight Pattern)은 구조(Structural) 패턴 중 하나로써 인스턴스가 필요할 때마다 매번 생성하는 것이 아니고 가능한 한 공유해서 사용함으로써 메모리를 절약하는 패턴이다. ​간단히 얘기하면 사용하려고 하는 인스턴스가 이전에 생성하여 존재한다면 인스턴스를 생성하지 말고 가져다 써서 메모리를 절약하겠다는 의미이다. ​플라이웨이트 패턴을 사용하면 다수의 유사 객체를 생성하거나 조작할 때 유용하게 사용할 수 있다. ​ String 객체를 생성하는 리터럴 방식의 String Constant Pool이 대표적인 플라이웨이트 패턴을 적용한 예시이다. 플라이웨이트 패턴의 구조는 다음과 같다. FlyweigtFactory : Flyweight 객체를 생성 및 공유해 주는 역할을 수.. 2021. 7. 31.
메멘토 패턴(Memento Pattern) 메멘토 패턴(Memento Pattern)은 행위(Behavioral) 패턴 중 하나로써 특정 시점에서의 객체 내부 상태를 객체화함으로써 이후 요청에 따라 객체를 해당 시점의 상태로 돌릴 수 있는 기능을 제공하는 패턴이다. ​Ctrl + Z와 같은 되돌리기 기능을 생각하면 이해하기 쉽다. 어떤 동작을 수행하다가 이전 상태로 돌아가야 할 경우 Ctrl + Z를 눌려서 이전 상태로 복구하는 작업을 해주도록 구현하는 것이 메멘토 패턴이다. ​ 메멘토 패턴의 구조는 다음과 같다. Originator : 현재 상태를 표현하는 State를 가지고 있으며, Memento 객체를 통해 현재 상태를 변경 Memento : Originator의 상태를 나타내는 클래스, Memento를 이용하여 Originator의 상태를.. 2021. 7. 29.
상태 패턴(State Pattern) 상태 패턴(State Pattern)은 행위(Behavioral) 패턴 중 하나로써 객체의 상태에 따라 동일한 동작을 다르게 처리해야 할 때 사용하는 패턴이다. ​객체 상태를 클래스로 나타내어 캡슐화하고 어떤 동작을 수행할 때 객체의 상태를 참조하는 방식으로 처리한다. ​전략 패턴과 비슷한 패턴이지만 차이점이 존재한다. ​ 전략 패턴은 특정한 계열의 알고리즘들을 캡슐화하여 필요에 따라 외부에서 교체하는 패턴이었다면 상태 패턴은 내부에서 어떤 동작을 객체의 상태에 따라 수행하도록 구현하여 적합한 동작을 수행하도록 하는 패턴이다. ​즉, 전략 패턴은 외부(클라이언트)에서의 개입이 요구되지만 상태 패턴은 외부에서의 개입이 요구되지 않는다. ​전략 패턴은 상속을 대체하려는 목적, 상태 패턴은 조건문들을 대체하려.. 2021. 7. 29.
중재자 패턴(Mediator) 중재자 패턴(Mediator)은 행위(Behavioral) 패턴 중 하나로써 수많은 객체들 간의 복잡한 상호작용을 캡슐화하여 객체로 정의하는 패턴이다. ​중재자 의미를 생각하면 쉽다. 객체끼리 서로 직접 통신하지 않고 중재자에게 전달하면 이를 전달해 주는 방식으로 통신하기 때문에 객체 간 의존성을 줄일 수 있으므로 결합도를 감소시킬 수 있다. ​ 중재자 패턴의 구조는 다음과 같다. Mediator : Colleague 객체 간의 통신을 중재자 역할을 통해 관리하는 인터페이스이다. Colleague 객체들은 전달 사항이 생기면 Mediator에게 전달한다. ​ConcreteMediator : Mediator를 구현한 클래스 ​Colleague : 서로 통신할 객체의 인터페이스, Mediator에게 전달사항.. 2021. 7. 29.
옵저버 패턴(Observer Pattern) 옵저버 패턴(Observer Pattern)은 행위(Behavioral) 패턴 중 하나로써 한 객체의 상태가 변화하면 객체에 상속되어 있는 다른 객체들에게 변화된 상태를 전달해주는 패턴이다. ​옵저버 패턴은 일대다 관계를 가진다. ​주로 분산된 시스템 간에 이벤트를 생성·발행(Publish)하고, 이를 수신(Subscribe)해야 할 때 이용한다. ​ Observer 영어 그대로 관찰자라고 생각하면 이해하기 쉽다. 한 객체를 Observer를 통해 관찰하다가 어떤 이벤트가 발생하면 이를 Observer를 통해 다른 객체들에게 알려주는 것이다. ​ 옵저버 패턴의 구조는 다음과 같다. Subject : Observable이라고도 부르며 이벤트가 발생하는 객체, Observer의 리스트를 가지고 있음, Obs.. 2021. 7. 29.
퍼사드 패턴(Facade Pattern) 퍼사드 패턴(Facade Pattern)은 구조(Structural) 패턴 중 하나로써 복잡한 서브 클래스들을 피해 더 상위에 인터페이스를 구성함으로써 서브 클래스들의 기능을 간편하게 사용할 수 있도록 하는 패턴이다. ​건물의 외관을 뜻하는 퍼사드(Facade)처럼 퍼사드 패턴은 건물의 내부(서브 클래스)들을 건물의 외관(상위의 인터페이스)으로 감싸서 사용할 수 있으며 건물의 내부는 들여다볼 수 없다는 것을 의미한다. ​즉, 복잡한 내부 동작은 알 필요 없고 기능 자체만 사용하면 되는 경우 사용하면 되는 디자인 패턴이다. ​서브 클래스들 사이의 통합 인터페이스를 제공하는 Wrapper 객체가 필요하다. ​ 퍼사드 패턴의 구조는 다음과 같다. Facade : Package의 기능들을 감싸는 상위 인터페이스.. 2021. 7. 28.
책임 연쇄 패턴(Chain of Resposibility Pattern) 책임 연쇄 패턴(Chain of Resposibility Pattern)은 행위(Behavioral) 패턴 중 하나로써 명령 객체와 일련의 처리 객체를 포함하는 디자인 패턴이다. ​요청을 처리할 수 있는 객체가 둘 이상 존재하여 한 객체가 처리하지 못하면 다음 객체로 넘어가는 형태의 패턴이다. ​즉, 요청을 처리할 수 있는 객체들이 사슬(Chain)로 묶여있어서 어떤 요청이 들어왔을 때 첫 번째 객체가 처리할 수 없다면 그 요청을 처리해 줄 수 있을 때까지 연쇄작용으로 다음 객체에게 처리를 양도하는 것이다. ​ 책임 연쇄 패턴의 구조는 다음과 같다. 연결 리스트, 재귀 함수를 생각하면 쉽다. Handler : 요청을 처리해주는 기능을 가지는 객체 인터페이스, 자신이 요청을 처리 못할 시 다음 객체에게 요.. 2021. 7. 28.
반응형