SlideShare a Scribd company logo
more Effective C++
Chapter 5 항목 30부터
‘유용하고 재미있는 프로그래밍 기법들_2와 이외의 이야기들’
131039 신동찬
안그래도 X,Z좌표로 이루어진
Height Map 만드는데...
개발자의 색감
잘 걸린 PROXY 클래스
2차원 배열 클래스를 제작하기 위해
내부에 1차원 배열 클래스를 두어
1차원 배열의 1차원 배열로 구현하는 2차원 배열
…
또 다른 객체를 대신하는 객체를 두는 방법을
프록시 객체라고 하고
객체를 생성하는 클래스를 프록시 클래스라 함
예제에서는
내부에 있는 1차원 배열 클래스를 프록시라고 할 수 있음
프록시 클래스의 국가대표급 응용 사례
Operator[]의 읽기/쓰기 동작을 구분하는 것
여기서 잠깐!
Lvalue, Rvalue에 대해서 이해 하는 것 잊지마세요
http://kholdstare.github.io/technical/2013/11/23/moves-demystified.html
프록시 클래스로 읽기 쓰기 구분이 단순하지 않습니다.
29장에서 봤던 방법으로는 해결이 안됩니다.
아래 코드에서 멤버 함수의 호출 상태를 고려하지 않는다는 문제!
그래서 지연평가를 활용해야 하는데
지연 시간을 벌어주는 일이 프록시 클래스 역할
operator[]호출 후 반환 프록시가 어떻게 사용되나 확인 후
읽기/쓰기를 구분 짓는 것
하지만 여전히 문제가 있어요
반환 값의 타입이 바뀌게 되면 또 컴파일 에러가 나옵니다
해결 방법은
해당 클래스의 주소 연산자 오버로딩
그런데 이런 상황은 대입 연산 대상으로는 괜찮은데
+=, ++ *=, <<= 등등에서는...
또 오류가 나오네요
필요한 연산자를 모두 정의해야 되는 문제가 있음
또 다른 문제!
반환 값이 프록시 객체이기 때문에 생각한 동작이 안 나온다
원래 객체에 적용할 수 있는 함수를 모조리 오버로딩
그래도 또!
비상수 객체 참조자를 받는 함수의 매개변수로 프록시를 넘기면...
그래서 설계 단에서 거부되는 경우도 있다고 하네요
하지만 잘 쓰면 유용하니 오류가 날 부분을 확인하고 쓰세요
함수를 두 개 이상의 객체에 대해 가상 함수처럼 동작하도록 하기
= 이중 디스패치 만들기
SKYLAB스러운 예제와 함께 보겠습니다
우주의 서로 다른 객체가 충돌하는 함수 예제
원하는 내용을 다시 정리하면
동적으로 객체 간 충돌을 구현하고 싶은 것
단, 새로운 객체 타입이 생기는 경우
코드 변화가 최소여야 함
가상 함수 테이블의 유사 구현을 활용
map 자료구조에서 이름과 함수 객체를 가짐
들어오는 이름에 따라서 해당 함수 객체를 실행함
자료의 생성주기는 정적 데이터로 선언하면
프로그램의 생성과 소멸이 자동으로 해결
map을 만들고 접근하는 건 알겠는데
초기화가 되어 있어야 하지 않나요?
어떻게 Handle할지 결정할 데이터로 채워야 합니다.
충돌 처리 함수가 클래스 멤버인 경우
새로운 파생 클래스가 게임에 추가되면
여전히 클래스 정의를 수정해야 하는 문제가 있음
=> 충돌 처리 함수를 밖으로 뺀다면?!
이름 없는 네임스페이스가 포인트
컴파일 단위에서만 의미를 가지고 외부에서 확인 못 함
즉 함수 앞에 static을 붙여 정적 함수로 선언한 것과 같음
충돌처리 함수를 정적 영역에서 처리
그런데... 객체에 또 상속 받는 자손들이 생기면?!
그래서 구조를 다시 바꿔 봤습니다
클래스의 객체가 전역메모리에 올라오는 동시에
필요한 함수가 자동으로 등록 되는 형태
하지만 처음 의도처럼 완벽하지는 않습니다.
다중 디스패치를 완벽하게 구현하는 방법은 없습니다.
그나마 그존 코드를 거의 변경하지 않는 방법이 있죠
미래 지향적인 개발자?!
미래 지향적인 프로그래머?!
정확할 건 정확하게 해주는 것
위험한 것을 경계하는 것에서 시작
• C++ 특징으로 못할 것은 막아 버림
절대 상속이 일어나지 않는 클래스는 막아버리고
힙에 인스턴스가 생성 되어야 하면 힙에만 만들어 지도록
복사, 대입이 불필요하면 private 선언으로 틀어 막는 등
• 멀쩡한 함수를 가상함수로 만들지 말 것
• 대입 복사 생성은 컴파일러가 기본으로 만들어 버림
필요 없으면 확실히 제거
• 코드 이식성 유지
• 캡슐화
기조: 황당함 최소화의 원칙
이외에도...
• B*가 실제로 D를 가리키는 경우에만 B에 대한 가상 소멸자가 필요합니다
• 다중 상속이 이루어진 클래스 계통 구조에 소멸자가 한 곳에라도 끼여 있으면
모든 기본 클래스에는 가상 소멸자가 들어가야 함
• String클래스는 vtbl을 추가하고 싶지 않아 가상 소멸자가 아니다
등등...
완벽한 코드를 만들기 위한 일반적인이야기들
더 자세한 내용은 책을 통해
어라?
우리는 C++ 게임 만들고 있었는데요...
C와 C++는 당연히 뗄수 없는 관계다
하지만 한 프로그램에서 사용할 때 주의할 점은
분명히 존재한다
• 네임 맹글링
• 정적 데이터 초기화
• 동적 메모리 할당
• 자료구조 호환성
C++로 업그레이드 되며 생기거나 변환된 녀석들이
문제를 일으킬 가능성이 있다!
해결책!
• 컴파일러가 생성하는 목적 코드 호환성 확인
• 두 언어에서 동시 사용되는 함수는 extern “c”선언
(네임 맹글링 방지)
• main은 C++로 작성
• new로 할당된 메모리는 delet로
malloc으로 할당된 메모리는 free로
• 전달 데이터 타입은 C로 컴파일 되는 것으로 만
C++ 언어의 최신 표준안과 표준라이브러리에 대해 익숙해지자.
여기서 이야기하는 최신은?!
아.. 네 10년전?!
이미 VS2013에는 많은 것이 적용되었고
effective c++ 개정판에 포함된 내용도 많아요
현재 기술이라 생각하고 한 번 보시면 될 것 같습니다
(책 보세요)
more effective C++ 끝.

