SlideShare a Scribd company logo
1 of 33
C++ 게임 개발자를 위한
C# 활용 기법
김재석, ㈜넥슨코리아, gim@nexon.co.kr
1
2
[ɡ̊ɪm̚ ʨæːsɤk̚]
/ɡim ɟɛːzʌɡ/
• 책임연구원
• 2010/2011, 마비노기2
• 2006/2009, 마비노기 영웅전
테크니컬 디렉터
• 2004/2005, 마비노기
• 2003/2004, 프로젝트 T2
• 2001/2003, Oz World
C++을 사용하는 이유?
게임 개발에서
3
C++을 사용하는 이유?
게임 개발에서
4
C++을 사용하는 이유?
Win32 API
게임 개발에서
5
C++을 사용하는 이유?
DirectX API
게임 개발에서
6
Win32 API
DirectX API
응용 프로그램 인터페이스: 저수준 프로그래밍
7
8
예쁘다/많이 보인다/멀리 보인다
게임에서 초당 프레임은 절대적이다
9
어떻게 해야 할 지 명령하는
구체적인 코드
저수준 프로그래밍
10
무엇을 할지 선언하는
추상적인 코드
고수준 프로그래밍
11
Marc Donner
IBM Watson Research
Center
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.
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.
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
가비지 수집 對 명시적 자원 관리
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
여러분이 잡아야 하는 진짜 버그
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
비개발자가 작성하는 코드라면?
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.
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.
19
추론시켜도 되는 부분은 맡기고
var s = “string”;
의미가 숨어 위험하면 드러낸다
if (p != null)
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
타이핑을 줄인다
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.
21
자료구조
당장 C#을 써야 한다고 칠 때 알아둘만한 것들
22
기본 자료형
• 정수형
int.MaxValue, int.MinValue
• 열거형
TEnum value;
Enum.TryParse(s, true, out value);
Enum.GetValues(typeof(TEnum))
23
문자열 對 버퍼
• 문자열은 변경 불가
정수형와 동급의 리터럴로 사용 가능
• 문자열을 수정하려면 버퍼 이용
System.Text.StringBuffer
24
대리자
• 추상화된 함수 포인터
Func<Type, bool> predicate =
value => value == default(Type);
25
• std::vector<T>
• std::queue<T>
• std::stack<T>
• std::list<T>
• std::map<Key, T>
• std::set<T>
System.Collections.Generic
• List<T>
• Queue<T>
• Stack<T>
• LinkedList<T>
• Dictionary<TKey,
TValue>
• HashSet<T>
26
• tbb::concurrent_vector<T>
• tbb::concurrent_queue<T>
• tbb::concurrent_stack<T>
• tbb::concurrent_hash_map
<Key, T>
System.Collections.Concurrent
• ConcurrentBag<T>
• ConcurrentQueue<T>
• ConcurrentStack<T>
• ConcurrentDictionary
<TKey, TValue>
27
문법 설탕들
알아두면, 반복 작업을 줄일 수 있는 편리한 문법
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;
}
}
29
초기화 문법
• 지역 변수/배열의 형식은 추론
멤버 필드/속성 초기화도 같이 작성
var list = new List<int>() { 1, 2 };
var values = new[]
{
new SomeKeyValue()
{
Name = “name”,
Value = null,
},
};
30
확장 메서드
• 정적 클래스의 메서드를
특정 타입의 멤버 메서드처럼 취급
31
읽을거리
• C++ 프로그래머를 위한 C#, NDC2011
32
Q&A
33
twitter:@tcaesvk

More Related Content

Viewers also liked

NDC 2010, 패킷 지옥으로부터 탈출
NDC 2010, 패킷 지옥으로부터 탈출NDC 2010, 패킷 지옥으로부터 탈출
NDC 2010, 패킷 지옥으로부터 탈출tcaesvk
 
NDC 2011, C++ 프로그래머를 위한 C#
NDC 2011, C++ 프로그래머를 위한 C#NDC 2011, C++ 프로그래머를 위한 C#
NDC 2011, C++ 프로그래머를 위한 C#tcaesvk
 
Cross linking Presentation
Cross linking PresentationCross linking Presentation
Cross linking Presentationperedelcampo
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀승명 양
 
[NDC] 인디 게임 개발사의 콘솔도전기
[NDC] 인디 게임 개발사의 콘솔도전기[NDC] 인디 게임 개발사의 콘솔도전기
[NDC] 인디 게임 개발사의 콘솔도전기Seokho Lee
 
NDC 2010 이은석 - 마비노기 영웅전 포스트모템 1부
NDC 2010 이은석 - 마비노기 영웅전 포스트모템 1부NDC 2010 이은석 - 마비노기 영웅전 포스트모템 1부
NDC 2010 이은석 - 마비노기 영웅전 포스트모템 1부Eunseok Yi
 
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기Wonha Ryu
 
