프로그래밍/디자인 패턴
FSM이 우리를 구원하리라
2017. 9. 17.게임 프로그래밍을 공부했다면, 혹은 CS를 2학년까지 수료했거나 이산수학같은 과목을 들었다면 FSM이라는 친구를 한번 쯤은 들어봤을 것이다. FSM은 무신교가 종교를 강요하고 다니는 사람을 비꼬기 위해 만든 날아다니는 스파게티 괴물(Flying Spaghetti Monster)라는 친구도 있지만 CS에서, 수학에서는 유한 상태 기계(Finite State Machine)이라는 친구이다. 앞으로 주변에있는 Sample 크기 이상의 게임을 만들때는 FSM이라는 개념을 알아두면 게임을 구성하고 진행하는데 많은 도움이 될 것이고, 이미 어느정도 만들어져있는 프로젝트에 참여하게된다면 이미 FSM을 적극적으로 활용하고 있는 경우가 많을 것이다. 때문에라도 FSM을 배우고 이것을 게임엔진에서 어떻게 구현할수있는 지를..
옵저버 패턴 [Observer Pattern] : 정보는 뿌릴태니 알아서 들으렴!
2017. 5. 29.오랜만에 다시 디자인 패턴을 포스팅하는 것 같다. 마찬가지로 C++가 아닌 C#이나 Javascript, Python을 이용하여 프로그래밍하다가 C++을 하려니 간단한 예제인데도 포인터로 실수 좀 했다 ㅎㅎ... 이번 패턴은 옵저버 패턴이다. 직역하면 관찰자, 감시자 정도일 것 같은데 이름만 들어서는 감시하는 객체가 빡시게 일할 것 같지만 사실 감시당하는 객체 쪽에서 열심히 일해주어야 한다. (처음 배울 때 관찰당하는 객체와 하는 객체의 역할이 헷갈려서 고생 좀 했었지...) 기본적인 메커니즘은 '관찰하고 싶은 객체'가 '관찰당하고 싶은 객체'에게 "나 널 관찰하고 싶어!"라고 알려주면, '관찰 당하고 싶은 객체'가 기억해 두었다가 특정 사건이나 변화가 일어날 때 '관찰하고 싶은 객체'에게 찾아가 알려주..
프로토타입 패턴 [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다. 반복 자라 고도하는데 다음 코드..