More Related Content

What's hot

More effective c++ 1
More effective c++ 1More effective c++ 1
More effective c++ 1현찬 양
 
effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리
Injae Lee
 
이펙티브 C++ 공부
이펙티브 C++ 공부이펙티브 C++ 공부
이펙티브 C++ 공부quxn6
 
Effective c++ 정리 1~2
Effective c++ 정리 1~2Effective c++ 정리 1~2
Effective c++ 정리 1~2
Injae Lee
 
Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약
Nam Hyeonuk
 
Effective c++ 1,2
Effective c++ 1,2Effective c++ 1,2
Effective c++ 1,2
세빈 정
 
이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디
quxn6
 
Effective C++ Chaper 1
Effective C++ Chaper 1Effective C++ Chaper 1
Effective C++ Chaper 1
연우 김
 
이펙티브 C++ 스터디
이펙티브 C++ 스터디이펙티브 C++ 스터디
이펙티브 C++ 스터디
quxn6
 
이펙티브 C++ (7~9)
이펙티브 C++ (7~9)이펙티브 C++ (7~9)
이펙티브 C++ (7~9)익성 조
 
Effective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinEffective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshin
Dong Chan Shin
 
Effective c++ 챕터 2 정리
Effective c++ 챕터 2 정리Effective c++ 챕터 2 정리
Effective c++ 챕터 2 정리
연우 김
 
Effective c++ 정리 chapter 6
Effective c++ 정리 chapter 6Effective c++ 정리 chapter 6
Effective c++ 정리 chapter 6
연우 김
 
모어 이펙티브 c++ 1,2장 스터디
모어 이펙티브 c++ 1,2장 스터디모어 이펙티브 c++ 1,2장 스터디
모어 이펙티브 c++ 1,2장 스터디
quxn6
 
M1 2 1
M1 2 1M1 2 1
M1 2 1nexthw
 
More effective c++ 3주차
More effective c++ 3주차More effective c++ 3주차
More effective c++ 3주차Injae Lee
 
Effective c++chapter3
Effective c++chapter3Effective c++chapter3
Effective c++chapter3
성연 김
 
Effective c++chapter4
Effective c++chapter4Effective c++chapter4
Effective c++chapter4
성연 김
 
Effective c++chapter8
Effective c++chapter8Effective c++chapter8
Effective c++chapter8
성연 김
 
Effective C++ 정리 chapter 3
Effective C++ 정리 chapter 3Effective C++ 정리 chapter 3
Effective C++ 정리 chapter 3
연우 김
 

What's hot (20)

More effective c++ 1
More effective c++ 1More effective c++ 1
More effective c++ 1
 
effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리
 
이펙티브 C++ 공부
이펙티브 C++ 공부이펙티브 C++ 공부
이펙티브 C++ 공부
 
Effective c++ 정리 1~2
Effective c++ 정리 1~2Effective c++ 정리 1~2
Effective c++ 정리 1~2
 
Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약
 
Effective c++ 1,2
Effective c++ 1,2Effective c++ 1,2
Effective c++ 1,2
 
이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디
 
Effective C++ Chaper 1
Effective C++ Chaper 1Effective C++ Chaper 1
Effective C++ Chaper 1
 
이펙티브 C++ 스터디
이펙티브 C++ 스터디이펙티브 C++ 스터디
이펙티브 C++ 스터디
 
이펙티브 C++ (7~9)
이펙티브 C++ (7~9)이펙티브 C++ (7~9)
이펙티브 C++ (7~9)
 
Effective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinEffective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshin
 
Effective c++ 챕터 2 정리
Effective c++ 챕터 2 정리Effective c++ 챕터 2 정리
Effective c++ 챕터 2 정리
 
Effective c++ 정리 chapter 6
Effective c++ 정리 chapter 6Effective c++ 정리 chapter 6
Effective c++ 정리 chapter 6
 
모어 이펙티브 c++ 1,2장 스터디
모어 이펙티브 c++ 1,2장 스터디모어 이펙티브 c++ 1,2장 스터디
모어 이펙티브 c++ 1,2장 스터디
 
M1 2 1
M1 2 1M1 2 1
M1 2 1
 
More effective c++ 3주차
More effective c++ 3주차More effective c++ 3주차
More effective c++ 3주차
 
Effective c++chapter3
Effective c++chapter3Effective c++chapter3
Effective c++chapter3
 
Effective c++chapter4
Effective c++chapter4Effective c++chapter4
Effective c++chapter4
 
