[Design pattern] 3-6. 상태 패턴 (State pattern) 안녕하세요. 명월입니다. 이 글은 디자인 패턴의 상태 패턴(State pattern)에 대한 글입니다. 먼저 상태 패턴이라는 것은 클래스의 상태에 따라 처리되는 결과 값이 다른 형태로 만드는 것을 말합니다. 어떻게 보면 전략 패턴과 약간 비슷한 구조가 될 수 있는데... 차이를 두자면 전략 패턴은 전략 인스턴스에 의해 외부의 값이 변환되어 실행되는 것이고 상태 패턴이라는 것은 상태 인스턴스에 의해 내부의 값의 처리가 바뀌는 것을 뜻합니다. 사실 디자인 패턴이라는 것은 실무에서 딱 이건 무슨 패턴이다 정의된 것은 없고.. 그 내용만 이해하여 사용하면 되는 것입니다. 출처 - https://en.wikipedia.org/wiki/State_pattern #pragma once #include #include.. Study/Design Pattern 2021. 11. 17. 20:02
[Design pattern] 3-5. 메멘토 패턴 (Memento pattern) 안녕하세요. 명월입니다. 이 글은 디자인 패턴의 메멘토 패턴(Memento pattern)에 대한 글입니다. 메멘토 패턴은 클래스의 현재 상태를 다른 클래스로 저장하는 패턴입니다. 클래스의 데이터를 저장하는 형태로는 꼭 메멘토 패턴이 아닌 클래스 복사(인스턴스 복사)로 현재의 상태를 보관할 수 있습니다. 그러나 그렇게 되면 현재의 인스턴스가 아닌 새로운 인스턴스로 객체를 생성하는 것이고, 만약에 객체 안에 리소스(IO나 Socket)를 사용하고 있다면 새로운 커넥션을 생성해야 하는 문제점도 발생하는 것입니다. 즉, 메멘토 패턴은 인스턴스의 객체는 변하지 않으면서 안의 값만 저장하여, 상태를 복구하는 역할을 하는 패턴이 메멘토 패턴입니다. 출처 - https://en.wikipedia.org/wiki/Me.. Study/Design Pattern 2021. 11. 16. 20:00
[Design pattern] 3-4. 반복자 패턴 (Iterator pattern) 안녕하세요. 명월입니다. 이 글은 디자인 패턴의 반복자 패턴(Iterator pattern)에 대한 글입니다. 반복자 패턴은 우리가 디자인 패턴을 모르는 상태에서도 아주 자주 사용하는 패턴입니다. C#에서는 list를 foreach로 사용하는 구문이고 Java에서는 for(var x : list)의 형태로 자주 사용되는 패턴입니다. 일반적인 배열(Array)에서는 어차피 index로 배열을 참조하기 때문에 반복자 패턴이 의미가 없습니다만, 연결 리스트(LinkedList)에서는 이야기가 다릅니다. get(100)을 취득하게 되면 index를 0부터 100까지 이동하게 되기 때문에 실제 for에서 사용하게 되면 엄청나게 느려지겠네요. 예를 들면 0번째는 리스트의 가장 앞쪽이니 문제가 없습니다만 for의 1.. Study/Design Pattern 2021. 11. 15. 19:23
[Design pattern] 3-3. 커맨드 패턴 (Command pattern) 안녕하세요. 명월입니다. 이 글은 디자인 패턴의 커맨드 패턴(Command pattern)에 대한 글입니다. 커맨드 패턴(Command pattern)은 살짝 복잡한 패턴입니다만, 간단하게 이야기하면 발동자(invoker)가 수신자(receiver)를 실행하기 위해서 명령자(command)를 가운데 두는 패턴입니다. 보통 커맨드 패턴은 전등의 예로 설명을 많이 합니다만, 스위치(invoker)가 있고 전등(receiver)이 있습니다. 그것을 전원 ON과 OFF의 명령자(command)가 있는 형태입니다. 출처 - https://en.wikipedia.org/wiki/Command_pattern #pragma once #include #include using namespace std; // 전등 클래스.. Study/Design Pattern 2021. 11. 5. 16:50
[Design pattern] 3-2. 책임 연쇄 패턴(Chain of responsibility pattern) 안녕하세요. 명월입니다. 이 글은 디자인 패턴의 책임 연쇄 패턴(Chain of responsibility pattern)에 대한 글입니다. 책임 연쇄 패턴이란 클래스 안에 연결 리스트 알고리즘을 걸고, 특정 함수를 실행하면 연속적으로 실행하는 패턴을 이야기합니다. 출처 - https://en.wikipedia.org/wiki/Chain-of-responsibility_pattern 이게 굉장히 많이 사용되는 패턴은 아닙니다만, 로그 처리나 하나의 처리로 여러가지 결과를 동시에 만들어야 할 때 사용하는 패턴입니다. #pragma once #include #include using namespace std; // Logger 인터페이스 class ILogger { public: // 추상 함수 virtua.. Study/Design Pattern 2021. 11. 4. 19:09
[Design pattern] 3-1. 전략 패턴(Strategy pattern) 안녕하세요. 명월입니다. 이 글은 디자인 패턴의 전략 패턴(Strategy pattern)에 대한 글입니다. 이번 글부터는 행위 패턴에 대한 설명입니다. 생성 패턴은 프로그램에서 인스턴스를 어떻게 생성하는지에 대한 형태이고 구조 패턴은 인터페이스와 추상 클래스, 그리고 일반 클래스 간의 구조적 정의에 대한 형태입니다. 행위 패턴은 클래스와 알고리즘을 실제로 프로그램에서 어떻게 사용할지에 대한 방법을 설명하는 패턴입니다. 전략 패턴은 사용되는 클래스에서 주입되는 클래스의 형태에 따라 나오는 결과를 달리하는 패턴입니다. 출처 - https://en.wikipedia.org/wiki/Strategy_pattern #pragma once #include #include using namespace std; //.. Study/Design Pattern 2021. 11. 3. 18:37
[Design pattern] 2-7. 퍼사드 패턴 (Facade pattern) 안녕하세요. 명월입니다. 이 글은 디자인 패턴의 퍼사드 패턴(Facade pattern)에 대한 글입니다. 퍼사드 패턴은 디자인 패턴에서 가장 많이 사용되는 패턴 중의 하나로, 우리가 디자인 패턴을 모르고 가장 자연스럽게 작성되는 패턴이지 않을까 싶습니다. 이 패턴을 간단한게 설명하면 이전에 생성된 객체와 함수를 사양의 흐름에 맞게 배치하는 구조입니다. 출처 - https://en.wikipedia.org/wiki/Facade_pattern #pragma once #include #include using namespace std; // ControllerA 클래스 class ControllerA { public: // 함수 void init() { // 콘솔 출력 cout Study/Design Pattern 2021. 11. 2. 19:29
[Design pattern] 2-6. 프록시 패턴 (Proxy pattern) 안녕하세요. 명월입니다. 이 글은 디자인 패턴의 프록시 패턴(Proxy pattern)에 대한 글입니다. 프록시 패턴은 어떻게 보면 데코레이터 패턴과 유사한 구조를 구성하고 있습니다만, 데코레이터 패턴은 상속받은 인터페이스에 생성자에서 같은 인터페이스를 상속 받은 인스턴스를 받아 내용을 추가하는 내용이라면, 프록시 패턴은 상속받은 인터페이스에 클래스 내부에서 같은 인터페이스를 상속받은 인스턴스를 생성하는 패턴입니다. 출처 - https://en.wikipedia.org/wiki/Proxy_pattern #pragma once #include #include using namespace std; // INode 인터페이스 class INode { public: // 추상 함수 virtual void pri.. Study/Design Pattern 2021. 11. 1. 19:41
[Design pattern] 2-5. 플라이웨이트 패턴 (Flyweight pattern) 안녕하세요. 명월입니다. 이 글은 디자인 패턴의 플라이웨이트 패턴(Flyweight pattern)에 대한 글입니다. 플라이웨이트의 영어의 뜻은 경량화하다라는 뜻입니다. 그러니깐 인스턴스의 생성을 최소화하여서 메모리의 사용을 최대한 아끼는 방법입니다. 구조 패턴의 싱글톤 버전이라고 생각하면 쉽습니다. 그러나 singleton처럼 static을 이용하는 것은 아니고 보통 Map(Dictionary)와 같이 사용합니다. 출처 - https://en.wikipedia.org/wiki/Flyweight_pattern #pragma once #include #include #include using namespace std; // INode 인터페이스 class INode { public: // 추상 함수 vir.. Study/Design Pattern 2021. 10. 29. 19:44
[Design pattern] 2-4. 데코레이터 패턴 (Decorator pattern) 안녕하세요. 명월입니다. 이 글은 디자인 패턴의 데코레이터 패턴(Decorator pattern)에 대한 글입니다. 데코레이터의 영어 뜻은 장식하다, 꾸미다라는 뜻입니다. 그런 의미로 데코레이터 패턴은 인터페이스에서 상속받은 클래스들의 기능을 확장하기 위한 패턴이라고 할 수 있습니다. 출처 - https://en.wikipedia.org/wiki/Decorator_pattern #pragma once #define _CRT_SECURE_NO_WARNINGS #include #include #include using namespace std; // INode 인터페이스 class INode { public: // 함수 추상화 virtual void print() = 0; virtual ~INode() { .. Study/Design Pattern 2021. 10. 28. 16:16
[Design pattern] 2-3. 브릿지 패턴(Bridge pattern) 안녕하세요. 명월입니다. 이 글은 디자인 패턴의 브릿지 패턴(Bridge pattern)에 대한 글입니다. 브릿지 패턴이라는 것은 개념적으로 추상층의 처리와 구현부의 처리를 독립적으로 사용할 수 있게 하는 방법입니다. 쉽게 말해서 추상층, 즉 인터페이스에서 함수에 대한 처리에 대한 정의를 하면, 상속을 받은 구현부, 즉 클래스에서는 입력받은 인스턴스에 따라 다른 결과를 만들어 내는 구조입니다. 출처 - https://en.wikipedia.org/wiki/Bridge_pattern #pragma once #include #include #include using namespace std; // INode 인터페이스 class INode { public: // 추상 함수 virtual void print(.. Study/Design Pattern 2021. 10. 27. 20:22
[Design pattern] 2-2. 컴포지트 패턴(Composite pattern) 안녕하세요. 명월입니다. 이 글은 디자인 패턴의 컴포지트 패턴(Composite pattern)에 대한 글입니다. 컴포지트 패턴, 일명 합성 패턴이라 불리는 패턴으로 하나의 클래스와 복합 클래스(즉, 리스트)를 동일한 구성을 하여 사용하는 방법입니다. 출처 - https://en.wikipedia.org/wiki/Composite_pattern #pragma once #include #include #include using namespace std; // INode 인터페이스 class INode { public: // 추상 함수 virtual void print() = 0; // 소멸자 추상화 virtual ~INode() { } }; // Node 클래스, INode를 상속 class Node : .. Study/Design Pattern 2021. 10. 27. 20:20
[Design pattern] 2-1. 어댑터 패턴(Adapter pattern) 안녕하세요. 명월입니다. 이 글은 디자인 패턴의 어댑터 패턴(Adapter pattern)에 대한 글입니다. 어댑터 패턴부터는 구조 패턴입니다. 구조 패턴이란 여러 클래스나 객체를 조합하여 더 큰 구조를 만드는 패턴입니다. 이전 생성 패턴에서는 new를 이용한 인스턴스를 생성하는 형태가 중심이었다면 구조 패턴에서는 클래스나 객체의 구조를 어떻게 구성하는 것에 더 중점을 두는 패턴입니다. 어댑터 패턴은 인터페이스로 묶이지 않은 다른 클래스를 형태를 같은 인터페이스의 형태로 변환하는 것이 목표입니다. 출처 - https://en.wikipedia.org/wiki/Adapter_pattern #pragma once #include #include #include using namespace std; // IN.. Study/Design Pattern 2021. 10. 26. 17:02
[Design pattern] 1-5. 프로토타입 패턴 (Prototype pattern) 안녕하세요. 명월입니다. 이 글은 디자인 패턴의 프로토타입 패턴(Prototype pattern)에 대한 글입니다. 프로토타입은 패턴 자체는 굉장히 단순한 패턴입니다만, 개념적으로 포인터와 스택, 힙 메모리에 대한 개념을 잘 모르신다면 이해하기 어려울 수도 있는 패턴입니다. 우리가 프로그램 상에서 클래스의 인스턴스를 생성하게 되면 변수에 포인터 주소가 입력되고 주소에 따른 인스턴스가 힙 메모리에 할당이 됩니다. 그래서 변수로 새로운 객체를 생성하지 않고 등호(equal: =) 기호로 새로운 변수명으로 인스턴스의 주소 값을 넘기면 두개의 변수에서 하나의 인스턴스를 가르키기 때문에 두 변수의 처리에 있어서 데이터 영향이 생깁니다. using System; namespace Example { // 예제 클래스.. Study/Design Pattern 2021. 10. 22. 20:11
[Design Pattern] 1-4. 추상 팩토리 패턴 (Abstract factory pattern) 안녕하세요. 명월입니다. 이 글은 디자인 패턴의 추상 팩토리 패턴(Abstract factory pattern)에 대한 글입니다. 디자인 패턴의 생성 패턴 중에서 가장 복잡한 패턴인 추상 팩토리 패턴입니다. 구조는 복잡하지만 자세히 보면 팩토리 메서트 패턴에서 팩토리를 클래스로 만들고 그 위로 추상 인터페이스를 만들어서 사양에 따라 팩토리를 취득하고 그 팩토리 안에서 클래스를 취득하는 구조입니다. 그러니깐 팩토리 메서드 패턴이 중첩되어 있다라고 생각하면 쉽습니다. 출처 - https://en.wikipedia.org/wiki/Abstract_factory_pattern #pragma once #include #include using namespace std; // 추상 클래스 class IDao { p.. Study/Design Pattern 2021. 10. 15. 18:50
[Design Pattern] 1-3. 팩토리 메서드 패턴 (Factory method pattern) 안녕하세요. 명월입니다. 이 글은 디자인 패턴의 팩토리 메서드 패턴(Factory method pattern)에 대한 글입니다. 이전 글에서 빌드 패턴에 대해서 설명했었습니다. 링크 - [Design Pattern] 1-2. 빌더 패턴(Builder pattern) 빌드 패턴이란 간단히 Builder 클래스와 Director 클래스의 조합으로 하나의 인스턴스가 생성되는 생성 패턴입니다. 이 팩토리 메서드 패턴도 빌드 패턴과 마찬가지로 생성 패턴 중 하나이므로 인스턴스를 생성하는 패턴입니다. 이 팩토리 패턴은 메서드에서 파라미터에 의해 생성되는 인스턴스가 바뀌는 형태를 말합니다. 출처 - https://en.wikipedia.org/wiki/Factory_method_pattern #pragma once .. Study/Design Pattern 2021. 6. 23. 18:53
[Design Pattern] 1-2. 빌더 패턴(Builder pattern) 안녕하세요. 명월입니다. 이 글은 디자인 패턴의 빌더 패턴(Builder pattern)에 대한 글입니다. 빌더 패턴은 우리가 보통 클래스의 인스턴스를 생성할 때 new 키워드를 사용해서 생성합니다만, 그런 방식이 아닌 다른 클래스를 이용해서 인스턴스를 생성하는 패턴이라고 할 수 있습니다. 그리고 인스턴스 안에 데이터를 입력하고 그에 대한 처리 함수등을 호출하여 클래스의 데이터를 처리하는 방법입니다. 사양에 따라 다르지만 클래스의 목적이 있고 초기값 및 데이터는 어느정도 정해져 있고 특정 패턴에 따라 클래스의 데이터를 입력하는 경우가 있습니다. 그럴 때마다 실행 함수 및 로직 함수에 클래스의 초기 값을 입력하기에는 불편함도 많고 가독성도 좋지 않습니다. using System; namespace Exam.. Study/Design Pattern 2021. 6. 11. 17:35
[Design Pattern] 1-1. 싱글톤 패턴 (Singleton pattern) 안녕하세요. 명월입니다. 이 글은 디자인 패턴의 싱글톤 패턴(Singleton pattern)에 대한 글입니다. 싱글톤 패턴은 디자인 패턴 중에서 가장 유명한 패턴입니다. 디자인 패턴을 못 들어봐도 싱글톤 패턴을 들어봤을 정도로 유명한 패턴입니다. 싱글톤 패턴은 클래스의 인스턴스를 프로그램 실행 중에 딱 한번만 생성하고 계속 재사용하는 패턴입니다. 이점으로는 클래스의 데이터를 변환하지 않고 계속적으로 사용하거나 모든 객체에서 데이터를 공유해야 하는 경우에 사용합니다. 먼저 C/C++예제로 살펴보겠습니다. // 중복 검사 전처리문 #pragma once // 해더 선언 #include #include using namespace std; // 클래스 선언 class Node { private: // 싱글톤.. Study/Design Pattern 2021. 6. 9. 18:23
[Design Pattern] 디자인 패턴 소개 안녕하세요. 명월입니다. 이 글은 디자인 패턴에 대해 소개에 대한 글입니다. 디자인 패턴이란 먼저 영어로 디자인이 우리가 생각하는 화면 디자인의 뜻이 아니고 설계라는 뜻입니다. 즉, 설계 패턴이라는 소리입니다. 처음 이 디자인 패턴을 제시한 사람이 GoF라 불리는 네 명의 컴퓨터 과학자입니다. 저도 원서보다는 번역서와 해설서를 위주로 본 것이라 GoF에 대해서는 자세히 설명하기가 어렵네요. 어쨋든 이 네 명이 프로그램 코드를 작성하는 가운데 효휼적인 코딩 패턴과 실제 업무에서 프로그램 코드로 옮길 때 해석할 수 있는 패턴을 정리해 놓은 것입니다. 지금은 이 디자인 패턴이 물론 효율적인 설계 패턴을 위해서도 작성하지만 암묵적인 코딩 룰에 대한 것도 있습니다. 예로 제 경험담를 통해 설명하겠습니다. 제가 학.. Study/Design Pattern 2021. 6. 8. 19:11
[Design pattern - 실무편] 의존성 주입 (Dependency Injection) 구현하기 안녕하세요. 명월입니다. 이 글은 의존성 주입(Dependency Injection)의 대한 설명입니다. 최근에 웹 프레임워크로 MVC 모델을 많이 사용합니다. 아니 많이 사용하는 정도를 넘어서 MVC 모델이 아니면 프로젝트가 진행이 안될 정도로 거의 표준으로 자리 잡았습니다. 거기서 Java의 Spring이나 C#의 MVC 프레임워크에서 의존성 주입, DI 관계로 객체를 선언합니다. 사실 이 글을 쓰기 전에 많이 고민했었습니다. 의존성 주입 패턴이 과연 Gof의 디자인 패턴에 어디에 해당되는 걸까 하고 말입니다. 결론은 인터프리터 패턴과 Builder 패턴이지 않을까 싶네요. 최초에 제가 의존성 주입 패턴이 무엇인가에 대해 처음 공부할 때 DI는 Singleton의 단점을 해결하기 위한 패턴이다라고 들.. Study/Design Pattern 2019. 6. 21. 09:00
[Design pattern - 실무편] MVC 모델에서 사용되는 Route에 대한 패턴 (중재자 + 인터프리터 패턴) 안녕하세요. 명월입니다. 이 글은 MVC 모델에서 사용되는 Route에 대한 패턴에 대한 설명입니다. MVC 모델은 최근 웹 개발에서 가장 많이 사용되는 프레임 워크 구조 개념인 듯 싶습니다. 저도 업무의 90%이상이 웹 개발입니다만 이제는 MVC 모델 개념이 없으면 프로그램을 어떻게 만들까 할 정도로 MVC 모델에 적응이 되었고 이상적이라고 생각합니다. 그 중 MVC 모델에서 Controller 과 Model과 View의 관계는 인터프리터 패턴과 중재자 패턴으로 만들어 집니다.(제 예상입니다.) 실제 C#의 MVC나 Java의 Spring에서는 이 부분이 이미 다 만들어져 있어서 굳이 유저가 만들어서 사용할 필요는 없습니다만 그래도 혹시 나중에 프레임 워크를 수정할 일이 있으면 알아두면 좋을 듯 싶습니.. Study/Design Pattern 2019. 6. 20. 09:00
[Design pattern - 실무편] Database의 Transaction을 옵서버 패턴으로 구성하기 안녕하세요. 명월입니다. 이 글은 옵서버(Observer) 패턴을 실무에서 어떻게 사용되는 지에 대한 소개입니다. 사실 Observer 패턴은 Java와 C#에서는 람다식, javascript에서는 callback 식이기 때문에 매우 많이 사용됩니다. 특히, 완성된 기존에 소스에서 사양 변경을 크게 하지 않고 수정하고 싶을 때 사용되는 패턴이기도 합니다. 예를 들면 아래와 같은 소스가 있다고 가정합니다. class Controller { public void Run() { for(int i = 0; i < 100; i++) { Console.WriteLine(i); } } } class Program { static void Main(string[] args) { var controller = new C.. Study/Design Pattern 2019. 6. 18. 23:02
[Design pattern - 실무편] Log manager (로그 매니저)에서 책임 체인 패턴 사용하기 안녕하세요. 명월입니다. 이 글은 책임 체인 패턴을 실무에서 어떻게 사용하는 지 설명하는 글입니다. 책임 체인 패턴의 대한 설명은 아래에 소개했었습니다. [Design pattern] 책임 체인 패턴 (Chain responsibility pattern) - https://nowonbun.tistory.com/456 책임 체인 패턴은 거의 로그에 관계된 로직에서 많이 사용됩니다. 그 외에도 사용하려면 사용할 수는 있습니다만 제 경험으로는 그 외는 거의 없네요. 사양으로 로그 데이터는 파일(Log4g 라이브러리를 사용해서..)로 많이 남겨둡니다. 데이터 베이스 상에도 로그를 남겨두기는 합니다만 보통 trigger를 사용해서 남기는 형태가 많기 때문에 따로 프로그램에서 데이터 베이스로 로그를 Insert하는.. Study/Design Pattern 2019. 6. 17. 22:54
[Design pattern - 실무편] Controller에서 Facade 패턴 사용하기 안녕하세요. 명월입니다. 이 글은 실무에서 MVC모델 안에서 사용하는 디자인 패턴에 대해서 설명하는 글입니다. 최근 웹 프로그램 설계의 추세는 역시 MVC가 가장 인기있는 모델이지 않을까 생각됩니다.MVC 모델은 Model과 View와 Controller를 분리해서 작업하는 모델입니다. Model은 데이터 베이스 혹은 프로그램 안에서 사용되는 데이터 객체를 뜻하는 것이고 Controller은 그 모델 데이터를 가공하거나 계산하는 식이 Controller이고 View는 최종적으로 Controller안에서 만들어진 Model데이터를 화면 혹은 출력을 하는 부분이 View부분입니다. 이것까진 많은 사람들이 잘 알고 있는 부분입니다만 이런 좋은 모델들을 실무에서 엄청 어렵게 혹은 복잡하게 만드는 분들이 많습니다.. Study/Design Pattern 2019. 6. 14. 22:37
[Design pattern - 실무편] Excel 빌더 패턴 만들기 안녕하세요. 명월입니다. 이 글은 Builder 패턴을 실무에서 어떻게 사용하는 지 소개하는 글입니다. Builder 패턴의 경우는 보통 Entity 객체를 자동으로 만들어 주는 개념의 패턴입니다. 예를 들면 데이터 베이스에서 데이터를 검색해서 나오는 데이터를 List의 형식으로 만드는 것도 빌드 패턴입니다. 사실 데이터 베이스의 데이터를 class 객체화 시키는 게 좋은 예이기는 하지만 너무 간단한 예제이기 때문에 저는 Excel의 데이터를 Entity로 내보내는 예제를 만들겠습니다. 먼저 Excel의 데이터를 읽어 드리는 NPOI 라이브러리를 사용하는데 NPOI의 설명은 다음 링크를 참조해 주세요. [C#] NPOI를 이용하여 Excel를 읽어드리고 다시 출력하기 - https://nowonbun.t.. Study/Design Pattern 2019. 6. 13. 22:57
[Design pattern - 실무편] FactoryDao 예제 ※ DI(의존성 주입) 구현 예제 안녕하세요. 명월입니다. 지금까지 기본적인 디자인 패턴을 전부 소개했습니다. 이번 글부터는 디자인 패턴이 실무에서 어떻게 응용이 되는 지 소개하겠습니다. 제가 디자인 패턴 중에 가장 많이 사용하는 방법 중 하나가 DAO(Database access object) 관리를 팩토리 패턴과 경량 패턴(Flyweight) 그리고 싱글 톤으로 묶어서 Factory Dao로 만들어서 사용합니다. //Dao의 인터페이스 interface IDao { } // 템플릿 메서드 패턴식 abstract class AbstractDao : IDao { // Id에 의해 하나의 Entity를 검색 public T SelectByOne(int id) { return default(T); } // Insert public int I.. Study/Design Pattern 2019. 6. 12. 23:09
[Design pattern] 템플렛 메서드 패턴 (Template method pattern) 안녕하세요. 명월입니다. 이 글은 템플렛 메서드 패턴에 대한 설명입니다. 템플렛 메서드 패턴은 파사드 패턴과 비슷한 구조입니다. 파사드 패턴은 여러 처리 함수를 하나의 함수에서 구조적으로 전개한 패턴이면 템플렛 메서드 패턴은 단순히 구조적인 패턴이 아닌 추상 클래스를 통해 실행 흐름은 정해진 상태에서 하위 클래스로 그것을 상속받아 재 선언하는 의미의 패턴입니다. 쉽게 말하면 구조적은 파사드 패턴이지만 클래스간 관계적으로 나타난 형식입니다. abstract class AbstractController { // 추상 클래스에서는 사용하진 않지만 상속받은 클래스에서 override해야한다. protected abstract void Init(); protected abstract String Result();.. Study/Design Pattern 2019. 6. 12. 22:59
[Design pattern] 방문자 패턴 (Visitor pattern) 안녕하세요. 명월입니다. 이 글은 방문자 패턴에 대한 설명입니다. 방문자 패턴은 말 그대로 여러 객체를 모아 둔 List에 방문자 클래스를 넣으므로 일괄적으로 처리하게 하는 패턴입니다. 예전에 책에서 본 예제로 가게에 요리사, 홀 서빙, 카운터를 배치시키고 손님이 와서 돈을 내면 그 수익의 분할하는 패턴이라고 쓴 글을 본 적이 있습니다. 정말 말 그래도 딱 적절한 예이지 않을까 싶네요. 방문자 패턴은 말은 방문자 패턴인데 실제로는 MVC에서 Model과 Controller의 관계이지 않을까 싶습니다. 데이터 Model이 준비가 완료되면 최종적으로 Controller 선언해서 그 Model를 일괄 처리하는 방식의 패턴입니다. interface IVisitor { void Visit(Model1 model).. Study/Design Pattern 2019. 6. 11. 22:48
[Design pattern] 옵서버 패턴 (Observer pattern) 안녕하세요. 명월입니다. 이 글은 옵서버 패턴에 대한 설명입니다. 옵서버 패턴은 Javascript에서 가장 많이 사용하는 패턴입니다. 그러나 Java나 C#에서도 lambda식, 이벤트, C++에서 함수 포인트를 사용하는 구조가 옵서버 패턴입니다. 간단하게 설명하면 callback의 구조가 옵서버 패턴이라고 생각하면 됩니다. 개인적으로 저는 정말 많이 사용하는 패턴 중에 하나입니다. interface IObserver { void CallBack(String data); } class Controller { private string data = "Hello world"; public void Execute(IObserver ob) { // 호출 당한 클래스의 Callback 함수를 호출한다. ob.C.. Study/Design Pattern 2019. 6. 11. 22:43
[Design pattern] 중재자 패턴 (Mediator pattern) 안녕하세요. 명월입니다. 이 글은 중재자 패턴에 대한 설명입니다. 중재자 패턴은 사실 크게 복잡한 건 아닙니다. 그러나 이 패턴에 대한 내용을 확인하기 위해 다른 위키나 블로그 등을 보면 좀 어렵게 설명되어 있습니다. 그래서 예전에 공부할 때 좀 어려웠다라고 생각했던거 같습니다. 그래서 저는 그냥 클래스 간에 상위, 하위 개념 없이 순환 참조 에러와 같지 않을까 생각됩니다. 사실 그렇게 생각하는게 편합니다. // 이건 중재자 패턴이 아닌 나쁜 프로그램 디자인의 예. class Controller { // Action 클래스를 명시한다. public void Run(Action action) { action.Draw(this); } public void OnConnected() { Console.Write.. Study/Design Pattern 2019. 6. 10. 23:57