Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

9장10장,stl abstract interface

1,021 views

Published on

  • Be the first to comment

  • Be the first to like this

9장10장,stl abstract interface

  1. 1. Track ::<br />알고리즘과 고급 토픽<br />9장 |STL 고급<br />각 개체들의 효율적인 연결 방법<br />10장 | 추상 인터페이스<br />http://raimsoft.com<br />DreamexecutionWarrock Client team Choi Jun Hyeok<br />http://dreamexe.co.kr<br />
  2. 2. Track ::<br />알고리즘과 고급 토픽<br />9장 |STL 고급<br />각 개체들의 효율적인 연결 방법<br />10장 | 추상 인터페이스<br />http://raimsoft.com<br />DreamexecutionWarrock Client team Choi Jun Hyeok<br />http://dreamexe.co.kr<br />
  3. 3. Track ::<br />알고리즘과 고급 토픽<br />9장 |STL 고급<br />Functor?<br />Functor Adapter<br />Algorithm<br />String<br />http://raimsoft.com<br />DreamexecutionWarrock Client team Choi Jun Hyeok<br />http://dreamexe.co.kr<br />
  4. 4. Track ::<br />9장 |STL 고급<br />Functor?<br />Functor Adapter<br />Algorithm<br />String<br />http://raimsoft.com<br />DreamexecutionWarrock Client team Choi Jun Hyeok<br />http://dreamexe.co.kr<br />
  5. 5. Functor(함수자 또는 함수 객체)란?<br />-operator()를 연산자 오버로드 하고 있는 클래스의 객체-인자를 전달하는 과정의 편리함.<br />http://raimsoft.com<br />DreamexecutionWarrock Client team Choi Jun Hyeok<br />http://dreamexe.co.kr<br />
  6. 6. Track ::<br />9장 |STL 고급<br />Functor?<br />Functor Adapter<br />Algorithm<br />String<br />http://raimsoft.com<br />DreamexecutionWarrock Client team Choi Jun Hyeok<br />http://dreamexe.co.kr<br />
  7. 7. FunctorAdapter<br />-일반 함수, 함수 포인터, 함수자를 인자로 받아서<br /> 새로운 함수자를 생성한다.<br />http://raimsoft.com<br />DreamexecutionWarrock Client team Choi Jun Hyeok<br />http://dreamexe.co.kr<br />
  8. 8. Binder (bind1st, bind2nd)<br />이항 함수자를 단항 함수자로 변경<br />binder1st< less<int> > binder = bind1st(less<int>(), 10 );<br />// bind1st과 param2 비교 (L < R) ?<br /> cout << binder(5)<<endl;<br /> cout << less<int>()(10, 5)<< endl;<br /> cout << bind1st(less<int>(), 10 )(5)<<endl;<br />binder2nd< less<int> > binder= bind2nd(less<int>(), 5);<br />// param1과 bind2nd 비교 (L < R) ?<br /> cout << binder(10) << endl;<br /> cout << less<int>() (10, 5) << endl;<br /> cout << bind2nd(less<int>(), 5 )(10) << endl;<br />2nd<br />1st<br />Functor<br />http://raimsoft.com<br />DreamexecutionWarrock Client team Choi Jun Hyeok<br />http://dreamexe.co.kr<br />
  9. 9. Track ::<br />9장 |STL 고급<br />Functor?<br />Functor Adapter<br />Algorithm<br />String<br />http://raimsoft.com<br />DreamexecutionWarrock Client team Choi Jun Hyeok<br />http://dreamexe.co.kr<br />
  10. 10. Algorithm<br />-STL의 많은 부분이 알고리즘으로 구성되어 있다.<br />http://raimsoft.com<br />DreamexecutionWarrock Client team Choi Jun Hyeok<br />http://dreamexe.co.kr<br />
  11. 11. Algorithm (변형 불가)<br />:: Find<br />-모든 항목 사이를 반복하면서 항목을 찾음-규칙성이 없는 상황에만 사용하는 것이 좋다.<br />:: For_each<br />-컨테이너 각 요소에 대하여 특정 함수를 실행 (향상된 for문)<br />:: Count<br />-전체 요소 수를 알고자 할때는 size() 사용count는 특정 조건에 맞는 요소만 센다.<br />http://raimsoft.com<br />DreamexecutionWarrock Client team Choi Jun Hyeok<br />http://dreamexe.co.kr<br />
  12. 12. Track ::<br />9장 |STL 고급<br />Functor?<br />Functor Adapter<br />Algorithm<br />String<br />http://raimsoft.com<br />DreamexecutionWarrock Client team Choi Jun Hyeok<br />http://dreamexe.co.kr<br />
  13. 13. String<br />-STL내에 string클래스를 제공한다.<br />-필요에 따라 크기가 늘어난다.<br />:: 성능에 대한 고려<br />문자열 리터럴을 그대로 전달하는 과정의 복사 조심<br />http://raimsoft.com<br />DreamexecutionWarrock Client team Choi Jun Hyeok<br />http://dreamexe.co.kr<br />
  14. 14. String을 대신 할 수 있는 것들<br />Rope<br />-표준이 아닌 템플릿 클래스-rope< type, allocator><br />-아주 긴 문자열을 하나의 단위로 작업 가능 (작은 문자 비효율적)<br />CString<br />-MFC<br />STL과 호환 불가<br />Vector<char><br />-char 배열과 유사<br />-참조 카운팅 가능, CoW(Copy on Write)<br />http://raimsoft.com<br />DreamexecutionWarrock Client team Choi Jun Hyeok<br />http://dreamexe.co.kr<br />
  15. 15. Track ::<br />알고리즘과 고급 토픽<br />9장 |STL 고급<br />각 개체들의 효율적인 연결 방법<br />10장 | 추상 인터페이스<br />http://raimsoft.com<br />DreamexecutionWarrock Client team Choi Jun Hyeok<br />http://dreamexe.co.kr<br />
  16. 16. Track ::<br />알고리즘과 고급 토픽<br />9장 |STL 고급<br />각 개체들의 효율적인 연결 방법<br />10장 | 추상 인터페이스<br />http://raimsoft.com<br />DreamexecutionWarrock Client team Choi Jun Hyeok<br />http://dreamexe.co.kr<br />
  17. 17. Track ::<br />인터페이스?<br />격리 설계<br />팩토리 패턴<br />확장<br />10장 | 추상 인터페이스<br />http://raimsoft.com<br />DreamexecutionWarrock Client team Choi Jun Hyeok<br />http://dreamexe.co.kr<br />
  18. 18. Track ::<br />10장 | 추상 인터페이스<br />인터페이스?<br />격리 설계<br />팩토리 패턴<br />단점?<br />http://raimsoft.com<br />DreamexecutionWarrock Client team Choi Jun Hyeok<br />http://dreamexe.co.kr<br />
  19. 19. Interface 개념<br />-추상 인터페이스는 순수 가상 함수이다.<br />-추상 인터페이스는 껍데기이다.<br />http://raimsoft.com<br />DreamexecutionWarrock Client team Choi Jun Hyeok<br />http://dreamexe.co.kr<br />
  20. 20. Track ::<br />10장 | 추상 인터페이스<br />인터페이스?<br />격리 설계<br />팩토리 패턴<br />단점?<br />http://raimsoft.com<br />DreamexecutionWarrock Client team Choi Jun Hyeok<br />http://dreamexe.co.kr<br />
  21. 21. Interface ::격리 설계<br />예제> 다중 플랫폼(OpenGL, DirectX)에 구애받지 않는 설계(층 분리)<br />class IGraphicsRenderer<br />{<br /> virtual void Redner(…)= 0;<br />}<br />class Renderer_D3D : public IGraphicsRenderer<br />{<br /> virtual void Redner(…)= 0;<br />}<br />class Renderer_OGL : public IGraphicsRenderer<br />{<br /> virtual void ~Redner(…)= 0;<br />}<br />IGraphicsRenderer* g_pRenderer= new GraphicsRendererOGL();<br />= new GraphicsRendererD3D();<br />http://raimsoft.com<br />DreamexecutionWarrock Client team Choi Jun Hyeok<br />http://dreamexe.co.kr<br />
  22. 22. Track ::<br />10장 | 추상 인터페이스<br />인터페이스?<br />격리 설계<br />팩토리 패턴<br />단점?<br />http://raimsoft.com<br />DreamexecutionWarrock Client team Choi Jun Hyeok<br />http://dreamexe.co.kr<br />
  23. 23. Interface ::팩토리 패턴<br />격리 설계를 할 경우-> 헤더 파일의 크기<br />Interface<br />팩토리 패턴을 통한 완전한 분리<br />OGL<br />D3D<br />GraphicsRenderFactory<br />GraphicsRenderFactory factory;<br />IGraphicsRenderer* g_pRenderer;<br />g_pRenderer = factory.CreateRenderer(“OGL”);<br />g_pRenderer = factory.CreateRenderer(“D3D”);<br />http://raimsoft.com<br />DreamexecutionWarrock Client team Choi Jun Hyeok<br />http://dreamexe.co.kr<br />
  24. 24. Track ::<br />10장 | 추상 인터페이스<br />인터페이스?<br />격리 설계<br />팩토리 패턴<br />단점?<br />http://raimsoft.com<br />DreamexecutionWarrock Client team Choi Jun Hyeok<br />http://dreamexe.co.kr<br />
  25. 25. Interface ::단점<br />-코드의 복잡성 증가<br />-디버그가 어려워 진다. (추상 인터페이스형이 비어있는 경우)<br />-가상 함수로 인한 성능 저하<br />-위와 같은 단점들이 해를 입히는 데미지보다추상 인터페이스 구현으로 인해 얻는 것들이 더 많기<br />때문에 적극적으로 활용<br />http://raimsoft.com<br />DreamexecutionWarrock Client team Choi Jun Hyeok<br />http://dreamexe.co.kr<br />
  26. 26. 감사합니다.<br />http://raimsoft.com<br />DreamexecutionWarrock Client team Choi Jun Hyeok<br />http://dreamexe.co.kr<br />

×