데브루키 – GPG 스터디박민근2010.03.271.0 데이터 주도적 설계의 마법1.1 객체 지향적 프로그래밍과 설계 기법1.3 자동적인 단일체 유틸리티
1.0 데이터 주도적 설계의 마법
기본 Data Driven Design 게임 데이터는 당연히 코드 외부에서 로드  되어야 한다. 개발중에는 XML과 같은 텍스트 파일로 작  업하고, 실제 배포시에는 이진 파일을 사용  한다. 개발중에는 텍스트 ...
최소한의 원칙 상수들을 하드코딩해서는 안된다!!
하드코딩을 아예 없애라 “아예 없애라” – 농담이 아님 기획자와 디자이너가 프로그래머 자리에 오 지 않도록 만들어라 게임을 데이터를 최대한 추상화 시켜라!
게임의 흐름은 스크립트로 제어할것 연출, 이벤트의 발생 조건, 원인 – 결과 로직, 퀘스트 등은 스크립트로 제어 적절한 스크립트 언어를 선택하라. 이왕이 면 컴파일 가능한 스크립트 언어로
스크립트 남용의 해악 게임 디자이너가 스크립트 작성자가 게임 프로 그래밍을 하도록 해서는 안된다 – 스크립트의 비율이 프로그래밍보다 많아지면 안된다 과유불급 스크립트는 C++보다 디버깅이 어렵다
데이터의 중복을 피해라 여러곳에 사용되는 데이터를 하나로 모아라 데이터에 상속 구조를 적용해 보아라.
데이터를 만들어 내는 도구를 작성할 것 텍스트 파일이 작성하기에 너무 큰경우, 툴 을 만드는 것이 훨씬 효율적이다.
좋은 예제 워크래프트 3 – 맵툴 스타크래프트 – 유즈맵 WoW – 플러그인, UI
1.1 객체 지향적 프로그래밍과 설계 기법
코딩 스타일 헝가리언 표기법 제일 중요한것은 팀내에 코딩 규약을 반드 시 정해야 하고, 그 규약에 통일된 코딩을 해 야만 한다!
클래스 설계 통일된 매서드의 명명 규칙을 사용한다. 생성자와 소멸자에서 생성/소멸 메소드를 호출하는 구조로 작성하면 유연성이 높아진 다.
클래스 계통 구조의 설계 포함과 상속을 사용할 곳을 정확히 구별해  야 한다. Is – a 관계가 성립되지 않는 다면, 무조건 포  함을 사용해야 한다. 포함을 사용할곳에 단지 편의를 위해서 상  속을 사용하면 안...
설계 패턴들 싱글톤 패턴 퍼사드 패턴 상태 패턴 (FSM) 팩토리 패턴
1.3 자동적인 단일체 유틸리티
싱글톤의 정의 클래스의 인스턴스가 단 하나만 존재하는 것을 보장 전역 객체 처럼 사용 할 수 있음 매니저 클래스들, 리소스 관리 클래스등, 사운 드 관리, 게임 프레임워크 등 전반적으로 사용
싱글톤의 장점 코드의 가독성 관점에서 명료하다 전역 객체처럼 간단히 사용할 수 있다 객체의 생성, 접근, 해제 시점을 제어 할 수  있다.
일반 전역 객체와의 차이 전역 객체 – 생성, 해제, 접근 시점을 제어할 수 없다. 가독성이 떨어진다. 위험하다. 싱글톤 패턴은 위 문제를 해결할 수 있다.  원하는 시기에 생성/해제 할 수 있으며, 접근 함  수...
전통적인 해결책SingleTon& GetSingleTon(){  static T SingleTon;  return T;}생성 시점은 제어할 수 있지만,해제 시점은 제어할 수 없다.
더 나은 방식class CTextureMgr{  static CTextureMgr* m_Instance;public: CTextureMgr() {m_Instance = this;} ~CTextureMgr() {m_Ins...
좀더 나은 방식template<typename T>class ISingleTon{  static T* m_instance;public: ISingleTon() {   int offset = (int)(T*)1 - (in...
Upcoming SlideShare
Loading in …5
×

[Gpg1권 박민근] 1.0 1.4 요약 정리

1,000 views

Published on

  • Be the first to comment

[Gpg1권 박민근] 1.0 1.4 요약 정리

  1. 1. 데브루키 – GPG 스터디박민근2010.03.271.0 데이터 주도적 설계의 마법1.1 객체 지향적 프로그래밍과 설계 기법1.3 자동적인 단일체 유틸리티
  2. 2. 1.0 데이터 주도적 설계의 마법
  3. 3. 기본 Data Driven Design 게임 데이터는 당연히 코드 외부에서 로드 되어야 한다. 개발중에는 XML과 같은 텍스트 파일로 작 업하고, 실제 배포시에는 이진 파일을 사용 한다. 개발중에는 텍스트 파일을 사용해야 편집/ 수정이 가능하다.
  4. 4. 최소한의 원칙 상수들을 하드코딩해서는 안된다!!
  5. 5. 하드코딩을 아예 없애라 “아예 없애라” – 농담이 아님 기획자와 디자이너가 프로그래머 자리에 오 지 않도록 만들어라 게임을 데이터를 최대한 추상화 시켜라!
  6. 6. 게임의 흐름은 스크립트로 제어할것 연출, 이벤트의 발생 조건, 원인 – 결과 로직, 퀘스트 등은 스크립트로 제어 적절한 스크립트 언어를 선택하라. 이왕이 면 컴파일 가능한 스크립트 언어로
  7. 7. 스크립트 남용의 해악 게임 디자이너가 스크립트 작성자가 게임 프로 그래밍을 하도록 해서는 안된다 – 스크립트의 비율이 프로그래밍보다 많아지면 안된다 과유불급 스크립트는 C++보다 디버깅이 어렵다
  8. 8. 데이터의 중복을 피해라 여러곳에 사용되는 데이터를 하나로 모아라 데이터에 상속 구조를 적용해 보아라.
  9. 9. 데이터를 만들어 내는 도구를 작성할 것 텍스트 파일이 작성하기에 너무 큰경우, 툴 을 만드는 것이 훨씬 효율적이다.
  10. 10. 좋은 예제 워크래프트 3 – 맵툴 스타크래프트 – 유즈맵 WoW – 플러그인, UI
  11. 11. 1.1 객체 지향적 프로그래밍과 설계 기법
  12. 12. 코딩 스타일 헝가리언 표기법 제일 중요한것은 팀내에 코딩 규약을 반드 시 정해야 하고, 그 규약에 통일된 코딩을 해 야만 한다!
  13. 13. 클래스 설계 통일된 매서드의 명명 규칙을 사용한다. 생성자와 소멸자에서 생성/소멸 메소드를 호출하는 구조로 작성하면 유연성이 높아진 다.
  14. 14. 클래스 계통 구조의 설계 포함과 상속을 사용할 곳을 정확히 구별해 야 한다. Is – a 관계가 성립되지 않는 다면, 무조건 포 함을 사용해야 한다. 포함을 사용할곳에 단지 편의를 위해서 상 속을 사용하면 안된다!! 상속보다는 포함이 낫다 (래핑)
  15. 15. 설계 패턴들 싱글톤 패턴 퍼사드 패턴 상태 패턴 (FSM) 팩토리 패턴
  16. 16. 1.3 자동적인 단일체 유틸리티
  17. 17. 싱글톤의 정의 클래스의 인스턴스가 단 하나만 존재하는 것을 보장 전역 객체 처럼 사용 할 수 있음 매니저 클래스들, 리소스 관리 클래스등, 사운 드 관리, 게임 프레임워크 등 전반적으로 사용
  18. 18. 싱글톤의 장점 코드의 가독성 관점에서 명료하다 전역 객체처럼 간단히 사용할 수 있다 객체의 생성, 접근, 해제 시점을 제어 할 수 있다.
  19. 19. 일반 전역 객체와의 차이 전역 객체 – 생성, 해제, 접근 시점을 제어할 수 없다. 가독성이 떨어진다. 위험하다. 싱글톤 패턴은 위 문제를 해결할 수 있다.  원하는 시기에 생성/해제 할 수 있으며, 접근 함 수를 통해서 접근 시점을 제어할 수 있다.
  20. 20. 전통적인 해결책SingleTon& GetSingleTon(){ static T SingleTon; return T;}생성 시점은 제어할 수 있지만,해제 시점은 제어할 수 없다.
  21. 21. 더 나은 방식class CTextureMgr{ static CTextureMgr* m_Instance;public: CTextureMgr() {m_Instance = this;} ~CTextureMgr() {m_Instance = NULL;} static CTextureMgr& GetInstance() {return *m_Instance;}}// 사용CTextureMgr::GetInstance().Method();하지만, 모든 싱글톤 클래스에 추가 코드가 들어가야 한다.
  22. 22. 좀더 나은 방식template<typename T>class ISingleTon{ static T* m_instance;public: ISingleTon() { int offset = (int)(T*)1 - (int)(ISingleTon<T>*)(T*)1; m_instance = (T*)((int)this + offset); } ~ISingleTon() {m_instance = NULL;} static T& GetSingleton() {return *m_instance;}}템플릿을 상속 받아 하위 클래스에서 자동으로 싱글톤이 생성되게 한다.다중 상속 구조가 되는 경우가 있기 때문에 Offset을 계산해서 할당한다.

×