SlideShare una empresa de Scribd logo
1 de 21
Data Oriented Design
 
[object Object],[object Object],[object Object],[object Object],병렬화를 하여 성능을 끌어올리자 !
그러나 .... 병렬화를 해도 엄청난 노력이 필요하다 . 성능향상도 동기화 부분에서 많이 까먹게 된다 . 코드도 복잡해진다 ! 버그도 생겨난다 !!! 더 이상 건드리기가 싫어진다 ㅠㅠ
[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],프로그래머의 오래된 관습 , OOP 가 문제일 수도 있다 !!
너무나도 개발자들 사이에서 깊숙히 뿌리 내린  OOP. 도저히 오브젝트를 빼 놓는다는 것은 생각조차 힘들다 . OOP 를 안쓴다고 쳐도 대안은 있는가 ?
너무나도 개발자들 사이에서 깊숙히 뿌리 내린  OOP. 도저히 오브젝트를 빼 놓는다는 것은 생각조차 힘들다 . OOP 를 안쓴다고 쳐도 대안은 있는가 ? DOD(Data Oriented Design) 은 이러한 어려운  문제를 해결 할 수 있는 다른 방식의 접근이다 . DOD 는  DDD(Data Driven Design) 과 다르다 . 데이터 주도형 디자인은 게임의 기능을 최대한 코드 밖으로 빼내서 데이터쪽으로 옮기는 것을 의미한다 . 
이상적인 데이터 데이터 관점에서의 이상적인 데이터 ?  그게 뭐야 ?
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
오브젝트를 생각하게 되면 ,  여러가지 형태의 트리들이  떠오른다 .  상속트리 ,  트리식 포함관계 ,  메시지 전달 트리구조 , 그리고 자연스럽게 데이터는 트리형태로 정렬된다 . 그 결과 어떤 오브젝트에 대한 연산을 수행하게 되면 ,  트리상에 엮인 다른 오브젝트를 액세스 하게 된다 .  한 묶음의 오브젝트를 처리하다보면 트리구조를 따라 각각의 오브젝트에 대해 서로 다른 연산을 수행하게 된다 .
[object Object],[object Object],[object Object],[object Object]
DOD 가 왜 강력한데 ? 게임에서는 하나의 오브젝트가 아닌 다수의 오브젝트가 있으며  OOP 에서는 오브젝트 위주로 처리를 하는 반면 , DOD 는 하드웨어의 특성을 살려서 데이터를 같은 타입끼리 복수개를 묶게 된다 .
DOD 의 장점 1.  병렬화 (Parallelization) OOP 코드의 병렬화는 어렵고 ,  실수하기 쉽고 ,  효율이 오르지  않을 수도 있다 . 여러개의 스레드에서 데이터에 접근할 때 생기는 Race Condition 을 막기 위해 동기화를 여기저기 붙이다 보면 스레드들은 락을 기다리느라 대기하는 시간이 길어지며 성능이 떨어진다 . DOD 는 병렬화는 간단해지며 ,  입력데이터와 그것을 처리할 작은 함수들 ,  출력데이터를 갖게된다 .  이런 작업은 여러개의 스레드에 쉽게 나눌 수 있으며 동기화도 별로 필요하지 않다 .  이 방식은 병렬 프로세서에서 실행시키는 것도 어렵지 안다 .
DOD 의 장점 2.  캐쉬 활용 ( Cache Utilization) 최신 다단계 캐쉬로 설계된 하드웨어의 성능을 최대한 끌어올리는 핵심은 캐쉬 친화적인 메모리 액세스다 . OOP 에서는 최적화를 하는데 있어 알고리즘을 바꾸거나 , C 코드를 어셈블리어로 바꾸거나 함수호출의 순서를 바꾸는 정도인데 , DOD 에서는  Cache miss 를 방지하면서 더 빠른 처리가 가능하도록 한다 .
DOD 의 장점 3.  모듈화 (Modularity) DOD 는 성능에도 도움이 되지만 ,  개발의 편이에도 도움이 된다 .  코드를 데이터 변환이라는 관점에서 작성하게 되면 ,  결국 ,  서로 의존성이 많지 않은 작은 함수들로 만들게 되고 ,  결국 코드들은 평평하고 (flat)  의존성이 별로 없는 함수들의 모음이 된다 .  이런 모듈화는 이해하기 쉽고 ,  바꾸거나 고치기 쉬운 코드들이 된다 .
DOD 의 장점 4.  테스트  (Testing) 오브젝트의 상호작용에 대한 유짓 테스트를 만드는 것은 쉽지 않은 일이다 .  모의 객체를 세팅하고 간접적인 방법들을 써야한다 .  너무 고생스럽다 . 반면 데이터를 직접 다루게 되면 유닛 테스트를 짜는 것은 간단해진다 . TDD 를 하는 중이건 ,  개발이 끝난 후에 테스트를 만드는 것이건 코드가 아주 테스트하기 편해진다 .
그러나 단점도 있다 !! 여태까지 좋다면서 뭐가 문제야 !!
문제점은 ... 지금까지 해오던 설계방법에 비해 너무 생소한다 . 적응하기까지 시간이 걸릴 수도 있다 . 프로그램 짜는 방식을 전환하기 때문에 상당한 연습이 필요하다 .
그럼  OOP 는 필요 없나 ?? OOP 는 중요하다 . OOP 의 개념을 완전히 버릴 수는 없고 , 다만 우리가 노력해야 할 부분은 대용량의 데이터를 처리할때 , DOD 관점에서 생각해보고 어떻게 적용해야하나 이다 . 이것이 현재 개발자들이 고민하고 풀어야할 숙제이다 .
Fin.