Effective c++chapter8
Effective c++chapter8Effective c++chapter8
Effective c++chapter8
 
Effective C++ 정리 chapter 3
Effective C++ 정리 chapter 3Effective C++ 정리 chapter 3
Effective C++ 정리 chapter 3
 

Viewers also liked

NDC14 창업을결정하기전3가지자기검증
NDC14 창업을결정하기전3가지자기검증NDC14 창업을결정하기전3가지자기검증
NDC14 창업을결정하기전3가지자기검증Byunglim Park
 
NDC2014 코인박스@NDC 치킨럽포스트모템
NDC2014 코인박스@NDC 치킨럽포스트모템NDC2014 코인박스@NDC 치킨럽포스트모템
NDC2014 코인박스@NDC 치킨럽포스트모템
gon
 
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
Miyu Park
 
NDC 2014) 별바람의 기묘한 모험 1991-2014
NDC 2014) 별바람의 기묘한 모험 1991-2014NDC 2014) 별바람의 기묘한 모험 1991-2014
NDC 2014) 별바람의 기묘한 모험 1991-2014
KwangSam Kim
 
[NDC 14] '미쿠미쿠하게 해줄게' - MMD MV 제작 사례와 매력적인 캐릭터 애니메이션
[NDC 14] '미쿠미쿠하게 해줄게' - MMD MV 제작 사례와 매력적인 캐릭터 애니메이션[NDC 14] '미쿠미쿠하게 해줄게' - MMD MV 제작 사례와 매력적인 캐릭터 애니메이션
[NDC 14] '미쿠미쿠하게 해줄게' - MMD MV 제작 사례와 매력적인 캐릭터 애니메이션
Nexon Korea
 
[NDC14] A Mass of Dead 스팀 입성 성공기
[NDC14] A Mass of Dead 스팀 입성 성공기[NDC14] A Mass of Dead 스팀 입성 성공기
[NDC14] A Mass of Dead 스팀 입성 성공기Mingu Heo
 
진선웅 유저수만큼다양한섬을만들자 공개용
진선웅 유저수만큼다양한섬을만들자 공개용진선웅 유저수만큼다양한섬을만들자 공개용
진선웅 유저수만큼다양한섬을만들자 공개용
Sunwung Jin
 
[NDC 14] 가죽 장화를 먹게 해달라니 - &lt;야생의>의 자유도 높은 아이템 시스템 구현
[NDC 14] 가죽 장화를 먹게 해달라니 - &lt;야생의>의 자유도 높은 아이템 시스템 구현[NDC 14] 가죽 장화를 먹게 해달라니 - &lt;야생의>의 자유도 높은 아이템 시스템 구현
[NDC 14] 가죽 장화를 먹게 해달라니 - &lt;야생의>의 자유도 높은 아이템 시스템 구현Hoyoung Choi
 
THE_NPCMASTER_PUBLIC
THE_NPCMASTER_PUBLICTHE_NPCMASTER_PUBLIC
THE_NPCMASTER_PUBLICkhalbora
 
[NDC14] 모바일 게임의 다음 혁신 - 야생의 땅 듀랑고의 계산 프로세스 중심 게임 디자인
[NDC14] 모바일 게임의 다음 혁신 - 야생의 땅 듀랑고의 계산 프로세스 중심 게임 디자인[NDC14] 모바일 게임의 다음 혁신 - 야생의 땅 듀랑고의 계산 프로세스 중심 게임 디자인
[NDC14] 모바일 게임의 다음 혁신 - 야생의 땅 듀랑고의 계산 프로세스 중심 게임 디자인
승명 양
 
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
Jinuk Kim
 
[NDC14] (공개용)게임 QA에 적용할 수 있는 테스팅 기법과 패턴 활용_황우람
[NDC14] (공개용)게임 QA에 적용할 수 있는 테스팅 기법과 패턴 활용_황우람[NDC14] (공개용)게임 QA에 적용할 수 있는 테스팅 기법과 패턴 활용_황우람
[NDC14] (공개용)게임 QA에 적용할 수 있는 테스팅 기법과 패턴 활용_황우람
Wooram Hwang
 
[NDC14] 타임라인 던전 포스트모템 - 스마트폰 시대의 머드게임과 SNS
[NDC14] 타임라인 던전 포스트모템 - 스마트폰 시대의 머드게임과 SNS[NDC14] 타임라인 던전 포스트모템 - 스마트폰 시대의 머드게임과 SNS
[NDC14] 타임라인 던전 포스트모템 - 스마트폰 시대의 머드게임과 SNS
Younger Jo
 
NDC14 - 엄마와 누나가 게임을 즐기는 법 : [에브리타운 for kakao] 서비스 포스트 모텀
NDC14 - 엄마와 누나가 게임을 즐기는 법 : [에브리타운 for kakao] 서비스 포스트 모텀NDC14 - 엄마와 누나가 게임을 즐기는 법 : [에브리타운 for kakao] 서비스 포스트 모텀
NDC14 - 엄마와 누나가 게임을 즐기는 법 : [에브리타운 for kakao] 서비스 포스트 모텀
Young Keun Choe
 
NDC 2014, 피할 수 없는 문자열의 세계
NDC 2014, 피할 수 없는 문자열의 세계NDC 2014, 피할 수 없는 문자열의 세계
NDC 2014, 피할 수 없는 문자열의 세계tcaesvk
 
