More Related Content Similar to 조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012 Similar to 조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012 (20) More from devCAT Studio, NEXON More from devCAT Studio, NEXON (20) 조정훈, 게임 프로그래머를 위한 클래스 설계, NDC20122. 발표자
조정훈
@blindex99
2003 ~ 마비노기
~ 2012 마비노기2
8. KISS
Keep It Simple, Stupid
- 간결함은 미덕이다
- 오컴의 면도날
간결하게 만들어야 그걸로
복잡한걸 만들지 이 멍청아! ‚Kelly‛ Johnson
Skunkworks Lead Engineer
10. DRY
Don’t Repeat Yourself
- Once And Only Once
- Rules Of Three
Three or more?
Charles Petzold
Use a for! Microsoft Most Valuable Professianal
12. HCLC
High Cohesion Louse Coupling
- 높은 응집도, 낮은 결합도
- 비슷한 것들은 뭉쳐 있어야 한다
- 서로의 의존도는 낮아야 한다
Is It Good Programming? Larry Constantine
Check Cohesion & Coupling Writer of ‚Structured Design‛
13. 연관된 기능을 하는 객체들은 가까울수록 좋다
시간적, 공간적, 논리적 측면에서 모두
19. 하나의 객체는 하나의 책임을 가짂다
- 그 하나의 책임에 의해서만 변경된다
- GRASP
General
Responsibility
Assignment
Software
Pattern
君君臣臣父父子子
20. GOD OBJECT
- 전지 전능한 객체 - MONSTER OBJECT
모든 것에 접근, 수정 가능하다 비대해져서 수정이 어려운 객체
23. 산탄총 수술
- 하나의 수정 사항이 여러 모듈에 영향을 미침
- 단순한 기능을 고치는데 여러 파일을 수정해야 한다면 의심해보자
새로 사는게 싸겠는데요?
24. 컴포넌트 시스템
최소의존 게임 컴포넌트 시스템
NDC2009 - 조정훈
26. 확장에는 열려있고, 변경에는 닫혀있다
- 모듈의 수정 없이 기능 확장 가능
- 인터페이스는 임의로 변경할수 없다
- 변경은 오류를 수정할때만
- 확장은 새 클래스로 구현한다
30. 에러 리포트 시스템
- Assert
- Throw Exception
- Error Mail
- DB/File Log
- Dialog Box
34. 객체는 부모 객체를 대체가능해야 한다
Derived Class ‘is-a’ Base Class
Barbara Liskov
First Woman Ph.D in CS
MIT Professor
Turing Award Winner
35. Bag is-an Inventory
- 많은 부분이 동일하다
- Bag은 Inventory의 특수한 형태
- 통상 Inventory를 먼저 구현한다
Bag은 Inventory를 상속한다 World of Warcraft
Blizzard
37. Bag in the Bag
- 인벤토리는 가방을 수납할수 있다
- 따라서 가방안에 가방을 넣을수 있다
인벤토리는 무한하다
Infinite box
rumo_der_wolperdinger
38. Bag is not an Inventory (LSP)
- 인벤토리와 가방은 상속관계여선 안된다
40. 인터페이스는 서로 격리되어야 한다
- 객체는 사용하지 않는 인터페이스의 영향을 받아서는 안된다
- 필요 인터페이스만 사용 가능해야한다
- 미사용 인터페이스는 구현하지 않는다
41. 몬스터 집단 행동
- 몬스터는 동료 몬스터를 도와준다
- SRP 원칙은 준수
- SRP = ISP ?
45. 상위 객체는 하위 객체를 몰라야 한다
- 의존성 순환이 벌어지면 안된다
- 추상화 인터페이스를 이용한다
- A Knows B
- B Knows A (X)
- B Knows Abstract A (O)
46. 게임 로직 & 렌더러
- GameLogic Render to Renderer
- Render GetRenderObjects from GameLogic
- GameLogic knows Renderer
- Renderer knows GameLogic
47. 게임 로직 & 더미 렌더러
- 더미 클라이언트
- 성능을 위해 간략한 버전의 렌더러를 작성
- 렌더러가 변경되면 더미 렌더러도 변경해줘야 한다
49. Inversion Of Control
- 복수개 또는 0개의 렌더러가 등록되어야 한다면?
- Callback, Event Handler
- GameLogic Doesn’t know IRenderer
52. References
- SOLID Development Principles – In Motivational Pictures
http://lostechies.com/derickbailey/2009/02/11/solid-development-principles-in-motivational-pictures
- Agile Code Design
http://www.planetgeek.ch/2011/07/08/presentation-agile-code-design-how-to-keep-your-code-flexible/
- Is your design SOLID?
http://blogs.globallogic.com/is-your-design-solid
- 객체지향 SW 설계의 원칙
http://www.zdnet.co.kr
- Wikipedia
http://wikipedia.org