Más contenido relacionado

Destacado

It's Christmas Time (Paintings)
It's Christmas Time (Paintings)It's Christmas Time (Paintings)
It's Christmas Time (Paintings)Makala (D)
 
Art in Art,1... Music, Dance, Painting
Art in Art,1... Music, Dance, PaintingArt in Art,1... Music, Dance, Painting
Art in Art,1... Music, Dance, PaintingMakala (D)
 
Infection control risk assessment
Infection control risk assessmentInfection control risk assessment
Infection control risk assessmentKhusnul Khatimah
 
เศรษฐกิจไทย...ใครๆก็เข้าใจได้
เศรษฐกิจไทย...ใครๆก็เข้าใจได้เศรษฐกิจไทย...ใครๆก็เข้าใจได้
เศรษฐกิจไทย...ใครๆก็เข้าใจได้Ake Saroj
 
Innovatiesteun voor uw bedrijf
Innovatiesteun voor uw bedrijfInnovatiesteun voor uw bedrijf
Innovatiesteun voor uw bedrijfinnovatiecentra
 
Polymer入門
Polymer入門 Polymer入門
Polymer入門 Y OCHI
 
航海王電子書
航海王電子書航海王電子書
航海王電子書東偉 蘇
 
Secrets for Growing Conference Sponsorship Revenues
Secrets for Growing Conference Sponsorship RevenuesSecrets for Growing Conference Sponsorship Revenues
Secrets for Growing Conference Sponsorship RevenuesDonna Kastner
 
Florida-Jack & Brendan
Florida-Jack & BrendanFlorida-Jack & Brendan
Florida-Jack & Brendanklei8103
 
Farsi in quattro n 4 maggio 2010
Farsi in quattro n 4  maggio 2010Farsi in quattro n 4  maggio 2010
Farsi in quattro n 4 maggio 2010giorgiocorradi
 

Destacado (14)

It's Christmas Time (Paintings)
It's Christmas Time (Paintings)It's Christmas Time (Paintings)
It's Christmas Time (Paintings)
 
Art in Art,1... Music, Dance, Painting
Art in Art,1... Music, Dance, PaintingArt in Art,1... Music, Dance, Painting
Art in Art,1... Music, Dance, Painting
 
Infection control risk assessment
Infection control risk assessmentInfection control risk assessment
Infection control risk assessment
 
Book2
Book2Book2
Book2
 
Presentation1
Presentation1Presentation1
Presentation1
 
เศรษฐกิจไทย...ใครๆก็เข้าใจได้
เศรษฐกิจไทย...ใครๆก็เข้าใจได้เศรษฐกิจไทย...ใครๆก็เข้าใจได้
เศรษฐกิจไทย...ใครๆก็เข้าใจได้
 