NDC 2014 [48시간 만에 게임 만들기: '수줍은 메두사' 포스트모템과 게임 개발의 왕도]
NDC 2014 [48시간 만에 게임 만들기: '수줍은 메두사' 포스트모템과 게임 개발의 왕도]NDC 2014 [48시간 만에 게임 만들기: '수줍은 메두사' 포스트모템과 게임 개발의 왕도]
NDC 2014 [48시간 만에 게임 만들기: '수줍은 메두사' 포스트모템과 게임 개발의 왕도]
Imseong Kang
 
[ NDC 14 ] 가죽 장화를 먹게 해주세요 - [ 야생의 땅 : 듀랑고 ] 의 자유도 높은 아이템 시스템 디자인
[ NDC 14 ] 가죽 장화를 먹게 해주세요 - [ 야생의 땅 : 듀랑고 ] 의 자유도 높은 아이템 시스템 디자인 [ NDC 14 ] 가죽 장화를 먹게 해주세요 - [ 야생의 땅 : 듀랑고 ] 의 자유도 높은 아이템 시스템 디자인
[ NDC 14 ] 가죽 장화를 먹게 해주세요 - [ 야생의 땅 : 듀랑고 ] 의 자유도 높은 아이템 시스템 디자인
Jungsoo Lee
 
바라는 대로 라이터가 쓰게 만드는 시나리오 디렉팅 기법
바라는 대로 라이터가 쓰게 만드는 시나리오 디렉팅 기법바라는 대로 라이터가 쓰게 만드는 시나리오 디렉팅 기법
바라는 대로 라이터가 쓰게 만드는 시나리오 디렉팅 기법
Lee Sangkyoon (Kay)
 
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
Seungmo Koo
 
[NDC 14] 게임 개발사에서 개발PM(팀장)의 역할과 책임-김영웅
[NDC 14] 게임 개발사에서 개발PM(팀장)의 역할과 책임-김영웅[NDC 14] 게임 개발사에서 개발PM(팀장)의 역할과 책임-김영웅
[NDC 14] 게임 개발사에서 개발PM(팀장)의 역할과 책임-김영웅
Kloud Kim
 

Viewers also liked (20)

NDC14 창업을결정하기전3가지자기검증
NDC14 창업을결정하기전3가지자기검증NDC14 창업을결정하기전3가지자기검증
NDC14 창업을결정하기전3가지자기검증
 
NDC2014 코인박스@NDC 치킨럽포스트모템
NDC2014 코인박스@NDC 치킨럽포스트모템NDC2014 코인박스@NDC 치킨럽포스트모템
NDC2014 코인박스@NDC 치킨럽포스트모템
 
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
 
NDC 2014) 별바람의 기묘한 모험 1991-2014
NDC 2014) 별바람의 기묘한 모험 1991-2014NDC 2014) 별바람의 기묘한 모험 1991-2014
NDC 2014) 별바람의 기묘한 모험 1991-2014
 
[NDC 14] '미쿠미쿠하게 해줄게' - MMD MV 제작 사례와 매력적인 캐릭터 애니메이션
[NDC 14] '미쿠미쿠하게 해줄게' - MMD MV 제작 사례와 매력적인 캐릭터 애니메이션[NDC 14] '미쿠미쿠하게 해줄게' - MMD MV 제작 사례와 매력적인 캐릭터 애니메이션
[NDC 14] '미쿠미쿠하게 해줄게' - MMD MV 제작 사례와 매력적인 캐릭터 애니메이션
 
[NDC14] A Mass of Dead 스팀 입성 성공기
[NDC14] A Mass of Dead 스팀 입성 성공기[NDC14] A Mass of Dead 스팀 입성 성공기
[NDC14] A Mass of Dead 스팀 입성 성공기
 
진선웅 유저수만큼다양한섬을만들자 공개용
진선웅 유저수만큼다양한섬을만들자 공개용진선웅 유저수만큼다양한섬을만들자 공개용
진선웅 유저수만큼다양한섬을만들자 공개용
 
[NDC 14] 가죽 장화를 먹게 해달라니 - &lt;야생의>의 자유도 높은 아이템 시스템 구현
[NDC 14] 가죽 장화를 먹게 해달라니 - &lt;야생의>의 자유도 높은 아이템 시스템 구현[NDC 14] 가죽 장화를 먹게 해달라니 - &lt;야생의>의 자유도 높은 아이템 시스템 구현
[NDC 14] 가죽 장화를 먹게 해달라니 - &lt;야생의>의 자유도 높은 아이템 시스템 구현
 
THE_NPCMASTER_PUBLIC
THE_NPCMASTER_PUBLICTHE_NPCMASTER_PUBLIC
THE_NPCMASTER_PUBLIC
 
[NDC14] 모바일 게임의 다음 혁신 - 야생의 땅 듀랑고의 계산 프로세스 중심 게임 디자인
[NDC14] 모바일 게임의 다음 혁신 - 야생의 땅 듀랑고의 계산 프로세스 중심 게임 디자인[NDC14] 모바일 게임의 다음 혁신 - 야생의 땅 듀랑고의 계산 프로세스 중심 게임 디자인
[NDC14] 모바일 게임의 다음 혁신 - 야생의 땅 듀랑고의 계산 프로세스 중심 게임 디자인
 
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
 
[NDC14] (공개용)게임 QA에 적용할 수 있는 테스팅 기법과 패턴 활용_황우람
[NDC14] (공개용)게임 QA에 적용할 수 있는 테스팅 기법과 패턴 활용_황우람[NDC14] (공개용)게임 QA에 적용할 수 있는 테스팅 기법과 패턴 활용_황우람
[NDC14] (공개용)게임 QA에 적용할 수 있는 테스팅 기법과 패턴 활용_황우람
 
