김재석, C++ 게임 개발자를 위한 c# 활용 기법, 월간 마이크로소프트웨어 창간 28주년 기념 C++ 개발자를 위한 게임 프로그래밍 실전 기법 세미나, 2011.12.2.

4,773 views

Published on

Published in: Technology, Education
0 Comments
13 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,773
On SlideShare
0
From Embeds
0
Number of Embeds
239
Actions
Shares
0
Downloads
0
Comments
0
Likes
13
Embeds 0
No embeds

No notes for slide

김재석, C++ 게임 개발자를 위한 c# 활용 기법, 월간 마이크로소프트웨어 창간 28주년 기념 C++ 개발자를 위한 게임 프로그래밍 실전 기법 세미나, 2011.12.2.

  1. 1. C++ 게임 개발자를 위한C# 활용 기법 김재석, (주)넥슨코리아, gim@nexon.co.kr 1
  2. 2. • 책임연구원 • 2010/2011, 마비노기2 • 2006/2009, 마비노기 영웅전 테크니컬 디렉터 • 2004/2005, 마비노기 • 2003/2004, 프로젝트 T2 • 2001/2003, Oz World ̊ ̚[ɡɪm ʨæːsɤk] ̚ /ɡim ɟɛːzʌɡ/ 2
  3. 3. 게임 개발에서C++을 사용하는 이유? 3
  4. 4. 게임 개발에서C++을 사용하는 이유? 4
  5. 5. 게임 개발에서C++을 사용하는 이유?Win32 API 5
  6. 6. 게임 개발에서C++을 사용하는 이유?DirectX API 6
  7. 7. 응용 프로그램 인터페이스: 저수준 프로그래밍 Win32 API DirectX API 7
  8. 8. 8
  9. 9. 게임에서 초당 프레임은 절대적이다예쁘다/많이 보인다/멀리 보인다 9
  10. 10. 저수준 프로그래밍 어떻게 해야 할 지 명령하는 구체적인 코드 10
  11. 11. 고수준 프로그래밍 무엇을 할지 선언하는 추상적인 코드 11
  12. 12. Of all my programming bugs, 80% are syntax errors.Of the remaining 20%, 80% are trivial logical errors.Of the remaining 4%, 80% are pointer errors.And the remaining 0.8% are hard.Marc DonnerIBM Watson ResearchCenter 13
  13. 13. Of all my programming bugs, 80% are syntax errors.Of the remaining 20%, 80% are trivial logical errors.Of the remaining 4%, 80% are pointer errors.And the remaining 0.8% are hard. 컴파일 오류 對 런타임 오류 14
  14. 14. Of all my programming bugs, 80% are syntax errors.Of the remaining 20%, 80% are trivial logical errors.Of the remaining 4%, 80% are pointer errors.And the remaining 0.8% are hard. 형식 추론 對 형식 지정 명시적 형변환 對 암시적 형변환 15
  15. 15. Of all my programming bugs, 80% are syntax errors.Of the remaining 20%, 80% are trivial logical errors.Of the remaining 4%, 80% are pointer errors.And the remaining 0.8% are hard. 가비지 수집 對 명시적 자원 관리 16
  16. 16. Of all my programming bugs, 80% are syntax errors.Of the remaining 20%, 80% are trivial logical errors.Of the remaining 4%, 80% are pointer errors.And the remaining 0.8% are hard. 여러분이 잡아야 하는 진짜 버그 17
  17. 17. Of all my programming bugs, 80% are syntax errors.Of the remaining 20%, 80% are trivial logical errors.Of the remaining 4%, 80% are pointer errors.And the remaining 0.8% are hard. 비개발자가 작성하는 코드라면? 19
  18. 18. Of all my programming bugs, 80% are syntax errors.Of the remaining 20%, 80% are trivial logical errors.Of the remaining 4%, 80% are pointer errors.And the remaining 0.8% are hard. 값은 스택에서 바로 날리고 참조는 가비지 수집기에게 맡기자 20
  19. 19. Of all my programming bugs, 80% are syntax errors.Of the remaining 20%, 80% are trivial logical errors.Of the remaining 4%, 80% are pointer errors.And the remaining 0.8% are hard. 추론시켜도 되는 부분은 맡기고 var s = “string”; 의미가 숨어 위험하면 드러낸다 if (p != null) 21
  20. 20. Of all my programming bugs, 80% are syntax errors.Of the remaining 20%, 80% are trivial logical errors.Of the remaining 4%, 80% are pointer errors.And the remaining 0.8% are hard. 타이핑을 줄인다 22
  21. 21. 당장 C#을 써야 한다고 칠 때 알아둘만한 것들자료구조 23
  22. 22. 기본 자료형• 정수형 int.MaxValue, int.MinValue• 열거형 TEnum value; Enum.TryParse(s, true, out value); Enum.GetValues(typeof(TEnum)) 24
  23. 23. 문자열 對 버퍼• 문자열은 변경 불가 정수형와 동급의 리터럴로 사용 가능• 문자열을 수정하려면 버퍼 이용 System.Text.StringBuffer 25
  24. 24. 대리자• 추상화된 함수 포인터 Func<Type, bool> predicate = IsNull; bool IsNull(Type type) { return type == default(Type); } 26
  25. 25. System.Collections.Generic• List<T> • std::vector<T>• Queue<T> • std::queue<T>• Stack<T> • std::stack<T>• LinkedList<T> • std::list<T>• Dictionary<TKey, • std::map<Key, T> TValue>• HashSet<T> • std::set<T> 27
  26. 26. System.Collections.Concurrent• ConcurrentBag<T> • tbb::concurrent_vector<T>• ConcurrentQueue<T> • tbb::concurrent_queue<T>• ConcurrentStack<T> • tbb::concurrent_stack<T>• ConcurrentDictionary • tbb::concurrent_hash_map <TKey, TValue> <Key, T> 28
  27. 27. 알아두면, 반복 작업을 줄일 수 있는 편리한 문법문법 설탕들 29
  28. 28. 반복자• 스테이트 머신 코드를 컴파일러가 생성IEnumerable<T> Where<T>( IEnumerable<T> source, Func<T, bool> predicate){ if (source == null) yield break; foreach (T value in source) { if (!predicate(value)) continue; yield return value; }} 30
  29. 29. 초기화 문법• 지역 변수/배열의 형식은 추론 멤버 필드/속성 초기화도 같이 작성var list = new List<int>() { 1, 2 };var values = new[] { new SomeKeyValue() { Name = “name”, Value = null, }, }; 31
  30. 30. 확장 메서드•정적 클래스의 메서드를특정 타입의 멤버 메서드처럼 취급static class ComponentExtensions{static void DoSomething( this IComponent component, T arg) { … }}ComponentExtensions.Do(component, arg);component.DoSomething(arg); 32
  31. 31. 통합 언어 쿼리 (LINQ)•확장 메소드 호출을 질의 문법 형태로 표기var q = from c in categories join p in products on c.ID equals p.CID orderby c.ID, p.Price descending group p.Price by c.ID into g let cid = g.Key where Predicate(cid) select g.Average();
  32. 32. 읽을거리• C++ 프로그래머를 위한 C#, NDC2011 http://www.slideshare.net/devcatpublic ations/c-c-8252982• A C# Reading List http://www.informit.com/articles/articl e.aspx?p=1769249 34
  33. 33. Q&Atwitter:@tcaesvk 35

×