2016년 5월 25일 수요일

객체지향(OOP), 데이터 지향(DOD) 그리고 동시성

게임 프로그래밍을 하면서 가장 많이 듣는 용어들이지만, 제대로 정리해 본 적이 없다. 이번 기회에 좀 더 심도 깊게 알아본다.
  1. 객체 지향 프로그래밍(OOP)
  2. 데이터 지향 설계(DOD)
  3. 동시성
  먼저, OOP는 시스템에 대한 이해와 변경에 중심을 둔다. SOLID원칙과 UnitTest를 기반으로 하면, 이해하기 쉬우면서 변경에 안정적인 프로그래밍을 할 수 있다. 하지만, OOP를 할 수록 성능에 대한 두려움을 떨치기가 힘들다. 막연하게 Big-O 정도만 고려하면서 작업을 한다.
  DOD는 현재 컴퓨터의 성능 병목이 CPU와 메모리에서 발생하는 것에 주목한다. 그래서, 캐쉬 친화적인 설계에 중심을 둔다. 반복적으로 사용되는 메모리를 선형적인 배열에 두고 처리할 수 있도록 설계를 한다.
  Concurrency Data Design(CDD)는 데이터의 응답 속도에 중심을 둔다. 데이터에 대한 요청이 얼마나 빨리 이뤄져야 하는지를 기반으로 설계를 한다.

결론

제대로 돌아가게 만들고, 최적화는 나중에 한다는 실천법을 적용해보면, OOP를 통해서 시스템을 제대로 돌아가고 이해하기 쉽게 만들고, DOD를 적용하여 성능을 최적화 한다. 그리고 나서 CDD를 통해서 빠른 응답이 필요한 데이터를 추려내는 것이 합리적인 방법이다.
  물론, 어떤 설계는 초기에 결정하지 않으면 변경하기 어려울 수 있다. 그런 부분은 미리 DOD나 CDD를 반영하자. 하지만, 20/80처럼 모든 부분에 적용할 필요는 없다.

참고자료