[NDC14] 타임라인 던전 포스트모템 - 스마트폰 시대의 머드게임과 SNS
[NDC14] 타임라인 던전 포스트모템 - 스마트폰 시대의 머드게임과 SNS[NDC14] 타임라인 던전 포스트모템 - 스마트폰 시대의 머드게임과 SNS
[NDC14] 타임라인 던전 포스트모템 - 스마트폰 시대의 머드게임과 SNS
 
NDC14 - 엄마와 누나가 게임을 즐기는 법 : [에브리타운 for kakao] 서비스 포스트 모텀
NDC14 - 엄마와 누나가 게임을 즐기는 법 : [에브리타운 for kakao] 서비스 포스트 모텀NDC14 - 엄마와 누나가 게임을 즐기는 법 : [에브리타운 for kakao] 서비스 포스트 모텀
NDC14 - 엄마와 누나가 게임을 즐기는 법 : [에브리타운 for kakao] 서비스 포스트 모텀
 
NDC 2014, 피할 수 없는 문자열의 세계
NDC 2014, 피할 수 없는 문자열의 세계NDC 2014, 피할 수 없는 문자열의 세계
NDC 2014, 피할 수 없는 문자열의 세계
 
NDC 2014 [48시간 만에 게임 만들기: '수줍은 메두사' 포스트모템과 게임 개발의 왕도]
NDC 2014 [48시간 만에 게임 만들기: '수줍은 메두사' 포스트모템과 게임 개발의 왕도]NDC 2014 [48시간 만에 게임 만들기: '수줍은 메두사' 포스트모템과 게임 개발의 왕도]
NDC 2014 [48시간 만에 게임 만들기: '수줍은 메두사' 포스트모템과 게임 개발의 왕도]
 
[ NDC 14 ] 가죽 장화를 먹게 해주세요 - [ 야생의 땅 : 듀랑고 ] 의 자유도 높은 아이템 시스템 디자인
[ NDC 14 ] 가죽 장화를 먹게 해주세요 - [ 야생의 땅 : 듀랑고 ] 의 자유도 높은 아이템 시스템 디자인 [ NDC 14 ] 가죽 장화를 먹게 해주세요 - [ 야생의 땅 : 듀랑고 ] 의 자유도 높은 아이템 시스템 디자인
[ NDC 14 ] 가죽 장화를 먹게 해주세요 - [ 야생의 땅 : 듀랑고 ] 의 자유도 높은 아이템 시스템 디자인
 
바라는 대로 라이터가 쓰게 만드는 시나리오 디렉팅 기법
바라는 대로 라이터가 쓰게 만드는 시나리오 디렉팅 기법바라는 대로 라이터가 쓰게 만드는 시나리오 디렉팅 기법
바라는 대로 라이터가 쓰게 만드는 시나리오 디렉팅 기법
 
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
 
[NDC 14] 게임 개발사에서 개발PM(팀장)의 역할과 책임-김영웅
[NDC 14] 게임 개발사에서 개발PM(팀장)의 역할과 책임-김영웅[NDC 14] 게임 개발사에서 개발PM(팀장)의 역할과 책임-김영웅
[NDC 14] 게임 개발사에서 개발PM(팀장)의 역할과 책임-김영웅
 

Similar to More effective c++ 항목30부터

M5 6 1
M5 6 1M5 6 1
M5 6 1nexthw
 
Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Dong Chan Shin
 
More effective c++ chapter4 이후 항목 29까지
More effective c++ chapter4 이후 항목 29까지More effective c++ chapter4 이후 항목 29까지
More effective c++ chapter4 이후 항목 29까지
Dong Chan Shin
 
Effective c++chapter1 and2
Effective c++chapter1 and2Effective c++chapter1 and2
Effective c++chapter1 and2
성연 김
 
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013devCAT Studio, NEXON
 
모어 이펙티브 c++ 5장 스터디
모어 이펙티브 c++ 5장 스터디모어 이펙티브 c++ 5장 스터디
모어 이펙티브 c++ 5장 스터디
quxn6
 
Effective c++ Chapter1,2
Effective c++ Chapter1,2Effective c++ Chapter1,2
Effective c++ Chapter1,2문익 장
 
More effective c++ chapter3 4
More effective c++ chapter3 4More effective c++ chapter3 4
More effective c++ chapter3 4Dong Chan Shin
 
Effective c++ 1~8장
Effective c++ 1~8장 Effective c++ 1~8장
Effective c++ 1~8장
Shin heemin
 
Effective c++ 3
Effective c++ 3Effective c++ 3
Effective c++ 3현찬 양
 
Effective c++ chapter7_8_9_dcshin
Effective c++ chapter7_8_9_dcshinEffective c++ chapter7_8_9_dcshin
Effective c++ chapter7_8_9_dcshin
Dong Chan Shin
 
M5 1 1
M5 1 1M5 1 1
M5 1 1nexthw
 
게임프로그래밍입문 7
게임프로그래밍입문 7게임프로그래밍입문 7
게임프로그래밍입문 7
Yeonah Ki
 
이승재, 사례로 배우는 디스어셈블리 디버깅, NDC2014
이승재, 사례로 배우는 디스어셈블리 디버깅, NDC2014이승재, 사례로 배우는 디스어셈블리 디버깅, NDC2014
이승재, 사례로 배우는 디스어셈블리 디버깅, NDC2014devCAT Studio, NEXON
 
NDC14 - 사례로 배우는 디스어셈블리 디버깅
NDC14 - 사례로 배우는 디스어셈블리 디버깅NDC14 - 사례로 배우는 디스어셈블리 디버깅
NDC14 - 사례로 배우는 디스어셈블리 디버깅Seungjae Lee
 