NDC 2015 이광영 [야생의 땅: 듀랑고] 전투 시스템 개발 일지
NDC 2015 이광영 [야생의 땅: 듀랑고] 전투 시스템 개발 일지NDC 2015 이광영 [야생의 땅: 듀랑고] 전투 시스템 개발 일지
NDC 2015 이광영 [야생의 땅: 듀랑고] 전투 시스템 개발 일지Kwangyoung Lee
 
NDC 2016 안현석 - 개발자와 디자이너를 이롭게 하는 UI 개발
NDC 2016 안현석 - 개발자와 디자이너를 이롭게 하는 UI 개발NDC 2016 안현석 - 개발자와 디자이너를 이롭게 하는 UI 개발
NDC 2016 안현석 - 개발자와 디자이너를 이롭게 하는 UI 개발Hyunsuk Ahn
 
NDC 2014 [48시간 만에 게임 만들기: '수줍은 메두사' 포스트모템과 게임 개발의 왕도]
NDC 2014 [48시간 만에 게임 만들기: '수줍은 메두사' 포스트모템과 게임 개발의 왕도]NDC 2014 [48시간 만에 게임 만들기: '수줍은 메두사' 포스트모템과 게임 개발의 왕도]
NDC 2014 [48시간 만에 게임 만들기: '수줍은 메두사' 포스트모템과 게임 개발의 왕도]Imseong Kang
 
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출 NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출 정주 김
 
[NDC 발표] 모바일 게임데이터분석 및 실전 활용
[NDC 발표] 모바일 게임데이터분석 및 실전 활용[NDC 발표] 모바일 게임데이터분석 및 실전 활용
[NDC 발표] 모바일 게임데이터분석 및 실전 활용Tapjoy X 5Rocks
 
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술Ki Hyunwoo
 
NDC 2016 마이크로토크 - 프로그래머가 투자하는 법
NDC 2016 마이크로토크 - 프로그래머가 투자하는 법NDC 2016 마이크로토크 - 프로그래머가 투자하는 법
NDC 2016 마이크로토크 - 프로그래머가 투자하는 법Sumin Byeon
 

Viewers also liked (14)

NDC 2010, 패킷 지옥으로부터 탈출
NDC 2010, 패킷 지옥으로부터 탈출NDC 2010, 패킷 지옥으로부터 탈출
NDC 2010, 패킷 지옥으로부터 탈출
 
NDC 2011, C++ 프로그래머를 위한 C#
NDC 2011, C++ 프로그래머를 위한 C#NDC 2011, C++ 프로그래머를 위한 C#
NDC 2011, C++ 프로그래머를 위한 C#
 
Cross linking Presentation
Cross linking PresentationCross linking Presentation
Cross linking Presentation
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀
 
[NDC] 인디 게임 개발사의 콘솔도전기
[NDC] 인디 게임 개발사의 콘솔도전기[NDC] 인디 게임 개발사의 콘솔도전기
[NDC] 인디 게임 개발사의 콘솔도전기
 
NDC 2010 이은석 - 마비노기 영웅전 포스트모템 1부
NDC 2010 이은석 - 마비노기 영웅전 포스트모템 1부NDC 2010 이은석 - 마비노기 영웅전 포스트모템 1부
NDC 2010 이은석 - 마비노기 영웅전 포스트모템 1부
 
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
 
NDC 2015 이광영 [야생의 땅: 듀랑고] 전투 시스템 개발 일지
NDC 2015 이광영 [야생의 땅: 듀랑고] 전투 시스템 개발 일지NDC 2015 이광영 [야생의 땅: 듀랑고] 전투 시스템 개발 일지
NDC 2015 이광영 [야생의 땅: 듀랑고] 전투 시스템 개발 일지
 
NDC 2016 안현석 - 개발자와 디자이너를 이롭게 하는 UI 개발
NDC 2016 안현석 - 개발자와 디자이너를 이롭게 하는 UI 개발NDC 2016 안현석 - 개발자와 디자이너를 이롭게 하는 UI 개발
NDC 2016 안현석 - 개발자와 디자이너를 이롭게 하는 UI 개발
 
NDC 2014 [48시간 만에 게임 만들기: '수줍은 메두사' 포스트모템과 게임 개발의 왕도]
NDC 2014 [48시간 만에 게임 만들기: '수줍은 메두사' 포스트모템과 게임 개발의 왕도]NDC 2014 [48시간 만에 게임 만들기: '수줍은 메두사' 포스트모템과 게임 개발의 왕도]
NDC 2014 [48시간 만에 게임 만들기: '수줍은 메두사' 포스트모템과 게임 개발의 왕도]
 
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출 NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출
 
