본문 바로가기
반응형

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

방문자 패턴(Visitor Pattern) 방문자 패턴(Visitor Pattern)은 행위(Behavioral) 패턴 중 하나로써 알고리즘을 객체 구조에서 분리시키는 패턴이다. ​보통 클래스에서 객체를 다루는 기능을 클래스 내부에 메서드로 구현하지만 방문자 패턴은 각 클래스들의 데이터 구조에서 처리 기능을 분리하여 별도의 클래스로 구현하는 디자인 패턴이다. ​분리된 처리 기능은 방문자(Visitor)를 통해 각 클래스들을 방문하면서 수행한다. ​객체와 알고리즘을 분리하면 구조를 수정하지 않고도 실질적으로 새로운 동작을 기존의 객체 구조에 추가할 수 있는 장점이 있다. ​객체지향 5원칙(SOLID) 중 하나인 개방-폐쇄 원칙(Open-Closed Principle, OCP)을 적용하는 방법이다. ​ 방문자 패턴의 구조는 다음과 같다. Visito.. 2021. 7. 28.
데코레이터 패턴(Decorator Pattern) 데코레이터 패턴(Decorator Pattenr)은 구조(Structural) 패턴 중 하나로써 주어진 상황 및 용도에 따라 어떤 객체에 책임(기능)을 동적으로 추가하는 패턴이다. ​간단하게 데코레이터의 의미인 장식을 생각하면 쉽다. 기본 기능을 가지는 그릇을 하나 만들어주고 추가할 수 있는 기능(장식품)들을 추가하기 용이하도록 설계하는 디자인 패턴이다. ​즉, 기본 기능을 클래스로 구현해 준 후 상황에 따라 추가될 수 있는 기능들은 기능별로 별도의 클래스로 설계하여 필요할 때마다 기본 기능 클래스 + 추가 기능 클래스의 조합으로 객체를 생성하도록 하는 것이다. ​ 데코레이터 패턴의 구조는 다음과 같다. Component : 기본 기능과 추가될 수 있는 기능을 가지는 인터페이스, 두 기능을 가지도록 설계.. 2021. 7. 28.
컴포지트 패턴(Composite Pattern) 컴포지트 패턴(Composite Pattern)은 구조(Structural) 패턴 중 하나로써 여러 객체를 가진 복합 객체와 단일 객체를 구분 없이 다루고자 할 때 사용하는 패턴이다. ​객체들의 관계를 트리 구조로 구성하여 부분-전체 계층을 표현하는 패턴으로, 사용자가 단일 객체와 복합 객체 모두 동일하게 다루도록 해준다. ​주로 객체들을 계층 구조로 표현할 수 있으며, 클라이언트가 단일 객체와 복합 객체를 구분하지 않고 사용하고자 할 경우 사용하는 디자인 패턴이다. ​ 간단하게 PC의 파일과 디렉터리의 계층 구조를 생각하면 이해하기 쉽다. 파일은 자신의 밑에 다른 파일이나 디렉터리를 담을 수 없기 때문에 단일 객체이며, 디렉터리는 자신의 밑에 파일이나 디렉터리를 담을 수 있기 때문에 복합 객체로 표현한.. 2021. 7. 28.
브릿지 패턴(Bridge Pattern) 브릿지 패턴(Bridge Pattern)은 구조(Structural) 패턴 중 하나로써 구현부에서 추상층을 분리하여 각자 독립적으로 변형할 수 있게 하는 패턴이다. ​간단하게 얘기하면 다양한 기능과 구현을 가질 수 있는 주제? 일 경우 기능 부분과 구현 부분을 분리하여 각각 추상화를 통해 확장 및 유지 보수가 용이하도록 설계하는 디자인 패턴이다. ​ 브릿지 패턴의 구조는 다음과 같다. Abstraction : 기능 부분의 추상 인터페이스, 구현 부분의 클래스를 통해 구현 부분의 메서드를 호출 RefinedAbstraction : Abstraction 인터페이스의 기능을 확장한 클래스 Implementor : 구현 부분의 추상 인터페이스, Abstracion의 기능을 구현하기 위한 기능을 정의 Concre.. 2021. 7. 27.
추상 팩토리 패턴(Abstract Factory Pattern) 추상 팩토리 패턴은 생성(Creational) 패턴 중 하나로써 구체적인 클래스에 의존하지 않고 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스를 제공하는 패턴이다. ​간단하게 얘기하면 관련성이 높은 여러 종류의 객체를 따로 생성하지 않고 팩토리라는 공장을 통해 생성하는 디자인 패턴이다. ​ 추상 팩토리 패턴의 구조는 다음과 같다. 이전에 공부한 팩토리 메서드 패턴과 이름이 굉장히 비슷하다. 두 패턴 모두 객체의 생성을 캡슐화를 통해 Factory 클래스에게 위임하여 객체를 생성하는 공통점이 있지만 팩토리 메서드 패턴은 한 팩토리당 한 종류의 객체만 생성할 수 있고 추상 팩토리 패턴은 한 팩토리에서 서로 연관된 여러 종류의 객체를 생성할 수 있다는 차이가 존재한다. ​ 무슨 말인지 이해가 안 .. 2021. 7. 27.
빌더 패턴(Builder Pattern) 빌더 패턴은 생성(Creational) 패턴 중 하나로써 복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴이다. ​간단하게 얘기하면 복잡한 객체를 생성하는 과정을 추상화하여 서브 클래스에게 넘겨 서브 클래스에서 객체를 생성하도록 하는 디자인 패턴이다. ​ 빌더 패턴의 구조는 다음과 같다. Director : 내부적으로 Builder 인터페이스 객체를 통해 Product를 생성하는 클래스 Builder : Product에 필요한 기능을 가지는 인터페이스 ConcreteBuilder : Builder 인터페이스를 상속받아 구체적으로 기능을 구현하고 Product를 생성하는 클래스 Product : 생성해야 할 복합 객체 ​간단한 예시를 통해 .. 2021. 7. 27.
프로토타입 패턴(Prototype Pattern) 프로토타입 패턴은 생성(Creational) 패턴 중 하나로써 생성할 객체들의 타입이 프로토타입인 인스턴스로부터 결정되도록 하며, 인스턴스는 새 객체를 만들기 위해 자신을 복제(clone) 하는 패턴이다. ​프로토타입은 완제품을 출시하기 전에 테스트할 수 있는 시제품, 원형을 의미한다. ​간단하게 얘기하면 객체를 수정하거나 테스트할 때마다 매번 새로운 객체를 생성하지 않고 기존에 만들어놨던 객체(시제품)를 복제하여 필요한 부분만 수정하는 디자인 패턴이다. ​ 프로토타입 패턴의 구조는 다음과 같다. Prototype : 시제품(공통적인 기능)을 정의하는 인터페이스 ConcretePrototype : 시제품을 실제로 구현하는 클래스 간단한 예시를 통해 프로토타입 패턴을 이해해 보자. ​2차원 좌표에 도형을 .. 2021. 7. 27.
팩토리 메서드 패턴(Factory Method Pattern) 팩토리 메서드 패턴은 생성(Creational) 패턴 중 하나로써 상위 클래스에게 알려지지 않은 구체 클래스를 생성하는 패턴이며, 하위 클래스가 어떤 객체를 생성할지를 결정하도록 하는 패턴이다. ​간단하게 얘기하면 상위 클래스에서 객체를 직접 생성하지 않고, 팩토리(공장)라는 하위 클래스에게 위임하여 객체를 생성하도록 하는 디자인 패턴이다. ​팩토리는 결국 비슷한 기능을 수행하는 객체를 만들어내기 때문에 템플릿 메서드 패턴을 활용할 수 있다. ​ 팩토리 메서드 패턴의 구조는 다음과 같다. Product : 팩토리 메서드로 생성할 객체의 공통 인터페이스 ConcreteProduct : 생성할 객체를 구현하는 클래스 Creator : 팩토리 메서드를 정의하는 추상 클래스 ConcreteCreator : 팩토.. 2021. 7. 26.
템플릿 메서드 패턴(Template Method Pattern) 템플릿 메서드 패턴은 행위(Behavioral) 패턴 중 하나로써 알고리즘의 구조를 메서드에 정의하고 하위 클래스에서 알고리즘 구조의 변경 없이 알고리즘을 재정의하는 패턴이다. ​간단하게 얘기하면 비슷한 알고리즘을 수행하는 친구들을 각각 별도의 클래스로 구현하지 말고 공통적인 기능을 템플릿이라는 틀(추상 클래스)로 만들어 사용하고 추가적인 기능은 각자 재정의하여 구현하는 방법이다. ​ 템플릿 메서드 패턴의 구조는 다음과 같다. AbstractClass : 템플릿 메서드를 정의하는 추상 클래스, templateMethod()는 operation1(), operation2()를 순서대로 실행하는 메서드 ConcreteClass : 상속받은 AbstractClass의 operation1(), operation.. 2021. 7. 26.
반응형