[디자인 패턴] 6. 커맨드 패턴
·
Programming/디자인 패턴
커맨드 패턴의 정의 커맨드 패턴을 이용해 메소드 호출을 캡슐화해서, 계산 과정의 각 부분들을 결정화 시킨 다음 작업을 요청한 쪽 하고 작업을 처리하는 쪽을 분리 시킬 수 있다. 즉, 계산하는 코드를 호출하는 객체에서는, 해당 일을 어떻게 처리해야 하는지에 대해 신경 쓰지 않아도 된다. 식당 주문 예제 커맨드 패턴에 대해 위의 세 문장으로 바로 이해할 수 있는 사람은 거의 없을 것이다. 좀 더 알기쉽게 유명한 예제인 식당에서 주문을 하는 예제로 이해해보자. 식당을 이루고 있는 객체는 고객, 주문서, 종업원, 주방장 총 4개라고 가정해보자. 고객은 주문서에 자신이 원하는 메뉴를 적는다. 종업원은 주문서에 적힌 메뉴를 확인한다. 주문서에 적힌 메뉴를 확인하고 이 메뉴를 주방장에게 전달한다. 이 3가지 Proc..
[디자인 패턴] 5. 싱글턴 패턴
·
Programming/디자인 패턴
게임 개발자라면 한번쯤은 들어본 싱글턴 패턴에대해 얘기해보자. OOP에서 클래스의 인스턴스는 여러 개 존재할 수 있다. 단순히 new 연산자로 인스턴스를 생성해주면 그만이다. 하지만 필요에 의해서, 어떤 경우든 인스턴스가 최대 한개까지만 존재하도록 하고싶은 경우가 있을 수 있다. 싱글턴 패턴은 위와 같은 경우에 사용된다. 싱글턴 패턴이 사용되는 경우 먼저 인스턴스가 최대 한개까지만 존재해야 되는 경우를 생각해보자. 가장 대표적인 예로는 사용자 설정, 레지스트리, I/O 디바이스를 다룰 때 이다. 인스턴스가 여러개 존재하면 어떤 인스턴스의 설정 값, 혹은 멤버 변수를 참조할지 모호해지므로 무조건 최대 하나만 존재해야 한다. 알기 쉽게 롤을 예시로 들어보자 롤 클라이언트의 설정 값 롤에는 각 스킬별로 스마트..
[디자인 패턴] 4. 팩토리 패턴
·
Programming/디자인 패턴
미니언 생성으로 팩토리 패턴 알아보기 오늘도 어김없이 롤을 예시로 들어보자. 여러분은 롤 클라이언트 개발팀에서 미니언쪽 부서에서 일하게 되었다. 1분 30초가 되면 미니언을 생성함과 동시에 일정 간격마다 계속 미니언을 생성해야 한다. 미니언들은 아마 이런 특성을 가지고 있을것이다. 미니언들의 특성 고유 특성 1. 근거리 2. 원거리 3. 대포 공통 특성 1. 걷는다 2. 공격한다 미니언 객체를 생성하기 위해서 코드 어디서든 이 미니언 클래스의 인스턴스를 new 해줘야 할것이다. 간단히 코드로 나타내면 다음과 같다. class MinionSpawner { public Minion GetMinion(string type) { Minion minion; if(type == "근거리") minion = new ..
[디자인 패턴] 3. 데코레이터 패턴
·
Programming/디자인 패턴
이해를 돕기 위해 롤토체스를 예시로 들어보자. 롤토체스에는 150개 이상의 챔피언이 존재한다. 챔피언들은 기본적으로 원딜, 서폿, 미드, 탑, 정글의 포지션중에 하나를 가지고 있다. 챔피언의 포지션만을 고려하여 챔피언의 판매 가격을 결정한다고 가정해보자. 챔피언 판매로 데코레이터 패턴 이해해보기 모든 챔피언들은 하나의 포지션을 갖는다. 이를 클래스로 단순하게 나타내 보자. abstract class Champion { abstract public int GetCost(); } 모든 챔피언들의 부모 클래스인 Champion 클래스는 abstract 클래스로 GetCost 추상 메소드를 가진다. Champion 클래스를 상속받는 챔피언들은 자신이 가지고 있는 포지션을 고려하여 GetCost 추상 메소드를 i..
[디자인 패턴] 2. 옵저버 패턴
·
Programming/디자인 패턴
이번에도 이해를 돕기 위해 롤을 예시로 들어보자. 평화로운 라인전에서 우리가 해야 할일은 미니언 막타!! cs를 챙겨야 된다. 미니언 막타를 쳤을 때 롤 클라이언트에서 일어나는 일을 생각해보자. 미니언 막타로 옵저버 패턴 이해해보기 1. 골드가 올라간다 미니언이 죽으면서 위에 골드 몇원을 얻었는지 UI가 뜨고 동시에 하단 템창 옆에 있는 골드 표시 UI도 해당 금액이 더해진 누적 금액으로 바뀌게 된다. 2. CS가 올라간다 게임내 정보에 내 CS 정보가 업데이트 되어 Tab키를 눌러보면 CS가 1 증가해있는걸 볼 수 있다. 여기에 CS로 벌은 골드 정보도 포함시킨다 생각해보자. 3. 어쩔때는 현상금이 올라간다 압도적인 CS로 상대팀 챔피언들보다 골드가 많아지면 현상금이 붙게 되는걸 Tab키를 눌러 확인할..
[디자인 패턴] 1. 스트래티지 패턴
·
Programming/디자인 패턴
결론부터 말하자면 스트래티지 패턴은 객체와, 객체가 가지는 행동들을 따로 분리해 놓는것이다. 이해를 쉽게 하기 위해 롤을 예시로 들어보자. 롤에는 바론, 용, 바위게, 두꺼비등의 여러가지 몬스터 종류가 있다. 각 몬스터들이 가지고있는 특성으로는 1. 챔피언을 공격할 수도 있고, 공격하지 못할 수도 있다. 2. 공격받지 않는 동안 보여주는 애니메이션이 무조건 존재한다 (Idle) 3. 챔피언이 CC기를 사용했을 때, 영향을 받을 수도 있고, 안 받을 수도 있다. 이 세가지 특성만 일단 생각해보고 Monster 클래스를 생각해보자. abstract Class Monster { public abstract void Attack(); public abstract void GotCC(); public void O..
[디자인 패턴] 디자인 패턴이란?
·
Programming/디자인 패턴
디자인 패턴 코딩을 하다보면 자연스럽게 디자인 패턴에 대해 한번쯤은 들어본 적이 있을 것이다. 몇년전에 들을때마다 이렇게 코드를 짰더니 좋더라~ 저렇게 코드를 짰더니 보기 편하더라~ 음 그렇구나 하는 느낌으로 그런게 있는가 보다 하고 넘어갔었는데 점점 코드를 짤 일이 많아지고 프로젝트가 무거워지면서 자발적으로 다시 디자인 패턴에 대해 공부할 필요성을 느끼기 시작한다. 디자인 패턴에 대해 공부할 필요성을 느끼지 못하는 사람들은 엄청난 천재이거나 제대로 된 프로젝트를 해보지 않은 사람이라고 생각한다. 디자인 패턴이란, 쉽게 말해 코드를 효율적으로 짜는 방법이다. 여기서 말하는 효율적이란, 성능상의 효율적이라기 보다는 유지보수, 가독성, 협업 등의 효율이라고 생각하면 되겠다. 언어, 프레임워크에 거의 관계없는..