본문 바로가기

DesignPattern25

[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] Chain of Responsibility Pattern [Design Pattern] Chain of Responsibility Pattern Chain of Responsibility Pattern 패턴에 대하여 알아보고, 자바와 코틀린 예제를 알아보도록 하겠습니다. Chain of Responsibility Pattern이란???? 요청 처리가 들어오게 되면 그것을 수신하는 객체가 자신이 처리할 수 없는 경우에는 다음 객체에게 문제를 넘김으로써 최종적으로 요청을 처리할 수 있는 객체의 의해 처리가 가능하도록 하는 패턴입니다. 하나의 예로 자바의 try /catch / finally가 해당됩니다. try 블록 안에서 Exception이 발생하면 catch 블록으로 이동하여 catch블록을 실행하게 되는 것입니다. 구조 ● Handler : 요청을 처리하기 .. 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] Observer Pattern [Design Pattern] Observer Pattern 알아보기 Observer Pattern에 대한 개념에 대하여 알아보고 예시를 통해 알아보도록 하겠습니다. Observer Pattern이란? 한 객체의 상태 변화에 따라 다른 객체의 상태도 연동되도록 일대다 객체 의존 관계를 구성하는 패턴입니다. Observer Pattern의 상태를 전달하는 방법 Observer Pattern의 상태를 전달하는 방법은 두 가지가 있습니다. PUSH : 주제 객체가 구독 객체에게 상태를 보내는 방식 PULL : 구독 객체가 주제 객체에게서 상태를 가져가는(요청하는) 방식 어떨 때 쓰면 좋을까?? 데이터의 변경이 발생하였을 때 상대 클래스나 객체에 의존하지 않으면서 데이터 변경을 통보하고자 할 때 사용합니다. O.. 2019. 10. 15.
[Design Pattern] Strategy Pattern [Design Pattern] Strategy Pattern Strategy Pattern이란? 객체들이 할 수 있는 행위 각각에 대해 전략 클래스를 생성하고 유사한 행위들을 캡슐화하는 인터페이스를 정의합니다. 객체의 행위를 동적으로 바꾸고 싶은 경우 직접 행위를 수정하지 않고 전략을 바꿔주기만 함으로써 행위를 유연하게 확장하는 방법을 말합니다. 즉 , 객체가 할 수 있는 행위들을 각각의 전략으로 정의, 수정이 필요한 경우 전략을 바꾸는 것만으로도 수정이 가능하도록 만드는 패턴입니다. 전략 패턴을 사용해야하는 이유 전략패턴을 적용하지 않은 예를 보도록 하겠습니다. 위와 같은 관계의 클래스 구조가 있습니다. Strategy Pattern with Java public interface Movable { p.. 2019. 10. 11.
[Design Pattern] Flyweight pattern [Design Pattern] Flyweight pattern Flyweight pattern이란? Flyweight pattern은 비용이 큰 자원을 공통으로 사용할 수 있도록 만드는 패턴입니다. 비용이 크다는 것은 두 가지로 나누어 생각할 수 있습니다. 1. 중복 생성될 가능성이 높은 경우 동일한 자원이 자주 사용될 가능성이 높은 경우입니다. 이런 자원은 공통 자원 형태로 관리하고 요청이 있을 때 제공해주는 것이 좋습니다. 2. 자원 생성 비용은 큰데 사용빈도가 낮은 경우 자주 생성하지 않는 데 사용빈도가 낮은 자원을 항상 생성하는 것은 낭비겠죠. 즉 , 생성된 객체를 생성한 후 저장하여 재활용하는 팩토리를 기반으로 합니다. 객체가 요청될 때마다 팩토리는 객체가 이미 생성되었는지 확인하기 위해 객체를.. 2019. 10. 10.
[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] Facade Pattern [Design Pattern] Facade Pattern Facade Pattern이란? Facade는 '건물의 정면'을 의미합니다. Facade는 클래스 라이브러리 같은 어떤 소프트웨어의 다른 커다란 코드 부분에 대한 간략화된 인터페이스를 제공하는 객체입니다. 말이 어려운데 예를 보는 것이 더 빠를 것 같습니다. 영화 시청하기(Java Facade Pattern) 어떤 사람이 영화를 시청하기 위해 아래와 같은 과정을 거친다 합시다. 팝콘 준비-> TV 켜기 -> 영화 검색 -> 영화 결제 -> 영화 재생 Snack snack = new Snack("popcon); RemoteControl remote= new RemoteControl(); Movie movie = new Movie("joker"); s.. 2019. 10. 8.
[Design Pattern] Adapter Pattern [Design Pattern] Adapter Pattern Adapter Pattern이란? 어댑터 패턴은 이름대로 어댑터 같은 역할을 합니다. 한 클래스의 인터페이스를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환하는 패턴입니다. 어댑터 패턴을 사용하면 다른 인터페이스와 호환성 문제를 해결할 수 있습니다. 실생활의 예로 해외여행을 갈 때 외국에서는 한국과 다른 전기 규격의 플러그를 사용하는 곳이 있습니다. 그럴 때 보통 돼지코라 불리는 플러그 변환 어댑터를 사용하곤 합니다. 위와 같은 돼지코가 특정 규격을 다른 규격으로 호환 가능하도록 바꿔주듯이 어댑터 패턴도 같은 역할을 한다고 보면 됩니다. Client 써드파티 라이브러리나 외부 시스템을 사용합니다. Adaptee 써드파티 라이브러리나 외부시.. 2019. 10. 7.
[Design Pattern] Prototype pattern [Design Pattern] Prototype pattern Prototype패턴이란 ? 보통은 new키워드를 사용하여 인스턴스를 생성합니다. 하지만 인스턴스를 다시 생성해야 하는것이 아니라 기존 생성되어있는 인스턴스를 복사 하여 새로운것을 만들어야하는경우가 있습니다. 아래와 같습니다. 종류가 너무 많이 클래스로 정리되지 않는 경우 취급하는 오브젝트의 종류가 너무 많아, 각각을 별도의 클래스로 만들어 다수의 소스 파일을 작성해야 함 클래스로부터 인스턴스 생성이 어려운 경우 생성하고 싶은 인스턴스가 복잡한 작업을 거쳐 만들어지기 때문에, 클래스로부터 만들기가 매우 어려운 경우 framework와 생성할 인스턴스를 분리하고 싶은 경우 프레임워크를 특정 클래스에 의존하지 않고 만들고 싶은 경우. 클래스 이름.. 2019. 9. 27.
factory method pattern vs abstract factory pattern 차이 알아보기 factory method pattern vs abstract factory pattern 차이 알아보기 두 패턴은 공통점이 많지만 확연히 다른 차이점이 존재합니다. 펙토리 메서드 패턴과 추상 메서드 패턴의 차이에 대하여 알아보도록 하겠습니다. 팩토리 메서드 패턴과 추상 팩토리 패턴의 공통점 Template Method Pattern을 사용 Factory 클래스를 사용하여 생성 Factory Method Pattern을 사용 둘 다 추상 클래스와 Factory를 통해 실제 구현 대상인 Concrete(구상 클래스, 구체 클래스)와 Client 간 결합도를 낮춥니다 인자에 따라 생성되는 객체가 결정됩니다. 추상 팩토리 패턴은 Factory Method Pattern을 사용합니다. 그리고 팩토리 메서드 패턴.. 2019. 9. 18.
[Design Pattern] template method pattern [Design Pattern] template method pattern template method pattern 이란?? 템플릿 메서드 패턴은 추상 클래스와 구현 클래스로 작성할 수 있으며 메인이 되는 로직 부분은 추상 클래스의 일반 메서드로 선언해서 사용됩니다. 즉 구현 별로 달라질 수 있는 행동(메서드)들은 구현 클래스에서 선언 후 호출하는 방식으로 사용합니다. 아래와 같은 장단점이 있습니다. 장점 코드 중복 감소 자식 클래스의 역할을 감소시키면서 핵심 로직 관리 용이 객체 추가 및 확장 쉽게 가능 단점 추상 메서드가 너무 많아지면 클래스 관리 복잡 추상 클래스와 구현 클래스 간 복잡성 증대 예 알아보기 1. Template public abstract class HouseTemplate { pu.. 2019. 9. 18.
[Design Pattern] Factory Method Pattern [Design Pattern] Factory Method Pattern Factory Method Pattern이란? 팩토리 메서드 패턴(Factory Method Pattern)의 Factory method pattern은 부모(상위) 클래스에 알려지지 않은 구체 클래스를 생성하는 패턴이며. 자식(하위) 클래스가 어떤 객체를 생성할지를 결정하도록 하는 패턴이기도 하다. 팩토리 메서드 패턴은 아래와 같은 특징, 장단점이 존재합니다. 특징 Templeate Method Pattern을 사용 Factory 클래스를 이용하여 객체 생성 추상적인 클래스( interface, abstract )를 통해 실제 구현 대상인 Concrete(구상 클래스, 구체 클래스)와 Client 간의 결합도를 낮춥니다. 단 하나의.. 2019. 9. 18.
[Design Pattern] abstract factory pattern [Design Pattern] abstract factory pattern abstract factory pattern(추상팩토리패턴) 추상팩토리 패턴은 많은 수의 연관된 서브 클래스를 특정 그룹으로 묶어 한번에 교체할 수 있도록 만든 디자인패턴입니다. 추상화(Abstact) + 팩토리(Factory)를 합친 단어입니다. 추상화란 구체화의 반대말로 생각하면 편할것입니다. 실제 코드 부분이 작성되지 않고 어떻게 사용할지 명세(인터페이스라고 한다)만 정의하는 것입니다. 추상팩토리 패턴은 다양한 구성 요소 별로 "객체의 집합"을 생성해야 할 때 유용한 패턴입니다. 다시 말해서, 서로의 다른 객체들을 하나의 팩토리에서 생성과 관리를 한다고 보면됩니다. 하나의 인터페이스에서 객체의 생성을 처리하고, 다양한 성격의.. 2019. 9. 17.
[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.