SlideShare une entreprise Scribd logo
1  sur  22
데브루키 – GPG 스터디
박민근
2010.03.27
1.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_Instance = NULL;}

    static CTextureMgr& GetInstance() {return *m_Instance;}
}

// 사용
CTextureMgr::GetInstance().Method();



하지만, 모든 싱글톤 클래스에 추가 코드가 들어가야 한다.
좀더 나은 방식
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을 계산해서 할당한다.

Contenu connexe

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

온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기
Seungjae Lee
 
에코노베이션 3차 세미나 교안 1st Edition.~
에코노베이션 3차 세미나 교안 1st Edition.~에코노베이션 3차 세미나 교안 1st Edition.~
에코노베이션 3차 세미나 교안 1st Edition.~
Lee Jungpyo
 
Game programming patterns
Game programming patternsGame programming patterns
Game programming patterns
QooJuice
 
게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴
MinGeun Park
 
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
devCAT Studio, NEXON
 
05_스마트 포인터 구현하기
05_스마트 포인터 구현하기05_스마트 포인터 구현하기
05_스마트 포인터 구현하기
noerror
 
레이더즈 기술 사례
레이더즈 기술 사례레이더즈 기술 사례
레이더즈 기술 사례
기룡 남
 
[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규
ChangKyu Song
 

Similaire à [Gpg1권 박민근] 1.0 1.4 요약 정리 (20)

7 8 1
7 8 17 8 1
7 8 1
 
[IGC2017] Protocol:hyperspace Diver 개발 포스트모템
[IGC2017] Protocol:hyperspace Diver 개발 포스트모템[IGC2017] Protocol:hyperspace Diver 개발 포스트모템
[IGC2017] Protocol:hyperspace Diver 개발 포스트모템
 
온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기
 
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
 
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
 
에코노베이션 3차 세미나 교안 1st Edition.~
에코노베이션 3차 세미나 교안 1st Edition.~에코노베이션 3차 세미나 교안 1st Edition.~
에코노베이션 3차 세미나 교안 1st Edition.~
 
Game programming patterns
Game programming patternsGame programming patterns
Game programming patterns
 
게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴
 
Macro for Game
Macro for GameMacro for Game
Macro for Game
 
entry를 이용한 코딩 교육1
entry를 이용한 코딩 교육1entry를 이용한 코딩 교육1
entry를 이용한 코딩 교육1
 
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
 
05_스마트 포인터 구현하기
05_스마트 포인터 구현하기05_스마트 포인터 구현하기
05_스마트 포인터 구현하기
 
메이크챗봇 자연어기초
메이크챗봇 자연어기초메이크챗봇 자연어기초
메이크챗봇 자연어기초
 
레이더즈 기술 사례
레이더즈 기술 사례레이더즈 기술 사례
레이더즈 기술 사례
 
[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규
 
모바일 해커톤 사전교육 2일차
모바일 해커톤 사전교육 2일차모바일 해커톤 사전교육 2일차
모바일 해커톤 사전교육 2일차
 
[데브루키] 이벤트 드리븐 아키텍쳐
[데브루키] 이벤트 드리븐 아키텍쳐[데브루키] 이벤트 드리븐 아키텍쳐
[데브루키] 이벤트 드리븐 아키텍쳐
 
에코노베이션 3차 세미나 교안
에코노베이션 3차 세미나 교안에코노베이션 3차 세미나 교안
에코노베이션 3차 세미나 교안
 
Akka actor model
Akka actor modelAkka actor model
Akka actor model
 
타입스크립트 잘 사용하기
타입스크립트 잘 사용하기타입스크립트 잘 사용하기
타입스크립트 잘 사용하기
 

Plus de MinGeun Park

Plus de MinGeun Park (20)

[CSStudy] 코딩인터뷰 완전 분석 #7.pdf
[CSStudy] 코딩인터뷰 완전 분석 #7.pdf[CSStudy] 코딩인터뷰 완전 분석 #7.pdf
[CSStudy] 코딩인터뷰 완전 분석 #7.pdf
 
[Cs study] 코딩인터뷰 완전 분석 #6
[Cs study] 코딩인터뷰 완전 분석 #6[Cs study] 코딩인터뷰 완전 분석 #6
[Cs study] 코딩인터뷰 완전 분석 #6
 
[Cs study] 코딩인터뷰 완전 분석 #5
[Cs study] 코딩인터뷰 완전 분석 #5[Cs study] 코딩인터뷰 완전 분석 #5
[Cs study] 코딩인터뷰 완전 분석 #5
 
[Cs study] 코딩인터뷰 완전 분석 #3
[Cs study] 코딩인터뷰 완전 분석 #3[Cs study] 코딩인터뷰 완전 분석 #3
[Cs study] 코딩인터뷰 완전 분석 #3
 
[Cs study] 코딩인터뷰 완전 분석 #2
[Cs study] 코딩인터뷰 완전 분석 #2[Cs study] 코딩인터뷰 완전 분석 #2
[Cs study] 코딩인터뷰 완전 분석 #2
 
[Cs study] 코딩인터뷰 완전 분석
[Cs study] 코딩인터뷰 완전 분석[Cs study] 코딩인터뷰 완전 분석
[Cs study] 코딩인터뷰 완전 분석
 
[데브루키_언리얼스터디_0525] 애니메이션 노티파이
[데브루키_언리얼스터디_0525] 애니메이션 노티파이[데브루키_언리얼스터디_0525] 애니메이션 노티파이
[데브루키_언리얼스터디_0525] 애니메이션 노티파이
 
[데브루키 언리얼 스터디] PBR
[데브루키 언리얼 스터디] PBR[데브루키 언리얼 스터디] PBR
[데브루키 언리얼 스터디] PBR
 
[데브루키 언리얼 스터디] 스터디 안내 OT
[데브루키 언리얼 스터디] 스터디 안내 OT[데브루키 언리얼 스터디] 스터디 안내 OT
[데브루키 언리얼 스터디] 스터디 안내 OT
 
[데브루키/페차쿠차] 유니티 프로파일링에 대해서 알아보자.
[데브루키/페차쿠차] 유니티 프로파일링에 대해서 알아보자.[데브루키/페차쿠차] 유니티 프로파일링에 대해서 알아보자.
[데브루키/페차쿠차] 유니티 프로파일링에 대해서 알아보자.
 
[데브루키] Color space gamma correction
[데브루키] Color space gamma correction[데브루키] Color space gamma correction
[데브루키] Color space gamma correction
 
유니티 팁&트릭 Unity Tip & Trick
유니티 팁&트릭 Unity Tip & Trick유니티 팁&트릭 Unity Tip & Trick
유니티 팁&트릭 Unity Tip & Trick
 
Live2D with Unity - 그녀들을 움직이게 하는 기술 (알콜코더 박민근)
Live2D with Unity - 그녀들을 움직이게 하는 기술 (알콜코더 박민근)Live2D with Unity - 그녀들을 움직이게 하는 기술 (알콜코더 박민근)
Live2D with Unity - 그녀들을 움직이게 하는 기술 (알콜코더 박민근)
 
[RAPA/C++] 1. 수업 내용 및 진행 방법
[RAPA/C++] 1. 수업 내용 및 진행 방법[RAPA/C++] 1. 수업 내용 및 진행 방법
[RAPA/C++] 1. 수업 내용 및 진행 방법
 
[Unite17] 유니티에서차세대프로그래밍을 UniRx 소개 및 활용
[Unite17] 유니티에서차세대프로그래밍을 UniRx 소개 및 활용 [Unite17] 유니티에서차세대프로그래밍을 UniRx 소개 및 활용
[Unite17] 유니티에서차세대프로그래밍을 UniRx 소개 및 활용
 
유니티의 툰셰이딩을 사용한 3D 애니메이션 표현
유니티의 툰셰이딩을 사용한 3D 애니메이션 표현유니티의 툰셰이딩을 사용한 3D 애니메이션 표현
유니티의 툰셰이딩을 사용한 3D 애니메이션 표현
 
[데브루키160409 박민근] UniRx 시작하기
[데브루키160409 박민근] UniRx 시작하기[데브루키160409 박민근] UniRx 시작하기
[데브루키160409 박민근] UniRx 시작하기
 
[160404] 유니티 apk 용량 줄이기
[160404] 유니티 apk 용량 줄이기[160404] 유니티 apk 용량 줄이기
[160404] 유니티 apk 용량 줄이기
 
[160402_데브루키_박민근] UniRx 소개
[160402_데브루키_박민근] UniRx 소개[160402_데브루키_박민근] UniRx 소개
[160402_데브루키_박민근] UniRx 소개
 
[150523] live2d 그녀들을 움직이게 하는 기술
[150523] live2d 그녀들을 움직이게 하는 기술[150523] live2d 그녀들을 움직이게 하는 기술
[150523] live2d 그녀들을 움직이게 하는 기술
 

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

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