Chapter5 ~ 6
Chapter5 ~ 6Chapter5 ~ 6
Chapter5 ~ 6Injae Lee
 
카사 공개세미나1회 W.E.L.C.
카사 공개세미나1회  W.E.L.C.카사 공개세미나1회  W.E.L.C.
카사 공개세미나1회 W.E.L.C.Ryan Park
 
Tcpl 12장 파생클래스
Tcpl 12장 파생클래스Tcpl 12장 파생클래스
Tcpl 12장 파생클래스
재정 이
 
모어이펙티브 C++ 3,4장 예외, 효율 스터디
모어이펙티브 C++ 3,4장 예외, 효율 스터디모어이펙티브 C++ 3,4장 예외, 효율 스터디
모어이펙티브 C++ 3,4장 예외, 효율 스터디
quxn6
 

Similar to More effective c++ 항목30부터 (20)

M5 6 1
M5 6 1M5 6 1
M5 6 1
 
Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬
 
More effective c++ chapter4 이후 항목 29까지
More effective c++ chapter4 이후 항목 29까지More effective c++ chapter4 이후 항목 29까지
More effective c++ chapter4 이후 항목 29까지
 
Effective c++chapter1 and2
Effective c++chapter1 and2Effective c++chapter1 and2
Effective c++chapter1 and2
 
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
 
모어 이펙티브 c++ 5장 스터디
모어 이펙티브 c++ 5장 스터디모어 이펙티브 c++ 5장 스터디
모어 이펙티브 c++ 5장 스터디
 
Effective c++ Chapter1,2
Effective c++ Chapter1,2Effective c++ Chapter1,2
Effective c++ Chapter1,2
 
More effective c++ chapter3 4
More effective c++ chapter3 4More effective c++ chapter3 4
More effective c++ chapter3 4
 
Effective c++ 1~8장
Effective c++ 1~8장 Effective c++ 1~8장
Effective c++ 1~8장
 
Effective c++ 3
Effective c++ 3Effective c++ 3
Effective c++ 3
 
Mec 56
Mec 56Mec 56
Mec 56
 
Effective c++ chapter7_8_9_dcshin
Effective c++ chapter7_8_9_dcshinEffective c++ chapter7_8_9_dcshin
Effective c++ chapter7_8_9_dcshin
 
M5 1 1
M5 1 1M5 1 1
M5 1 1
 
게임프로그래밍입문 7
게임프로그래밍입문 7게임프로그래밍입문 7
게임프로그래밍입문 7
 
이승재, 사례로 배우는 디스어셈블리 디버깅, NDC2014
이승재, 사례로 배우는 디스어셈블리 디버깅, NDC2014이승재, 사례로 배우는 디스어셈블리 디버깅, NDC2014
이승재, 사례로 배우는 디스어셈블리 디버깅, NDC2014
 
NDC14 - 사례로 배우는 디스어셈블리 디버깅
NDC14 - 사례로 배우는 디스어셈블리 디버깅NDC14 - 사례로 배우는 디스어셈블리 디버깅
NDC14 - 사례로 배우는 디스어셈블리 디버깅
 
Chapter5 ~ 6
Chapter5 ~ 6Chapter5 ~ 6
Chapter5 ~ 6
 
카사 공개세미나1회 W.E.L.C.
카사 공개세미나1회  W.E.L.C.카사 공개세미나1회  W.E.L.C.
카사 공개세미나1회 W.E.L.C.
 
Tcpl 12장 파생클래스
Tcpl 12장 파생클래스Tcpl 12장 파생클래스
Tcpl 12장 파생클래스
 
모어이펙티브 C++ 3,4장 예외, 효율 스터디
모어이펙티브 C++ 3,4장 예외, 효율 스터디모어이펙티브 C++ 3,4장 예외, 효율 스터디
모어이펙티브 C++ 3,4장 예외, 효율 스터디
 

More from Dong Chan Shin

C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
Dong Chan Shin
 
User experience Design에 활용되는 각종 용어 정리
User experience Design에 활용되는 각종 용어 정리User experience Design에 활용되는 각종 용어 정리
User experience Design에 활용되는 각종 용어 정리
Dong Chan Shin
 
Project anarchy로 3d 게임 만들기 part_5_waste of time shoveling
Project anarchy로 3d 게임 만들기 part_5_waste of time shovelingProject anarchy로 3d 게임 만들기 part_5_waste of time shoveling
Project anarchy로 3d 게임 만들기 part_5_waste of time shoveling
Dong Chan Shin
 
Project anarchy로 3d 게임 만들기 part_4_network_memory management
Project anarchy로 3d 게임 만들기 part_4_network_memory managementProject anarchy로 3d 게임 만들기 part_4_network_memory management
Project anarchy로 3d 게임 만들기 part_4_network_memory management
Dong Chan Shin
 
Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여
Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여
Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여
Dong Chan Shin
 
Project anarchy로 3d 게임 만들기 part_2_vforge피하기
Project anarchy로 3d 게임 만들기 part_2_vforge피하기Project anarchy로 3d 게임 만들기 part_2_vforge피하기
Project anarchy로 3d 게임 만들기 part_2_vforge피하기
Dong Chan Shin
 
몰입 인지공백 프래그난쯔법칙 스토리텔링
몰입 인지공백 프래그난쯔법칙 스토리텔링몰입 인지공백 프래그난쯔법칙 스토리텔링
몰입 인지공백 프래그난쯔법칙 스토리텔링
Dong Chan Shin
 