Innovatiesteun voor uw bedrijf
Innovatiesteun voor uw bedrijfInnovatiesteun voor uw bedrijf
Innovatiesteun voor uw bedrijf
 
Bản tin Hoa Sen
Bản tin Hoa Sen Bản tin Hoa Sen
Bản tin Hoa Sen
 
Polymer入門
Polymer入門 Polymer入門
Polymer入門
 
航海王電子書
航海王電子書航海王電子書
航海王電子書
 
Young Adult Ministry
Young Adult MinistryYoung Adult Ministry
Young Adult Ministry
 
Secrets for Growing Conference Sponsorship Revenues
Secrets for Growing Conference Sponsorship RevenuesSecrets for Growing Conference Sponsorship Revenues
Secrets for Growing Conference Sponsorship Revenues
 
Florida-Jack & Brendan
Florida-Jack & BrendanFlorida-Jack & Brendan
Florida-Jack & Brendan
 
Farsi in quattro n 4 maggio 2010
Farsi in quattro n 4  maggio 2010Farsi in quattro n 4  maggio 2010
Farsi in quattro n 4 maggio 2010
 

Similar a Data oriented design

[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java유리 하
 
객체지향이란? - <객체지향의 사실과 오해>를 읽고
객체지향이란? - <객체지향의 사실과 오해>를 읽고객체지향이란? - <객체지향의 사실과 오해>를 읽고
객체지향이란? - <객체지향의 사실과 오해>를 읽고HeechanLee6
 
HolubOnPatterns/chapter2_1
HolubOnPatterns/chapter2_1HolubOnPatterns/chapter2_1
HolubOnPatterns/chapter2_1정환 임
 
Holub on-patterns-2-1
Holub on-patterns-2-1Holub on-patterns-2-1
Holub on-patterns-2-1정환 임
 
[NEXT] Android 개발 경험 프로젝트 3일차 (Database)
 [NEXT] Android 개발 경험 프로젝트 3일차 (Database) [NEXT] Android 개발 경험 프로젝트 3일차 (Database)
[NEXT] Android 개발 경험 프로젝트 3일차 (Database)YoungSu Son
 
HolubOnPatterns/chapter1_2
HolubOnPatterns/chapter1_2HolubOnPatterns/chapter1_2
HolubOnPatterns/chapter1_2stupidfox
 
Sql 중심 코드 탈피 발표자료
Sql 중심 코드 탈피 발표자료Sql 중심 코드 탈피 발표자료
Sql 중심 코드 탈피 발표자료ssuser776e2d
 
Oop (객체지향이란)?
Oop (객체지향이란)?Oop (객체지향이란)?
Oop (객체지향이란)?철운 장
 
보다 나은 웹 어플리케이션 설계
보다 나은 웹 어플리케이션 설계보다 나은 웹 어플리케이션 설계
보다 나은 웹 어플리케이션 설계Eb Styles
 
깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)Jay Park
 
Sql 중심 코드 탈피
Sql 중심 코드 탈피Sql 중심 코드 탈피
Sql 중심 코드 탈피ssuser776e2d
 
131 deview 2013 yobi-채수원
131 deview 2013 yobi-채수원131 deview 2013 yobi-채수원
131 deview 2013 yobi-채수원NAVER D2
 
병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임codenavy
 
유니티3D 그리고 웹통신
유니티3D 그리고 웹통신유니티3D 그리고 웹통신
유니티3D 그리고 웹통신현욱 김
 
Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Dong Chan Shin
 
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기Ahreum Kim
 
객체지향 단어가 의미하는 것
객체지향 단어가 의미하는 것객체지향 단어가 의미하는 것
객체지향 단어가 의미하는 것jaypi Ko
 
Windows system - memory개념잡기
Windows system - memory개념잡기Windows system - memory개념잡기
Windows system - memory개념잡기ChangKyu Song
 

Similar a Data oriented design (20)

