본문 바로가기

Design Pattern15

[Design Pattern] Visitor Pattern [Design Pattern] Visitor Pattern Visitor Pattern에 대하여 알아보고, java와 kotlin 예제를 알아보도록 하겠습니다. Visitor Pattern이란?? Visitor Pattern은 데이터 구조와 연산을 분리하여 데이터 구조의 원소들을 변경하지 않고 새로운 연산을 추가할 수 있는 패턴입니다. 새로운 연산을 추가하려면 새로운 방문자를 추가하기만 하면 됩니다. 구조 Visitor Pattern은 기본적으로 위와 같은 구조로 작성됩니다. Element interface를 구현하는 Concrete가 여러 개 생성되고, Visitor Interface를 구현하는 Concrete가 accept메서드의 파라미터로 전달됩니다. Visigtor Pattern은 Composit.. 2019. 10. 21.
[Design Pattern] State Pattern [Design Pattern] State Pattern state pattern에 대하여 알아보고, java와 kotlin 예제를 봐보도록 하겠습니다. State Pattern이란?? State Pattern은 일련의 규칙에 따라 객체의 상태(State)를 변화시켜, 객체가 할 수 있는 행위를 바꾸는 패턴입니다. 상태에 따라 행동이 변화하는 객체엔 모두 적용할 수 있습니다. 특징 State Pattern은 객체의 특정 상태를 클래스로 선언하고, 클래스에서는 해당 상태에서 할 수 있는 행위들을 메서드로 정의합니다. 그리고 이러한 각 상태 클래스들을 인터페이스로 캡슐화하여, 클라이언트에서 인터페이스를 호출하는 방식을 말합니다. State Pattern with Java public interface Powe.. 2019. 10. 21.
[Design Pattern] Command Pattern [Design Pattern] Command Pattern Command Pattern에 대하여 알아보고 , 자바 코틀린 예제를 보고 확인해보도록 하겠습니다. Command Pattern이란?? 실행될 기능을 캡슐화함으로써 주어진 여러 기능을 실행할 수 있는 재사용성이 높은 클래스를 설계하는 패턴 즉, 이벤트가 발생했을 때 실행될 기능이 다양하면서도 변경이 필요한 경우에 이벤트를 발생시키는 클래스를 변경하지 않고 재사용하고자 할 때 유용합니다. 실행될 기능을 캡슐화함으로써 기능의 실행을 요구하는 호출자(Invoker) 클래스와 실제 기능을 실행하는 수신자(Receiver) 클래스 사이의 의존성을 제거합니다. 따라서 실행될 기능의 변경에도 호출자 클래스를 수정 없이 그대로 사용할 수 있도록 줍니다. 클래스.. 2019. 10. 21.
[Design Pattern] Interpreter Pattern [Design Pattern] Interpreter Pattern Interpreter Pattern에 대하여 알아보고 , 자바 코틀린 예제를 봐보도록 하겠습니다. Interpreter Pattern이란???? 문법 규칙을 클래스화 한 구조로써, 일련의 규칙으로 정의된 언어를 해석하는 패턴입니다. 문법 규칙이 많아지면 복잡해지고 무거워지기 때문에 그럴 땐 차라리 파서/컴파일러 생성기를 쓰는 게 좋습니다. 언어 분석기라고 생각하면 되며, 스크립트나 컴파일러 문법 등이 있을 수 있습니다. 예로 SQL 구문이나 shell 커멘드 해석기, 통신 프로토콜 등이 있습니다. 특징 표현(Expression) interface(혹은 abstract class)를 생성하고 Expression인터페이스를 구현하는 구상 클래.. 2019. 10. 21.
[Design Pattern] Iterator Pattern [Design Pattern] Iterator Pattern Iterator Pattern(반복자 패턴)에 대하여 알아보고 예제도 java와 kotlin예제를 봐보도록 하겠습니다. Iterator Pattern이란? Iterator Pattern은 접근 기능과 자료구조를 분리시켜 객체화합니다. 서로 다른 구조를 가지고 있는 저장 객체에 대해서 접근하기 위해서 interface를 통일시키고 싶을 때 주로 사용합니다. ex) for(int i=0;i 2019. 10. 18.
[Design Pattern] Mediator Pattern [Design Pattern] Mediator Pattern mediator(중재자) 패턴에 대하여 알아보고 예시를 java로 작성한 예와 kotlin으로 작성한 예를 보도록 하겠습니다. Mediator Pattern 이란? mediator pattern은 클래스 간의 상호작용을 하나의 클래스에 위임하여 처리하는 패턴입니다. M:N의 관계에서 M:1의 관계로 복잡도를 떨어뜨려 유지보수 및 확장성에 유리합니다.(의존성이 적어집니다.) 다른 객체의 존재를 모르는 상태에서도 메시지를 주고받을 수 있습니다. 특징 ConcreteColleague클래스는 Colleague(동료) interface를 구현하고 있는 N개의 객체입니다. ConcreteCollegue 클래스 간 데이터 전달을 위하여 Mediator를 이.. 2019. 10. 18.
[Design Pattern] Memento Pattern [Design Pattern] Memento Pattern 이번에는 메멘토 패턴에 대하여 알아보고 예제도 봐보도록 하겠습니다. Memento Pattern이란?? 메멘토 패턴은 객체의 상태 정보를 저장하고 사용자의 필요에 의하여 원하는 시점의 데이터를 복원할 수 있는 패턴입니다. Memento Pattern 특징 Memento Pattern은 3개의 액터 클래스를 사용합니다. 메멘토에는 복원할 개체의 상태가 포함됩니다. Originator : 현재 State를 가지고, Memento 객체와 Memento 객체 상태를 얻게 합니다. Memento : State를 가지고 있는 인스턴스입니다. CareTaker : Memento를 순서대로 저장합니다. Memento Pattern with Java public.. 2019. 10. 17.
[Design Pattern] Strategy Pattern [Design Pattern] Strategy Pattern Strategy Pattern이란? 객체들이 할 수 있는 행위 각각에 대해 전략 클래스를 생성하고 유사한 행위들을 캡슐화하는 인터페이스를 정의합니다. 객체의 행위를 동적으로 바꾸고 싶은 경우 직접 행위를 수정하지 않고 전략을 바꿔주기만 함으로써 행위를 유연하게 확장하는 방법을 말합니다. 즉 , 객체가 할 수 있는 행위들을 각각의 전략으로 정의, 수정이 필요한 경우 전략을 바꾸는 것만으로도 수정이 가능하도록 만드는 패턴입니다. 전략 패턴을 사용해야하는 이유 전략패턴을 적용하지 않은 예를 보도록 하겠습니다. 위와 같은 관계의 클래스 구조가 있습니다. Strategy Pattern with Java public interface Movable { p.. 2019. 10. 11.
[Design Pattern] Composition Pattern [Design Pattern] Composition Pattern Composition Pattern이란? 컴포지트 패턴(Composite pattern)이란 객체들의 관계를 트리 구조로 구성하여 부분-전체 계층을 표현하는 패턴으로, 사용자가 단일 객체와 복합 객체 모두 동일하게 다루도록 하는 패턴입니다. component 컴포지션의 모든 개체에 대한 기본 인터페이스입니다. 하위 컴포지트를 관리하는 공통 메서드가 있는 인터페이스 또는 추상 클래스 여야 합니다. 즉, Leaf 클래스와 전체에 해당하는 Composite클래스의 공통 인터페이스를 작성합니다, leaf 기본 구성 요소의 기본 동작을 구현합니다. 다른 객체에 대한 참조는 포함되어 있지 않습니다. 구체적인 부분 클래스 Composite 객체의 부품.. 2019. 10. 10.
[Design Pattern] Bridge Pattern [Design Pattern] Bridge Pattern Bridge Pattern이란? 추상화를 구현하여 두 개가 독립적으로 변할 수 있도록 브리지 디자인 패턴의 구현은 Composition 보다 Inheritance을 선호한다는 개념을 따릅니다. 브리지 패턴(Bridge pattern)이란 구현부에서 추상층을 분리하여 각자 독립적으로 변형할 수 있게 하는 패턴이다. Bridge Pattern의 구조 Abstraction 기능 계층의 최상위 클래스. 구현 부분에 해당하는 클래스를 인스턴스를 가지고 해당 인스턴스를 통해 구현 부분의 메서드를 호출합니다. RefindAbstraction 기능 계층에서 새로운 부분을 확장한 클래스 Implementor Abstraction의 기능을 구현하기 위한 인터페이스 .. 2019. 10. 10.
[Design Pattern] Proxy Pattern [Design Pattern] Proxy Pattern Proxy Pattern이란? Proxy는 우리말로 대리자, 대변자라는 뜻입니다. Proxy Pattern이란 프락시에게 어떤 일을 대신시키는 것입니다. 실제 기능을 수행하는 객체 Real Object 대신 가상의 객체 Proxy Object를 사용해 로직의 흐름을 제어하는 디자인 패턴입니다. 구체적으로 인터페이스를 사용하고 실행시킬 클래스에 대한 객체가 들어갈 자리에 `대리자`객체를 대신 투입하여 실제 실행시킬 클래스에 대한 객체를 통해 메서드를 호출하고 반환 값을 받는지. 대리자 객체를 통해 메소드를 호출하고 반환값을 받는지 전혀 모르게 처리하는 것입니다. 여기서 중요한 것은 , 흐름 제어만 할 뿐 결괏값을 조작하거나 변경시키면 안 된다는 점입니.. 2019. 10. 8.
[Design Pattern] Decorator Pattern [Design Pattern] Decorator Pattern Decorator Pattern Decorator란 뜻 그대로 장식 자라는 뜻을 가지고 있습니다. 즉 Decorator pattern은, 원본에 무언가를 더 입혀 새로운 것을 만드는 것입니다. 바로 예시를 보도록 하겠습니다. 케이크(Decorate Pattern with Java) public class Cake { public String getCake() { return "cake"; } } public class CreamDecorator extends Cake{ private Cake cake; public CreamDecorator(Cake cake) { this.cake = cake; } @Override public String .. 2019. 10. 8.
[Design Pattern] Builder Pattern [Design Pattern] Builder Pattern Builder Pattern에 대하여 알아보도록 하겠습니다. 빌더 패턴이란?? 인스턴스를 생성할 때, 생성자(Constructor)만을 통해서 생성하는 데는 어려움이 있습니다. 빌더 패턴은 이 문제를 기반으로 고안된 패턴 중 하나입니다. 예를 들면, 생성자 인자로 너무 많은 인자가 넘겨지는 경우 어떠한 인자가 어떠한 값을 나타내는지 확인하기 힘듭니다. 또 어떠한 인스턴스의 경우에는 특정 인자만으로 생성해야 하는 경우가 발생합니다. 이럴 경우, 특정 인자에 해당하는 값을 null로 전달해줘야 하는데, 이는 코드의 가독성 측면에서 매우 좋지 않다는 것을 직감적으로 알 수 있습니다. 코드를 통해 봐 보겠습니다. id, pw, name, address,.. 2019. 9. 15.
[Design Pattern] Singleton Pattern [Design Pattern] Singleton Pattern singleton pattern에 대하여 알아보도록 하겠습니다. 싱글톤이란?? 싱글톤은 단 하나의 인스턴스만 생성하도록 제약을 둔 디자인 패턴입니다. 싱글톤 (Singleton) 은 애플리케이션의 시작부터 종료될 때까지 한 번의 생성(new)으로 고정된 메모리 영역을 가지기 때문에 메모리를 효율적으로 사용할 수 있습니다. 또한 싱글톤의 인스턴스는 전역적으로 사용되기 때문에 다른 클래스의 인스턴스들이 데이터를 공유 변경이 가능하다는 장점이 있습니다. JAVA에서 구현하기 1. Eager Initialization (이른 초기화) 싱글톤 객체를 instance라는 변수로 미리 생성해 놓고 사용하는 방식입니다. 장점 : static으로 생성된 변수.. 2019. 9. 10.
디자인패턴(DesignPattern)에 대하여 디자인패턴(DesignPattern)에 대하여 디자인 패턴이란? 클래스 구조를 갖는 프로그래밍을 하다보면 클래스간에 구조가 짜여지고 다양한 방법으로 객체가 생성되며 관계에 따라 여러가지 형태의 행동들이 나타납니다. 그런데 기초 설계가 제대로 되어있지 않은 상태로 프로그래밍이 시작된다면 얼마 못가 클래스 관계가 꼬일대로 꼬여 누더기 진흙탕 코드덩어리로 변하게될것입니다. 엄청나게 뛰어난 사람이어서 초기 요구에 맞춰 잘 짜여진 클래스관계를 만든다 해도 요구 사항이 바뀌게되면 쉽게 대응하지 못합니다. 위 같은 상황은 OOP(Object Oriented Programming)의 특성을 잃어버리는 것입니다. 많은 사람들이 OOP에 대하여 고민했고 프로그램의 목적이 어떻든간에 프로그램안에 클래스들이 갖는 구조에는 일.. 2019. 9. 10.