Project anarchy로 3 d 게임 만들기 part_1
Project anarchy로 3 d 게임 만들기 part_1Project anarchy로 3 d 게임 만들기 part_1
Project anarchy로 3 d 게임 만들기 part_1
Dong Chan Shin
 
Unreal summit 2014 다시 보기
Unreal summit 2014 다시 보기Unreal summit 2014 다시 보기
Unreal summit 2014 다시 보기
Dong Chan Shin
 
RTS 게임 ui에서 확인 할 수 있는 rts 게임 usability
RTS 게임 ui에서 확인 할 수 있는 rts 게임 usabilityRTS 게임 ui에서 확인 할 수 있는 rts 게임 usability
RTS 게임 ui에서 확인 할 수 있는 rts 게임 usability
Dong Chan Shin
 
Proactor/Reactor Server io 성능 분석
Proactor/Reactor Server io 성능 분석Proactor/Reactor Server io 성능 분석
Proactor/Reactor Server io 성능 분석
Dong Chan Shin
 
C++ try catch 어디까지 가봤니
C++ try catch 어디까지 가봤니C++ try catch 어디까지 가봤니
C++ try catch 어디까지 가봤니
Dong Chan Shin
 
Dx관련 alignment 정리 by 은자림
Dx관련 alignment 정리 by 은자림Dx관련 alignment 정리 by 은자림
Dx관련 alignment 정리 by 은자림
Dong Chan Shin
 

More from Dong Chan Shin (13)

C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
 
User experience Design에 활용되는 각종 용어 정리
User experience Design에 활용되는 각종 용어 정리User experience Design에 활용되는 각종 용어 정리
User experience Design에 활용되는 각종 용어 정리
 
Project anarchy로 3d 게임 만들기 part_5_waste of time shoveling
Project anarchy로 3d 게임 만들기 part_5_waste of time shovelingProject anarchy로 3d 게임 만들기 part_5_waste of time shoveling
Project anarchy로 3d 게임 만들기 part_5_waste of time shoveling
 
Project anarchy로 3d 게임 만들기 part_4_network_memory management
Project anarchy로 3d 게임 만들기 part_4_network_memory managementProject anarchy로 3d 게임 만들기 part_4_network_memory management
Project anarchy로 3d 게임 만들기 part_4_network_memory management
 
Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여
Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여
Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여
 
Project anarchy로 3d 게임 만들기 part_2_vforge피하기
Project anarchy로 3d 게임 만들기 part_2_vforge피하기Project anarchy로 3d 게임 만들기 part_2_vforge피하기
Project anarchy로 3d 게임 만들기 part_2_vforge피하기
 
몰입 인지공백 프래그난쯔법칙 스토리텔링
몰입 인지공백 프래그난쯔법칙 스토리텔링몰입 인지공백 프래그난쯔법칙 스토리텔링
몰입 인지공백 프래그난쯔법칙 스토리텔링
 
Project anarchy로 3 d 게임 만들기 part_1
Project anarchy로 3 d 게임 만들기 part_1Project anarchy로 3 d 게임 만들기 part_1
Project anarchy로 3 d 게임 만들기 part_1
 
Unreal summit 2014 다시 보기
Unreal summit 2014 다시 보기Unreal summit 2014 다시 보기
Unreal summit 2014 다시 보기
 
RTS 게임 ui에서 확인 할 수 있는 rts 게임 usability
RTS 게임 ui에서 확인 할 수 있는 rts 게임 usabilityRTS 게임 ui에서 확인 할 수 있는 rts 게임 usability
RTS 게임 ui에서 확인 할 수 있는 rts 게임 usability
 
Proactor/Reactor Server io 성능 분석
Proactor/Reactor Server io 성능 분석Proactor/Reactor Server io 성능 분석
Proactor/Reactor Server io 성능 분석
 
C++ try catch 어디까지 가봤니
C++ try catch 어디까지 가봤니C++ try catch 어디까지 가봤니
C++ try catch 어디까지 가봤니
 
Dx관련 alignment 정리 by 은자림
Dx관련 alignment 정리 by 은자림Dx관련 alignment 정리 by 은자림
Dx관련 alignment 정리 by 은자림
 

