디자인패턴
프로토타입 패턴 [Prototype Pattern] : 복사하여 인스턴스 만들기
2016. 8. 4.이번에 다룰 패턴은 Prototype 패턴이다. 이 패턴은 인스턴스를 생성할 때 사용하는 패턴 중 하나인데, 객체를 복사하는 방식으로 인스턴스를 생성해 낸다. 마치 만화 나루토에서 나오는 그림자 분신술 같은 느낌이다. 일단 UML을 한번 살펴보자 UML Prototype을 상속받아 createClone() 메소드를 구현하는 ConcretePrototype으로 UML이 구성되어있다. 상당히 심플한 느낌의 UML이다. 원형을 하나 들고 있고, 들고있는 원형이 Prototype을 상속받아 createClone() 메소드를 구현한 상태라면 Client에서 원할 때 원형으로 클론을 만들어 사용할 수 있다. 왜 사용하나? 사실 인스턴스를 만드는 방법은 익히 일고있듯이 new Somthing() 을 이용하여 인스턴스..
싱글톤 패턴 [Singleton Pattern] : 유일한 하나의 인스턴스 만들기
2016. 8. 4.Singleton은 내가 처음 접한 디자인 패턴이기도 하고, 잘 사용하면 정말 편리하게 사용할 수 있는 패턴이다. 프로그래밍을 하다 보면 객체 인스턴스가 유일하게 존재해야 하는 경우가 있다. 가령 게임에서는 특정 데이터나 상태를 Managing 할 때, 예를 들어 게임의 전반적인 상태를 관리해주는 GameManager같은 경우에는 누구나 쉽게 인스턴스에 접근할 수 있으면 좋지만, 여러 개 생겨나면 안된다. 이런 경우 Singleton 패턴을 사용하게 된다. UML 먼저 간단하게 UML을 살펴보자. Singleton의 UML은 조금 독특하게 생겼다. 일단 노드가 하나이다. 노드가 하나인 것도 이상한데, 자기 자신을 가지고 있다…. 뭔가 독특한 형태의 UML이다. 이번 패턴은 UML보다는 소스 코드가 더 중..
팩토리 메소드 패턴 [Factory Method] : 자식 클래스에서 인스턴스 생성하기
2016. 8. 4.Template Method 패턴에서 부모 클래스에서 알고리즘의 레이아웃을 정하고 자식 클래스에서 구체적인 구현을 하였다. Template Method 인스턴스 생성에 적용한 패턴이 바로 Factory Method 패턴이다. 이전에 Template Method 패턴과 연계하여 공부하면 좀 더 빠르게 이해할 수 있을 것이다. 어디에 사용되나? 목적과 의도를 먼저 말하자면, Template Method와 비슷하다. Template Methode에서 어떤 알고리즘의 레이아웃을 정하고 자식 클래스에서 구체적인 구현을 하였다면, Factory Method는 부모 클래스에서 객체가 어떻게 생성되는지 구체적인 레이아웃을 잡고 자식클래스에서 구체적으로 구현하는 방법이다. 주로 인스턴스 생성 시퀸스가 비슷하면서 복잡한 ..
템플릿 메소드 패턴 [Template Method] : 자식 클래스에서 구체적으로 처리하기
2016. 8. 3.책에서도 있는 내용이지만, 템플릿 메소드 패턴은 문자 모양을 따라 구멍이 뚫려있는 얇은 플라스틱판에 비유되곤 한다. 전체적인 골격을 잡아두고, 그것을 연필로 쓰면 연필로 만든 문자, 붓으로 쓰면 붓으로 만든 문자가 된다는 식의 비유다. 사실 처음에는 이런 비유가 확 와 닿지는 않았다. (사실 지금도 적절한 비유인지 잘 모르겠다.) 하여튼 템플릿 메소드 패턴은 "전체적인 메소드(알고리즘)의 흐름(레이아웃)을 부모 클래스에서 정해두고, 자식 클래스에서 자세한 내용을 구현하여 처리하는 패턴"이라고 할 수 있다. UML 개인적으로 앞에서 책에서 설명했던 비유나 말로는 이 패턴의 의도를 파악하기 조금 그랬기 때문에, 이번에는 먼저 코드를 보고 설명을 하고자 한다. (사실 다른 것도 이렇게 하는 게 맞긴 한데) 먼..
어댑터 패턴 [Adapter Pattern] : 바꿔서 다시 이용하기
2016. 8. 3.어댑터는 우리가 일상생활 속에서 잘 사용하고 있는 물건중 하나이다. 예를 들어 HDMI 케이블에 MiniHDMI 어댑터를 사용하여 HDMI to MiniHDMI 처럼 사용한다든지, 110V짜리 플러그를 어댑터를 사용하여 220V에 연결하는데 사용하고 있다. 어댑터는 이처럼 "제공되고 있는 것과 필요한 것 사이를 연결해주는 역할"을 하고 있다. Adapter 패턴은 왜 사용할까?! 앞서 언급했듯이 어댑터는 제공되고 있는 것과 필요한 것 사이를 연결해주는 역할을 한다. 그러면 Adapter 패턴은 왜 사용해야 할까? 우리는 항상 처음부터 프로그래밍한다고 할 수 없다. 분명, 오픈소스 라이브러리를 사용하거나 프로젝트 중간에 합류해서 작업해야 하는 경우가 생긴다. 이럴 경우에 기존에 작업하던 코드들을 Adapt..
이터레이터 패턴 [Iterator] : 순서대로 처리하자
2016. 8. 2.이라는 책을 가지고 복습하는 것이기 때문에 책에 나와 있는 패턴을 순서대로 공부해보려고 한다. 좀 멀리 떨어져 있더라도 비슷한 모양이나 역할의 패턴들이 있기는 하지만, 글 내부에 관련 패턴 형식으로 정리하면 될 것 같다. 다른 학교는 처음에 어떤 언어를 배울지는 모르겠다. 내가 알기로는 H 대학교는 파이썬을 배우고, K 대학교에서는 C를 먼저 배운다고 알고 있다. 하지만 인하대학교에서는 OOP라는 명목으로 C++를 가르치고 있고 다른 학교도 OOP라는 이름으로 Java를 가르칠 것이라고 생각한다. 그 두 개를 배워서 써본 사람이라면 를 어디서 쓰지는 않아도 들어봤을 것으로 생각한다. iterator?! C++의 그것?맞다. 여러분이 C++ 에서 사용하는 iterator다. 반복 자라 고도하는데 다음 코드..