[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java
 
객체지향이란? - <객체지향의 사실과 오해>를 읽고
객체지향이란? - <객체지향의 사실과 오해>를 읽고객체지향이란? - <객체지향의 사실과 오해>를 읽고
객체지향이란? - <객체지향의 사실과 오해>를 읽고
 
HolubOnPatterns/chapter2_1
HolubOnPatterns/chapter2_1HolubOnPatterns/chapter2_1
HolubOnPatterns/chapter2_1
 
Holub on-patterns-2-1
Holub on-patterns-2-1Holub on-patterns-2-1
Holub on-patterns-2-1
 
[NEXT] Android 개발 경험 프로젝트 3일차 (Database)
 [NEXT] Android 개발 경험 프로젝트 3일차 (Database) [NEXT] Android 개발 경험 프로젝트 3일차 (Database)
[NEXT] Android 개발 경험 프로젝트 3일차 (Database)
 
7 8 1
7 8 17 8 1
7 8 1
 
HolubOnPatterns/chapter1_2
HolubOnPatterns/chapter1_2HolubOnPatterns/chapter1_2
HolubOnPatterns/chapter1_2
 
Sql 중심 코드 탈피 발표자료
Sql 중심 코드 탈피 발표자료Sql 중심 코드 탈피 발표자료
Sql 중심 코드 탈피 발표자료
 
Oop (객체지향이란)?
Oop (객체지향이란)?Oop (객체지향이란)?
Oop (객체지향이란)?
 
보다 나은 웹 어플리케이션 설계
보다 나은 웹 어플리케이션 설계보다 나은 웹 어플리케이션 설계
보다 나은 웹 어플리케이션 설계
 
깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)
 
Sql 중심 코드 탈피
Sql 중심 코드 탈피Sql 중심 코드 탈피
Sql 중심 코드 탈피
 
131 deview 2013 yobi-채수원
131 deview 2013 yobi-채수원131 deview 2013 yobi-채수원
131 deview 2013 yobi-채수원
 
병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임
 
DDD 산책
DDD 산책DDD 산책
DDD 산책
 
유니티3D 그리고 웹통신
유니티3D 그리고 웹통신유니티3D 그리고 웹통신
유니티3D 그리고 웹통신
 
Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬
 
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
 
객체지향 단어가 의미하는 것
객체지향 단어가 의미하는 것객체지향 단어가 의미하는 것
객체지향 단어가 의미하는 것
 
Windows system - memory개념잡기
Windows system - memory개념잡기Windows system - memory개념잡기
Windows system - memory개념잡기
 

Más de Sangwook Kwon

Más de Sangwook Kwon (6)

부동소수점 문제
부동소수점 문제부동소수점 문제
부동소수점 문제
 
Shallwego
ShallwegoShallwego
Shallwego
 
C++11에서 주의해야할 것들
C++11에서 주의해야할 것들C++11에서 주의해야할 것들
C++11에서 주의해야할 것들
 
내가요즘하는건
내가요즘하는건내가요즘하는건
내가요즘하는건
 
유니티3D coroutine 활용
유니티3D coroutine 활용유니티3D coroutine 활용
유니티3D coroutine 활용
 
C++11
C++11C++11
C++11
 