More effective c++ 항목30부터

  • 1. more Effective C++ Chapter 5 항목 30부터 ‘유용하고 재미있는 프로그래밍 기법들_2와 이외의 이야기들’ 131039 신동찬
  • 2. 안그래도 X,Z좌표로 이루어진 Height Map 만드는데... 개발자의 색감 잘 걸린 PROXY 클래스
  • 3. 2차원 배열 클래스를 제작하기 위해 내부에 1차원 배열 클래스를 두어 1차원 배열의 1차원 배열로 구현하는 2차원 배열 … 또 다른 객체를 대신하는 객체를 두는 방법을 프록시 객체라고 하고 객체를 생성하는 클래스를 프록시 클래스라 함 예제에서는 내부에 있는 1차원 배열 클래스를 프록시라고 할 수 있음
  • 4. 프록시 클래스의 국가대표급 응용 사례 Operator[]의 읽기/쓰기 동작을 구분하는 것 여기서 잠깐! Lvalue, Rvalue에 대해서 이해 하는 것 잊지마세요 http://kholdstare.github.io/technical/2013/11/23/moves-demystified.html
  • 5. 프록시 클래스로 읽기 쓰기 구분이 단순하지 않습니다. 29장에서 봤던 방법으로는 해결이 안됩니다. 아래 코드에서 멤버 함수의 호출 상태를 고려하지 않는다는 문제! 그래서 지연평가를 활용해야 하는데 지연 시간을 벌어주는 일이 프록시 클래스 역할 operator[]호출 후 반환 프록시가 어떻게 사용되나 확인 후 읽기/쓰기를 구분 짓는 것
  • 6.
  • 7. 하지만 여전히 문제가 있어요 반환 값의 타입이 바뀌게 되면 또 컴파일 에러가 나옵니다 해결 방법은 해당 클래스의 주소 연산자 오버로딩 그런데 이런 상황은 대입 연산 대상으로는 괜찮은데 +=, ++ *=, <<= 등등에서는... 또 오류가 나오네요 필요한 연산자를 모두 정의해야 되는 문제가 있음
  • 8. 또 다른 문제! 반환 값이 프록시 객체이기 때문에 생각한 동작이 안 나온다 원래 객체에 적용할 수 있는 함수를 모조리 오버로딩 그래도 또! 비상수 객체 참조자를 받는 함수의 매개변수로 프록시를 넘기면...
  • 9. 그래서 설계 단에서 거부되는 경우도 있다고 하네요 하지만 잘 쓰면 유용하니 오류가 날 부분을 확인하고 쓰세요
  • 10. 함수를 두 개 이상의 객체에 대해 가상 함수처럼 동작하도록 하기 = 이중 디스패치 만들기 SKYLAB스러운 예제와 함께 보겠습니다 우주의 서로 다른 객체가 충돌하는 함수 예제 원하는 내용을 다시 정리하면 동적으로 객체 간 충돌을 구현하고 싶은 것 단, 새로운 객체 타입이 생기는 경우 코드 변화가 최소여야 함
  • 11. 가상 함수 테이블의 유사 구현을 활용 map 자료구조에서 이름과 함수 객체를 가짐 들어오는 이름에 따라서 해당 함수 객체를 실행함 자료의 생성주기는 정적 데이터로 선언하면 프로그램의 생성과 소멸이 자동으로 해결
  • 12. map을 만들고 접근하는 건 알겠는데 초기화가 되어 있어야 하지 않나요? 어떻게 Handle할지 결정할 데이터로 채워야 합니다. 충돌 처리 함수가 클래스 멤버인 경우 새로운 파생 클래스가 게임에 추가되면 여전히 클래스 정의를 수정해야 하는 문제가 있음 => 충돌 처리 함수를 밖으로 뺀다면?!
  • 13. 이름 없는 네임스페이스가 포인트 컴파일 단위에서만 의미를 가지고 외부에서 확인 못 함 즉 함수 앞에 static을 붙여 정적 함수로 선언한 것과 같음 충돌처리 함수를 정적 영역에서 처리
  • 14. 그런데... 객체에 또 상속 받는 자손들이 생기면?! 그래서 구조를 다시 바꿔 봤습니다 클래스의 객체가 전역메모리에 올라오는 동시에 필요한 함수가 자동으로 등록 되는 형태
  • 15. 하지만 처음 의도처럼 완벽하지는 않습니다. 다중 디스패치를 완벽하게 구현하는 방법은 없습니다. 그나마 그존 코드를 거의 변경하지 않는 방법이 있죠
  • 16. 미래 지향적인 개발자?! 미래 지향적인 프로그래머?! 정확할 건 정확하게 해주는 것 위험한 것을 경계하는 것에서 시작 • C++ 특징으로 못할 것은 막아 버림 절대 상속이 일어나지 않는 클래스는 막아버리고 힙에 인스턴스가 생성 되어야 하면 힙에만 만들어 지도록 복사, 대입이 불필요하면 private 선언으로 틀어 막는 등 • 멀쩡한 함수를 가상함수로 만들지 말 것 • 대입 복사 생성은 컴파일러가 기본으로 만들어 버림 필요 없으면 확실히 제거 • 코드 이식성 유지 • 캡슐화 기조: 황당함 최소화의 원칙
  • 17. 이외에도... • B*가 실제로 D를 가리키는 경우에만 B에 대한 가상 소멸자가 필요합니다 • 다중 상속이 이루어진 클래스 계통 구조에 소멸자가 한 곳에라도 끼여 있으면 모든 기본 클래스에는 가상 소멸자가 들어가야 함 • String클래스는 vtbl을 추가하고 싶지 않아 가상 소멸자가 아니다 등등... 완벽한 코드를 만들기 위한 일반적인이야기들 더 자세한 내용은 책을 통해
  • 18. 어라? 우리는 C++ 게임 만들고 있었는데요... C와 C++는 당연히 뗄수 없는 관계다 하지만 한 프로그램에서 사용할 때 주의할 점은 분명히 존재한다
  • 19. • 네임 맹글링 • 정적 데이터 초기화 • 동적 메모리 할당 • 자료구조 호환성 C++로 업그레이드 되며 생기거나 변환된 녀석들이 문제를 일으킬 가능성이 있다! 해결책! • 컴파일러가 생성하는 목적 코드 호환성 확인 • 두 언어에서 동시 사용되는 함수는 extern “c”선언 (네임 맹글링 방지) • main은 C++로 작성 • new로 할당된 메모리는 delet로 malloc으로 할당된 메모리는 free로 • 전달 데이터 타입은 C로 컴파일 되는 것으로 만
  • 20. C++ 언어의 최신 표준안과 표준라이브러리에 대해 익숙해지자. 여기서 이야기하는 최신은?! 아.. 네 10년전?!
  • 21. 이미 VS2013에는 많은 것이 적용되었고 effective c++ 개정판에 포함된 내용도 많아요 현재 기술이라 생각하고 한 번 보시면 될 것 같습니다 (책 보세요)