[NDC 발표] 모바일 게임데이터분석 및 실전 활용
[NDC 발표] 모바일 게임데이터분석 및 실전 활용[NDC 발표] 모바일 게임데이터분석 및 실전 활용
[NDC 발표] 모바일 게임데이터분석 및 실전 활용
 
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
 
NDC 2016 마이크로토크 - 프로그래머가 투자하는 법
NDC 2016 마이크로토크 - 프로그래머가 투자하는 법NDC 2016 마이크로토크 - 프로그래머가 투자하는 법
NDC 2016 마이크로토크 - 프로그래머가 투자하는 법
 

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

김재석, C++ 게임 개발자를 위한 c# 활용 기법, 월간 마이크로소프트웨어 창간 28주년 기념 C++ 개발자를 위한 게임 프로그래밍 실전...
김재석, C++ 게임 개발자를 위한 c# 활용 기법, 월간 마이크로소프트웨어 창간 28주년 기념 C++ 개발자를 위한 게임 프로그래밍 실전...김재석, C++ 게임 개발자를 위한 c# 활용 기법, 월간 마이크로소프트웨어 창간 28주년 기념 C++ 개발자를 위한 게임 프로그래밍 실전...
김재석, C++ 게임 개발자를 위한 c# 활용 기법, 월간 마이크로소프트웨어 창간 28주년 기념 C++ 개발자를 위한 게임 프로그래밍 실전...devCAT Studio, NEXON
 
micro:bit 프로그래밍 기초
micro:bit 프로그래밍 기초 micro:bit 프로그래밍 기초
micro:bit 프로그래밍 기초 Jong-Hyun Kim
 
MGS 툴세미나
MGS 툴세미나MGS 툴세미나
MGS 툴세미나Bonex Gu
 
언리얼 엔진 4와 함께 프로그래머 없이 게임 만들기
언리얼 엔진 4와 함께 프로그래머 없이 게임 만들기언리얼 엔진 4와 함께 프로그래머 없이 게임 만들기
언리얼 엔진 4와 함께 프로그래머 없이 게임 만들기Huey Park
 
Unreal4 박재완
Unreal4 박재완Unreal4 박재완
Unreal4 박재완재완 박
 
넌프로그래머를 위한 서버/네트워크
넌프로그래머를 위한 서버/네트워크 넌프로그래머를 위한 서버/네트워크
넌프로그래머를 위한 서버/네트워크 Rhea Strike
 
[9XD] Introduction to Computer Graphics
[9XD] Introduction to Computer Graphics[9XD] Introduction to Computer Graphics
[9XD] Introduction to Computer GraphicsChris Ohk
 

Similar to 월간 마이크로소프트웨어 창간 28주년 기념 C++ 개발자를 위한 게임 프로그래밍 실전 기법 세미나, C++ 게임 개발자를 위한 C# 활용기법 (7)

김재석, C++ 게임 개발자를 위한 c# 활용 기법, 월간 마이크로소프트웨어 창간 28주년 기념 C++ 개발자를 위한 게임 프로그래밍 실전...
김재석, C++ 게임 개발자를 위한 c# 활용 기법, 월간 마이크로소프트웨어 창간 28주년 기념 C++ 개발자를 위한 게임 프로그래밍 실전...김재석, C++ 게임 개발자를 위한 c# 활용 기법, 월간 마이크로소프트웨어 창간 28주년 기념 C++ 개발자를 위한 게임 프로그래밍 실전...
김재석, C++ 게임 개발자를 위한 c# 활용 기법, 월간 마이크로소프트웨어 창간 28주년 기념 C++ 개발자를 위한 게임 프로그래밍 실전...
 
micro:bit 프로그래밍 기초
micro:bit 프로그래밍 기초 micro:bit 프로그래밍 기초
micro:bit 프로그래밍 기초
 
MGS 툴세미나
MGS 툴세미나MGS 툴세미나
MGS 툴세미나
 
언리얼 엔진 4와 함께 프로그래머 없이 게임 만들기
언리얼 엔진 4와 함께 프로그래머 없이 게임 만들기언리얼 엔진 4와 함께 프로그래머 없이 게임 만들기
언리얼 엔진 4와 함께 프로그래머 없이 게임 만들기
 
Unreal4 박재완
Unreal4 박재완Unreal4 박재완
Unreal4 박재완
 
넌프로그래머를 위한 서버/네트워크
넌프로그래머를 위한 서버/네트워크 넌프로그래머를 위한 서버/네트워크
넌프로그래머를 위한 서버/네트워크
 
[9XD] Introduction to Computer Graphics
[9XD] Introduction to Computer Graphics[9XD] Introduction to Computer Graphics
[9XD] Introduction to Computer Graphics
 

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