Data oriented design

  • 2.  
  • 3.
  • 4. 그러나 .... 병렬화를 해도 엄청난 노력이 필요하다 . 성능향상도 동기화 부분에서 많이 까먹게 된다 . 코드도 복잡해진다 ! 버그도 생겨난다 !!! 더 이상 건드리기가 싫어진다 ㅠㅠ
  • 5.
  • 6.
  • 7. 너무나도 개발자들 사이에서 깊숙히 뿌리 내린 OOP. 도저히 오브젝트를 빼 놓는다는 것은 생각조차 힘들다 . OOP 를 안쓴다고 쳐도 대안은 있는가 ?
  • 8. 너무나도 개발자들 사이에서 깊숙히 뿌리 내린 OOP. 도저히 오브젝트를 빼 놓는다는 것은 생각조차 힘들다 . OOP 를 안쓴다고 쳐도 대안은 있는가 ? DOD(Data Oriented Design) 은 이러한 어려운  문제를 해결 할 수 있는 다른 방식의 접근이다 . DOD 는 DDD(Data Driven Design) 과 다르다 . 데이터 주도형 디자인은 게임의 기능을 최대한 코드 밖으로 빼내서 데이터쪽으로 옮기는 것을 의미한다 . 
  • 9. 이상적인 데이터 데이터 관점에서의 이상적인 데이터 ? 그게 뭐야 ?
  • 10.
  • 11. 오브젝트를 생각하게 되면 , 여러가지 형태의 트리들이  떠오른다 . 상속트리 , 트리식 포함관계 , 메시지 전달 트리구조 , 그리고 자연스럽게 데이터는 트리형태로 정렬된다 . 그 결과 어떤 오브젝트에 대한 연산을 수행하게 되면 , 트리상에 엮인 다른 오브젝트를 액세스 하게 된다 . 한 묶음의 오브젝트를 처리하다보면 트리구조를 따라 각각의 오브젝트에 대해 서로 다른 연산을 수행하게 된다 .
  • 12.
  • 13. DOD 가 왜 강력한데 ? 게임에서는 하나의 오브젝트가 아닌 다수의 오브젝트가 있으며 OOP 에서는 오브젝트 위주로 처리를 하는 반면 , DOD 는 하드웨어의 특성을 살려서 데이터를 같은 타입끼리 복수개를 묶게 된다 .
  • 14. DOD 의 장점 1. 병렬화 (Parallelization) OOP 코드의 병렬화는 어렵고 , 실수하기 쉽고 , 효율이 오르지  않을 수도 있다 . 여러개의 스레드에서 데이터에 접근할 때 생기는 Race Condition 을 막기 위해 동기화를 여기저기 붙이다 보면 스레드들은 락을 기다리느라 대기하는 시간이 길어지며 성능이 떨어진다 . DOD 는 병렬화는 간단해지며 , 입력데이터와 그것을 처리할 작은 함수들 , 출력데이터를 갖게된다 . 이런 작업은 여러개의 스레드에 쉽게 나눌 수 있으며 동기화도 별로 필요하지 않다 . 이 방식은 병렬 프로세서에서 실행시키는 것도 어렵지 안다 .
  • 15. DOD 의 장점 2. 캐쉬 활용 ( Cache Utilization) 최신 다단계 캐쉬로 설계된 하드웨어의 성능을 최대한 끌어올리는 핵심은 캐쉬 친화적인 메모리 액세스다 . OOP 에서는 최적화를 하는데 있어 알고리즘을 바꾸거나 , C 코드를 어셈블리어로 바꾸거나 함수호출의 순서를 바꾸는 정도인데 , DOD 에서는 Cache miss 를 방지하면서 더 빠른 처리가 가능하도록 한다 .
  • 16. DOD 의 장점 3. 모듈화 (Modularity) DOD 는 성능에도 도움이 되지만 , 개발의 편이에도 도움이 된다 . 코드를 데이터 변환이라는 관점에서 작성하게 되면 , 결국 , 서로 의존성이 많지 않은 작은 함수들로 만들게 되고 , 결국 코드들은 평평하고 (flat) 의존성이 별로 없는 함수들의 모음이 된다 . 이런 모듈화는 이해하기 쉽고 , 바꾸거나 고치기 쉬운 코드들이 된다 .
  • 17. DOD 의 장점 4. 테스트 (Testing) 오브젝트의 상호작용에 대한 유짓 테스트를 만드는 것은 쉽지 않은 일이다 . 모의 객체를 세팅하고 간접적인 방법들을 써야한다 . 너무 고생스럽다 . 반면 데이터를 직접 다루게 되면 유닛 테스트를 짜는 것은 간단해진다 . TDD 를 하는 중이건 , 개발이 끝난 후에 테스트를 만드는 것이건 코드가 아주 테스트하기 편해진다 .
  • 18. 그러나 단점도 있다 !! 여태까지 좋다면서 뭐가 문제야 !!
  • 19. 문제점은 ... 지금까지 해오던 설계방법에 비해 너무 생소한다 . 적응하기까지 시간이 걸릴 수도 있다 . 프로그램 짜는 방식을 전환하기 때문에 상당한 연습이 필요하다 .
  • 20. 그럼 OOP 는 필요 없나 ?? OOP 는 중요하다 . OOP 의 개념을 완전히 버릴 수는 없고 , 다만 우리가 노력해야 할 부분은 대용량의 데이터를 처리할때 , DOD 관점에서 생각해보고 어떻게 적용해야하나 이다 . 이것이 현재 개발자들이 고민하고 풀어야할 숙제이다 .
  • 21. Fin.