SlideShare a Scribd company logo
1 of 41
C++ 개요와 표준안
C++ 스터디 1주차
발표자
• 최재원
• 아주대학교 컴공, 수학 전공
• (주)펜타큐브 인턴
• 관심 분야:
• System software
• Big data infrastructure
• GPGPU
2016. 6. 7. 2016 C++ study 2
C++ 스터디
• 대상
• C를 잘 알고, C++을 해보았거나, 혹은 다른 OO 언어를
경험해 본 적이 있는 사람.
• 목적
• 이야기 해봅시다.
• 진행 방식
• 생각해 봅시다.
2016. 6. 7. 2016 C++ study 3
오늘 발표
• C++이 뭔지, 응용 분야는 어떤 것이 있는지 소개.
• 표준을 ”언급”.
• 표준안 역사를 쓰다보니 너무 길고 재미가 없어서…
• 그 외 FAQ.
2016. 6. 7. 2016 C++ study 4
왜 C++인가?
2016. 6. 7. 2016 C++ study 5
왜 C++인가?
• 솔직히 많은 사람들이 할 필요가 있는 언어 아님
• Rust 하세요
• Python 하세요
• 하지만 난 C++을 좋아하니까!
2016. 6. 7. 2016 C++ study 6
약간 이런 느낌
2016. 6. 7. 2016 C++ study 7
굳이 찾은 C++을 사용하는 분야
• 시스템 소프트웨어
• Windows (Operating system)
• llvm (compiler)
• WebKit (web browser engine)
• Qt (UI engine)
• 인공지능
• Tensorflow, Caffe, Torch (Deep learning)
• OpenCV (Computer vision)
2016. 6. 7. 2016 C++ study 8
굳이 찾은 C++을 사용하는 분야
• 고성능을 요하는 분야
• Cocos2d-x (Game)
• Unreal engine 4 (Game)
• GNU Scientific Library (Scientific computing)
• 용도에 따라 C++을 변용한 경우
• CUDA C/C++ (GPGPU)
• Objective C/C++ (iOS 개발)
2016. 6. 7. 2016 C++ study 9
왜 C++인가?
• 고성능 응용에 적합.
• 시스템 레벨도 만들 수 있음.
• 굉장히 널리 쓰이고 있음.
• 지금도 발전 중!
• 하지만…
2016. 6. 7. 2016 C++ study 10
비판의 목소리
• *YOU* are full of bullshit.
C++ is horrible language.
- Linux kernel을 C++로 바꾸자는 제안자에게
Linus Torvalds
• C++은 태어나서는 안되는 언어였습니다.
- 아주대 운영체제 수업 시간에
최경희 교수님
2016. 6. 7. 2016 C++ study 11
오늘 목표
• 왜 C++이 저런 취급을 받는지 알아보자
• 그래도 왜 C++을 해야 하는지 알아보자
• C++을 공부하는 방법을 알아보자
• C++ 표준에 대해서 알아보자
2016. 6. 7. 2016 C++ study 12
C++이란?
2016. 6. 7. 2016 C++ study 13
C++ 이란?
• C++ is a general-purpose programming language
providing a direct and efficient model of hardware
combined with facilities for defining lightweight
abstractions.
- Bjarne Stroustrup
2016. 6. 7. 2016 C++ study 14
C++을 관통하는 두 가지 요소
• Built-in operation과 타입이 하드웨어와 “직접적
으로” mapping 된다.
• 이것이 C++이 빠르고, low-level 개발이 가능하게 되는
이유
• User-defined types를 폭 넓게 쓸 수 있는 추상화
메커니즘을 제공한다.
2016. 6. 7. 2016 C++ study 15
Stroustrup의 언어 디자인 목표
• Leave no room for a lower-level language below
C++.
• 실제로 assembly language를 제외하면 C++보다 더 아
래를 내려가는 언어는 없음
• Zero-overhead principle: What you don’t use you
don’t pay for.
• 단 하나의 byte, 단 하나의 cycle도 코드의 의도와 다르
게 낭비되지 않는다.
• 하지만 코드는 내 의도대로 짜지지 않는데…
2016. 6. 7. 2016 C++ study 16
Programming styles
2016. 6. 7. 2016 C++ study 17
Programming style
• 흔히들 우리가 말하는 “언어 패러다임” 개념.
• Procedural programming
• Data abstraction
• Object-oriented programming
• Generic programming
2016. 6. 7. 2016 C++ study 18
Procedural programming
• Programming focused on processing and the design
of suitable data structures.
• ”어떻게 처리 할 것인가” 와 “어떻게 저장할 것인
가”가 관건
• C를 몇가지 예외를 제외하면 사실상 C++의
subset으로 만들면서 받아들인 style.
• 물론 ”몇가지 예외” 때문에 함께 build를 하기 힘들다
는 문제가 발생했지만…
2016. 6. 7. 2016 C++ study 19
Data abstraction
• Programming focused on the design of interfaces,
hiding implementation details in general and
representations in particular.
• 현대의 OO 언어라면 당연히 갖춰야 할 특성.
• C++에선 Concrete class, abstract class라는 개념으
로 나뉜다.
• 이 차이는 문법적으로는 굉장히 명확한 기준(pure
virtual function의 존재성)으로 갈린다.
• 하지만 설계의 의미론 상에선 꼭 PVF가 없다는 것이
abstract class가 아닌 것이 되는건 아니다.
2016. 6. 7. 2016 C++ study 20
Object-oriented programming
• Programming focused on the design,
implementation, and use of class hierarchies.
• Polymorphism, encapsulation 개념
• 사실 저자가 나눈대로 Data abstraction과 OOP를 나눌
수 있는 것 같진 않다.
2016. 6. 7. 2016 C++ study 21
Generic programming
• Programming focused on the design,
implementation, and use of general algorithms.
• Template: parametric polymorphism
• Specialization
• 가독성을 제외하면 굉장히 괜찮은 기능 중 하나.
• Java의 generic 과는 구현 원리가 다름을 참고.
2016. 6. 7. 2016 C++ study 22
기타 특징들
2016. 6. 7. 2016 C++ study 23
Type safety
• 컴파일러가 특정 변수의 타입을 알 수 있나?
2016. 6. 7. 2016 C++ study 24
Type safety
• Static types
• 하나의 변수는 하나의 타입을 가진다.
• Expressiveness, maintainability, performance에 지대한
공헌
• Compile-time type checking
• Type-checking과 data-hiding을 하기 위해선 compile
time에 checking 하는것이 굉장히 중요하다.
• 파이썬을 떠올려 보자…
• 그리고 void*와 reinterpret_cast를 떠올려보자…
• Type-safe는 이상이고, 우린 approaximate.
• Low-level에선 답이 없다.
2016. 6. 7. 2016 C++ study 25
다양한 언어적 기능
2016. 6. 7. 2016 C++ study 26
다중 상속을 지원하는 언어?
• 다중 상속, virtual inheritence와 같은 개념은 C++
외에는 열심히 지원하는 언어는 잘 없다.
• Template의 구현도 다른 strong type 언어와 큰 차
이가 있음.
• 모던한 기능도 많이 생기는 중.
• Lambda expression, smart-pointers, thread support,
regular expression, locale 등…
• 하지만 열심히 공부하고 나면 다 C#에겐 이미 있는 것
이라는 사실을 알게 된다. 허허.
2016. 6. 7. 2016 C++ study 27
많은 부분을 민간에 의지함
• 극복하기 위해 각고의 노력을 하는 것으로 보이
나(thread support) 아직도 java, C#과 같은 경쟁 언
어에 비해선 훨씬 부족하다.
• Testing 모듈도 없다…
• 그래도 나름 기본적인 standard library는 존재
• STL, diagnostics support, RE, locales, 각종 Utilities…
2016. 6. 7. 2016 C++ study 28
진정한 의미의 cross-platform
• Vm 기반 언어의 한계 덕에 아이러니하게도 진정
한 cross-platform 언어는 C/C++/fortran 정도 밖에
없다.
• 그리고 이들은 섞어 쓸 수 있다. 아무런 추가
overhead 없이.
• 실제로 LAPACK은 fortran으로 쓰여있으나 아직까지도
C++ 코드와 함께 쓰이면서 commercial하게 쓰이고 있
다.
• 다른 언어와의 공조도 쉽다.
• JNI, JNA, python embedding 등…
2016. 6. 7. 2016 C++ study 29
C 호환성
• 사실… 개발자 입장에선 포기하는게 낫다.
• 그래도 가능하다. Extern “C”!
• TC++PL은 좋은 C 코드는 C++가 된다고 주장한다.
TCPL의 예제가 모두 C++ 컴파일러로 컴파일을 해
도 같은 동작을 한다고 한다.
• 그래서 어쩌라고!ㅠㅠ
• 여튼 자유롭게 별 생각없이 컴파일하고 갖다 쓸
수 있는게 아니므로 너무 쉽게 생각하진 말자.
2016. 6. 7. 2016 C++ study 30
표준안
2016. 6. 7. 2016 C++ study 31
C++ 표준안?
• ISO라는 국제 표준 기구에서 C++의 표준을 관리
하고 있음.
• “C++ 11 support” 라는 것은 이 표준에 맞게 컴파
일러를 만들었다는 뜻.
• 안타깝게도 어떤 표준 사항은 구현이 너무 어려워서
들어가 있지 않은 경우도 있다(…)
2016. 6. 7. 2016 C++ study 32
컴파일러 개발자도 아닌데…
• 왜 표준을 읽어야 하나요?
• 개발자는 risk management용 unit. 동작이 어떻게 되는
지 예상을 하면 할 수록 좋다.
• 다른 사람들보다 한 발자국 먼저 나갈 수 있다.
• Java 8 책을 쓴다면, java 8 스펙을 보는 수 밖에 없다.
• 안타깝게도 어떤 국내 저자들은 스펙도 안보고 구라를 치기
도 한다. sizeof가 함수라느니…
• 다 외울 필욘 없고, 필요한 것을 찾아볼 수 있는 수준
이면 된다.
• 그리고 덕후들은 외우기도 하더라… 뭐지…
2016. 6. 7. 2016 C++ study 33
표준 외에 읽어볼만한 것들
• 기본서
• C++ 기초 플러스
• 가장 예제가 많고 설명이 자세한 책이다.
• The C++ Programming Langauge, 4th edition.
• The Creator of C++, Bjarne Stroustrup의 책.
• 한글판도 나왔다.
• Compiler 별 documentation
• GCC manual
• IBM AIX documentation
• MSDN 등
2016. 6. 7. 2016 C++ study 34
FAQ
2016. 6. 7. 2016 C++ study 35
C++ 학습법?
• Stroustrup 씨에 따르면,
• C++를 공부하는 이유는 “더 좋은 프로그래머가 되기
위해” 라는 것을 잊지 마라.
• 다음과 같은 것에 focus를 맞추시라.
• Fundamental concepts
• Type safety, resource management, and invariants
• Programming techniques
• Resource management using scoped objects, the use of iterators
in algorithms
• Language-technical detail의 함정에 빠지지 마라!
2016. 6. 7. 2016 C++ study 36
C++ 학습법?
• Stroustrup 씨에 따르면,
• 프로그래밍 언어에 따라서 그에 맞는 best practices가
있으니, 그걸 따라가라. 기존의 네 관념을 고집하면
이상하고 느리고 공감 못받는 코드가 나올거다.
• 마지막으로, 이건 언어 학습과 똑같다.
• Know what you want to say
• Practice. Imitate good writing.
2016. 6. 7. 2016 C++ study 37
Modern C++ 최고의 실습 환경?
• 묻지도 따지지도 말고 gcc가 좋은 환경
• 컴파일 된 것의 성능과는 무관하게 MS는 항상
gcc 보다 표준 지원이 느리고, 정확하지 않은 경
우가 많음
• 또… 생각해보면 MS 환경에서 시스템 프로그래
밍 할 일이 많지 않다.
• 아니면 말고…
2016. 6. 7. 2016 C++ study 38
C++로 linux device driver 되나요?
• 안됩니다.
• … 사실 안된다고 말하긴 애매한게, 위에서 언급
했듯 C/C++, fortran, assembly는 섞어 쓸 수 있다.
• 하지만 결과적으로 device driver가 kernel과 접촉
하는 코드는 C로 짜야 한다.
• rust로도 device driver programming이 가능은 합
니다.
• https://github.com/tsgates/rust.ko
2016. 6. 7. 2016 C++ study 39
References
2016. 6. 7. 2016 C++ study 40
References
• TC++PL
• 꼭 읽어 보세요. 저자의 따뜻한 마음을 영어로도 느낄 수 있는 책
임.
• en.cppreference.com
• wikipedia
• C++ 11 표준 커미티 사이트
• http://www.open-std.org/jtc1/sc22/wg21/
• C++ 11 표준 working draft(원본은 돈 내고 사야 함)
• http://www.open-
std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf
• The creator of C++, Stroustrup 의 홈페이지
• http://stroustrup.com/
• 그리고 큰 형님께서 내주시는 과제
• http://stroustrup.com/4thExercises.pdf
2016. 6. 7. 2016 C++ study 41

More Related Content

What's hot

C++api디자인 1장
C++api디자인 1장C++api디자인 1장
C++api디자인 1장Jihoon Park
 
Pycon Korea 2018 - 비개발자에게 파이썬 가르치기
Pycon Korea 2018 - 비개발자에게 파이썬 가르치기Pycon Korea 2018 - 비개발자에게 파이썬 가르치기
Pycon Korea 2018 - 비개발자에게 파이썬 가르치기SeokhwanMoon
 
당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니Lusain Kim
 
간단하게 알아보는 좋은 코드 서영훈
간단하게 알아보는 좋은 코드   서영훈간단하게 알아보는 좋은 코드   서영훈
간단하게 알아보는 좋은 코드 서영훈Seo YoungHoon
 
Api design for c++ 6장
Api design for c++ 6장Api design for c++ 6장
Api design for c++ 6장Ji Hun Kim
 
Item1 c++을 언어들의 연합체로 바라보는 안목은 필수
Item1 c++을 언어들의 연합체로 바라보는 안목은 필수Item1 c++을 언어들의 연합체로 바라보는 안목은 필수
Item1 c++을 언어들의 연합체로 바라보는 안목은 필수Seonmun Choi
 
객체지향 정리. Part1
객체지향 정리. Part1객체지향 정리. Part1
객체지향 정리. Part1kim HYUNG JIN
 
병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임codenavy
 
2016 C++스터디 1주차
2016 C++스터디 1주차2016 C++스터디 1주차
2016 C++스터디 1주차Seungwee  Choi
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)Dong Chan Shin
 
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)MinGeun Park
 
Visual studio 사용 설명서(고급)
Visual studio 사용 설명서(고급)Visual studio 사용 설명서(고급)
Visual studio 사용 설명서(고급)Lusain Kim
 
읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다wonmin lee
 
Hot Trend Lambda Expressions, Compare C# With Java
Hot Trend Lambda Expressions, Compare C# With JavaHot Trend Lambda Expressions, Compare C# With Java
Hot Trend Lambda Expressions, Compare C# With JavaDexter Jung
 
Effective c++ 1
Effective c++ 1Effective c++ 1
Effective c++ 1현찬 양
 
1 Python기초 오리엔테이션
1 Python기초 오리엔테이션1 Python기초 오리엔테이션
1 Python기초 오리엔테이션cpt mobilex
 

What's hot (20)

C++api디자인 1장
C++api디자인 1장C++api디자인 1장
C++api디자인 1장
 
Pycon Korea 2018 - 비개발자에게 파이썬 가르치기
Pycon Korea 2018 - 비개발자에게 파이썬 가르치기Pycon Korea 2018 - 비개발자에게 파이썬 가르치기
Pycon Korea 2018 - 비개발자에게 파이썬 가르치기
 
당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니
 
간단하게 알아보는 좋은 코드 서영훈
간단하게 알아보는 좋은 코드   서영훈간단하게 알아보는 좋은 코드   서영훈
간단하게 알아보는 좋은 코드 서영훈
 
Api design for c++ 6장
Api design for c++ 6장Api design for c++ 6장
Api design for c++ 6장
 
llvm 소개
llvm 소개llvm 소개
llvm 소개
 
Item1 c++을 언어들의 연합체로 바라보는 안목은 필수
Item1 c++을 언어들의 연합체로 바라보는 안목은 필수Item1 c++을 언어들의 연합체로 바라보는 안목은 필수
Item1 c++을 언어들의 연합체로 바라보는 안목은 필수
 
객체지향 정리. Part1
객체지향 정리. Part1객체지향 정리. Part1
객체지향 정리. Part1
 
병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임
 
TBB 소개
TBB 소개TBB 소개
TBB 소개
 
2016 C++스터디 1주차
2016 C++스터디 1주차2016 C++스터디 1주차
2016 C++스터디 1주차
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
 
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
 
Visual studio 사용 설명서(고급)
Visual studio 사용 설명서(고급)Visual studio 사용 설명서(고급)
Visual studio 사용 설명서(고급)
 
Llvm
LlvmLlvm
Llvm
 
읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다
 
Hot Trend Lambda Expressions, Compare C# With Java
Hot Trend Lambda Expressions, Compare C# With JavaHot Trend Lambda Expressions, Compare C# With Java
Hot Trend Lambda Expressions, Compare C# With Java
 
데이콘 뽀개기
데이콘 뽀개기데이콘 뽀개기
데이콘 뽀개기
 
Effective c++ 1
Effective c++ 1Effective c++ 1
Effective c++ 1
 
1 Python기초 오리엔테이션
1 Python기초 오리엔테이션1 Python기초 오리엔테이션
1 Python기초 오리엔테이션
 

Viewers also liked

3주차 language
3주차 language3주차 language
3주차 language준혁 이
 
옷 갈아입게 해주세요
옷 갈아입게 해주세요옷 갈아입게 해주세요
옷 갈아입게 해주세요Sangwon Yi
 
KeyValuePair 첫 모임 - XP와 Pair programming
KeyValuePair 첫 모임 - XP와 Pair programmingKeyValuePair 첫 모임 - XP와 Pair programming
KeyValuePair 첫 모임 - XP와 Pair programmingJaewon Choi
 
오픈소스 소프트웨어 개발, 어디서부터 시작하는게 좋을까요? @ CNU(충남대)
오픈소스 소프트웨어 개발, 어디서부터 시작하는게 좋을까요? @ CNU(충남대)오픈소스 소프트웨어 개발, 어디서부터 시작하는게 좋을까요? @ CNU(충남대)
오픈소스 소프트웨어 개발, 어디서부터 시작하는게 좋을까요? @ CNU(충남대)Jaewon Choi
 
오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)
오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)
오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)Taeung Song
 
오픈 소스로 취업하기: 나는 어떻게 오픈 소스를 하다 렘 개발자가 되었나?
오픈 소스로 취업하기: 나는 어떻게 오픈 소스를 하다 렘 개발자가 되었나?오픈 소스로 취업하기: 나는 어떻게 오픈 소스를 하다 렘 개발자가 되었나?
오픈 소스로 취업하기: 나는 어떻게 오픈 소스를 하다 렘 개발자가 되었나?Leonardo YongUk Kim
 
[132] rust
[132] rust[132] rust
[132] rustNAVER D2
 
개발자라면, 블로그
개발자라면, 블로그개발자라면, 블로그
개발자라면, 블로그HyunSeob Lee
 
이제 막 웹개발자 되고싶은 분들께
이제 막 웹개발자 되고싶은 분들께이제 막 웹개발자 되고싶은 분들께
이제 막 웹개발자 되고싶은 분들께지수 윤
 
게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법Chris Ohk
 
손코딩뇌컴파일눈디버깅을 소개합니다.
손코딩뇌컴파일눈디버깅을 소개합니다.손코딩뇌컴파일눈디버깅을 소개합니다.
손코딩뇌컴파일눈디버깅을 소개합니다.Kwangsung Ha
 
[H3 2012] 오픈소스로 개발 실력 쌓기
[H3 2012] 오픈소스로 개발 실력 쌓기[H3 2012] 오픈소스로 개발 실력 쌓기
[H3 2012] 오픈소스로 개발 실력 쌓기KTH, 케이티하이텔
 
소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵중선 곽
 
학생 개발자, 인턴십으로 성장하기
학생 개발자, 인턴십으로 성장하기학생 개발자, 인턴십으로 성장하기
학생 개발자, 인턴십으로 성장하기재원 최
 

Viewers also liked (14)

3주차 language
3주차 language3주차 language
3주차 language
 
옷 갈아입게 해주세요
옷 갈아입게 해주세요옷 갈아입게 해주세요
옷 갈아입게 해주세요
 
KeyValuePair 첫 모임 - XP와 Pair programming
KeyValuePair 첫 모임 - XP와 Pair programmingKeyValuePair 첫 모임 - XP와 Pair programming
KeyValuePair 첫 모임 - XP와 Pair programming
 
오픈소스 소프트웨어 개발, 어디서부터 시작하는게 좋을까요? @ CNU(충남대)
오픈소스 소프트웨어 개발, 어디서부터 시작하는게 좋을까요? @ CNU(충남대)오픈소스 소프트웨어 개발, 어디서부터 시작하는게 좋을까요? @ CNU(충남대)
오픈소스 소프트웨어 개발, 어디서부터 시작하는게 좋을까요? @ CNU(충남대)
 
오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)
오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)
오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)
 
오픈 소스로 취업하기: 나는 어떻게 오픈 소스를 하다 렘 개발자가 되었나?
오픈 소스로 취업하기: 나는 어떻게 오픈 소스를 하다 렘 개발자가 되었나?오픈 소스로 취업하기: 나는 어떻게 오픈 소스를 하다 렘 개발자가 되었나?
오픈 소스로 취업하기: 나는 어떻게 오픈 소스를 하다 렘 개발자가 되었나?
 
[132] rust
[132] rust[132] rust
[132] rust
 
개발자라면, 블로그
개발자라면, 블로그개발자라면, 블로그
개발자라면, 블로그
 
이제 막 웹개발자 되고싶은 분들께
이제 막 웹개발자 되고싶은 분들께이제 막 웹개발자 되고싶은 분들께
이제 막 웹개발자 되고싶은 분들께
 
게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법
 
손코딩뇌컴파일눈디버깅을 소개합니다.
손코딩뇌컴파일눈디버깅을 소개합니다.손코딩뇌컴파일눈디버깅을 소개합니다.
손코딩뇌컴파일눈디버깅을 소개합니다.
 
[H3 2012] 오픈소스로 개발 실력 쌓기
[H3 2012] 오픈소스로 개발 실력 쌓기[H3 2012] 오픈소스로 개발 실력 쌓기
[H3 2012] 오픈소스로 개발 실력 쌓기
 
소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵
 
학생 개발자, 인턴십으로 성장하기
학생 개발자, 인턴십으로 성장하기학생 개발자, 인턴십으로 성장하기
학생 개발자, 인턴십으로 성장하기
 

Similar to C++ 개요와 표준안

[델리만주] 대학원 캐슬 - 석사에서 게임 프로그래머까지
[델리만주] 대학원 캐슬 - 석사에서 게임 프로그래머까지[델리만주] 대학원 캐슬 - 석사에서 게임 프로그래머까지
[델리만주] 대학원 캐슬 - 석사에서 게임 프로그래머까지Chris Ohk
 
학교에선 알려주지 않는 오픈소스이야기 - 박치완님
학교에선 알려주지 않는 오픈소스이야기 - 박치완님학교에선 알려주지 않는 오픈소스이야기 - 박치완님
학교에선 알려주지 않는 오픈소스이야기 - 박치완님NAVER D2
 
커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님NAVER D2
 
프로젝트 관리 및 지켜야 할 사항들
프로젝트 관리 및 지켜야 할 사항들프로젝트 관리 및 지켜야 할 사항들
프로젝트 관리 및 지켜야 할 사항들Lee Geonhee
 
Slack과 Rust로 Amazon ECS에서 서비스 배포하기
Slack과 Rust로 Amazon ECS에서 서비스 배포하기Slack과 Rust로 Amazon ECS에서 서비스 배포하기
Slack과 Rust로 Amazon ECS에서 서비스 배포하기Eunchong Yu
 
My Way, Your Way
My Way, Your WayMy Way, Your Way
My Way, Your WayChris Ohk
 
141103 최창원 파이썬 확장 프로그래밍
141103 최창원 파이썬 확장 프로그래밍141103 최창원 파이썬 확장 프로그래밍
141103 최창원 파이썬 확장 프로그래밍Changwon Choe
 
[C++ lab] 1. 수업 내용 및 진행 방법
[C++ lab] 1. 수업 내용 및 진행 방법[C++ lab] 1. 수업 내용 및 진행 방법
[C++ lab] 1. 수업 내용 및 진행 방법MinGeun Park
 
격변하는 프로그래밍 언어, 이제는 Let it go
격변하는 프로그래밍 언어, 이제는 Let it go격변하는 프로그래밍 언어, 이제는 Let it go
격변하는 프로그래밍 언어, 이제는 Let it goChris Ohk
 
2020년 7월 19일 개발 이야기 정리
2020년 7월 19일 개발 이야기 정리2020년 7월 19일 개발 이야기 정리
2020년 7월 19일 개발 이야기 정리Jay Park
 
2020년 5월 9일 개발 이야기 정리
2020년 5월 9일 개발 이야기 정리2020년 5월 9일 개발 이야기 정리
2020년 5월 9일 개발 이야기 정리Jay Park
 
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발흥배 최
 
Coding interview
Coding interviewCoding interview
Coding interviewSoohan Ahn
 
신입 SW 개발자 취업 준비
신입 SW 개발자 취업 준비신입 SW 개발자 취업 준비
신입 SW 개발자 취업 준비인서 박
 
어쩌다로봇
어쩌다로봇어쩌다로봇
어쩌다로봇민건 주
 
OSS개발자포럼(2017.01) 파이썬 소개자료
OSS개발자포럼(2017.01) 파이썬 소개자료 OSS개발자포럼(2017.01) 파이썬 소개자료
OSS개발자포럼(2017.01) 파이썬 소개자료 YoChun YoChun
 
네이버 오픈소스 세미나 - 나의코드에서 모두의 코드로 UNIST 이한
네이버 오픈소스 세미나 - 나의코드에서 모두의 코드로 UNIST 이한네이버 오픈소스 세미나 - 나의코드에서 모두의 코드로 UNIST 이한
네이버 오픈소스 세미나 - 나의코드에서 모두의 코드로 UNIST 이한NAVER Engineering
 
C++ 코드 품질 관리 비법
C++ 코드 품질 관리 비법C++ 코드 품질 관리 비법
C++ 코드 품질 관리 비법선협 이
 
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019devCAT Studio, NEXON
 
[RAPA/C++] 1. 수업 내용 및 진행 방법
[RAPA/C++] 1. 수업 내용 및 진행 방법[RAPA/C++] 1. 수업 내용 및 진행 방법
[RAPA/C++] 1. 수업 내용 및 진행 방법MinGeun Park
 

Similar to C++ 개요와 표준안 (20)

[델리만주] 대학원 캐슬 - 석사에서 게임 프로그래머까지
[델리만주] 대학원 캐슬 - 석사에서 게임 프로그래머까지[델리만주] 대학원 캐슬 - 석사에서 게임 프로그래머까지
[델리만주] 대학원 캐슬 - 석사에서 게임 프로그래머까지
 
학교에선 알려주지 않는 오픈소스이야기 - 박치완님
학교에선 알려주지 않는 오픈소스이야기 - 박치완님학교에선 알려주지 않는 오픈소스이야기 - 박치완님
학교에선 알려주지 않는 오픈소스이야기 - 박치완님
 
커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님
 
프로젝트 관리 및 지켜야 할 사항들
프로젝트 관리 및 지켜야 할 사항들프로젝트 관리 및 지켜야 할 사항들
프로젝트 관리 및 지켜야 할 사항들
 
Slack과 Rust로 Amazon ECS에서 서비스 배포하기
Slack과 Rust로 Amazon ECS에서 서비스 배포하기Slack과 Rust로 Amazon ECS에서 서비스 배포하기
Slack과 Rust로 Amazon ECS에서 서비스 배포하기
 
My Way, Your Way
My Way, Your WayMy Way, Your Way
My Way, Your Way
 
141103 최창원 파이썬 확장 프로그래밍
141103 최창원 파이썬 확장 프로그래밍141103 최창원 파이썬 확장 프로그래밍
141103 최창원 파이썬 확장 프로그래밍
 
[C++ lab] 1. 수업 내용 및 진행 방법
[C++ lab] 1. 수업 내용 및 진행 방법[C++ lab] 1. 수업 내용 및 진행 방법
[C++ lab] 1. 수업 내용 및 진행 방법
 
격변하는 프로그래밍 언어, 이제는 Let it go
격변하는 프로그래밍 언어, 이제는 Let it go격변하는 프로그래밍 언어, 이제는 Let it go
격변하는 프로그래밍 언어, 이제는 Let it go
 
2020년 7월 19일 개발 이야기 정리
2020년 7월 19일 개발 이야기 정리2020년 7월 19일 개발 이야기 정리
2020년 7월 19일 개발 이야기 정리
 
2020년 5월 9일 개발 이야기 정리
2020년 5월 9일 개발 이야기 정리2020년 5월 9일 개발 이야기 정리
2020년 5월 9일 개발 이야기 정리
 
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
 
Coding interview
Coding interviewCoding interview
Coding interview
 
신입 SW 개발자 취업 준비
신입 SW 개발자 취업 준비신입 SW 개발자 취업 준비
신입 SW 개발자 취업 준비
 
어쩌다로봇
어쩌다로봇어쩌다로봇
어쩌다로봇
 
OSS개발자포럼(2017.01) 파이썬 소개자료
OSS개발자포럼(2017.01) 파이썬 소개자료 OSS개발자포럼(2017.01) 파이썬 소개자료
OSS개발자포럼(2017.01) 파이썬 소개자료
 
네이버 오픈소스 세미나 - 나의코드에서 모두의 코드로 UNIST 이한
네이버 오픈소스 세미나 - 나의코드에서 모두의 코드로 UNIST 이한네이버 오픈소스 세미나 - 나의코드에서 모두의 코드로 UNIST 이한
네이버 오픈소스 세미나 - 나의코드에서 모두의 코드로 UNIST 이한
 
C++ 코드 품질 관리 비법
C++ 코드 품질 관리 비법C++ 코드 품질 관리 비법
C++ 코드 품질 관리 비법
 
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
 
[RAPA/C++] 1. 수업 내용 및 진행 방법
[RAPA/C++] 1. 수업 내용 및 진행 방법[RAPA/C++] 1. 수업 내용 및 진행 방법
[RAPA/C++] 1. 수업 내용 및 진행 방법
 

C++ 개요와 표준안

  • 1. C++ 개요와 표준안 C++ 스터디 1주차
  • 2. 발표자 • 최재원 • 아주대학교 컴공, 수학 전공 • (주)펜타큐브 인턴 • 관심 분야: • System software • Big data infrastructure • GPGPU 2016. 6. 7. 2016 C++ study 2
  • 3. C++ 스터디 • 대상 • C를 잘 알고, C++을 해보았거나, 혹은 다른 OO 언어를 경험해 본 적이 있는 사람. • 목적 • 이야기 해봅시다. • 진행 방식 • 생각해 봅시다. 2016. 6. 7. 2016 C++ study 3
  • 4. 오늘 발표 • C++이 뭔지, 응용 분야는 어떤 것이 있는지 소개. • 표준을 ”언급”. • 표준안 역사를 쓰다보니 너무 길고 재미가 없어서… • 그 외 FAQ. 2016. 6. 7. 2016 C++ study 4
  • 5. 왜 C++인가? 2016. 6. 7. 2016 C++ study 5
  • 6. 왜 C++인가? • 솔직히 많은 사람들이 할 필요가 있는 언어 아님 • Rust 하세요 • Python 하세요 • 하지만 난 C++을 좋아하니까! 2016. 6. 7. 2016 C++ study 6
  • 7. 약간 이런 느낌 2016. 6. 7. 2016 C++ study 7
  • 8. 굳이 찾은 C++을 사용하는 분야 • 시스템 소프트웨어 • Windows (Operating system) • llvm (compiler) • WebKit (web browser engine) • Qt (UI engine) • 인공지능 • Tensorflow, Caffe, Torch (Deep learning) • OpenCV (Computer vision) 2016. 6. 7. 2016 C++ study 8
  • 9. 굳이 찾은 C++을 사용하는 분야 • 고성능을 요하는 분야 • Cocos2d-x (Game) • Unreal engine 4 (Game) • GNU Scientific Library (Scientific computing) • 용도에 따라 C++을 변용한 경우 • CUDA C/C++ (GPGPU) • Objective C/C++ (iOS 개발) 2016. 6. 7. 2016 C++ study 9
  • 10. 왜 C++인가? • 고성능 응용에 적합. • 시스템 레벨도 만들 수 있음. • 굉장히 널리 쓰이고 있음. • 지금도 발전 중! • 하지만… 2016. 6. 7. 2016 C++ study 10
  • 11. 비판의 목소리 • *YOU* are full of bullshit. C++ is horrible language. - Linux kernel을 C++로 바꾸자는 제안자에게 Linus Torvalds • C++은 태어나서는 안되는 언어였습니다. - 아주대 운영체제 수업 시간에 최경희 교수님 2016. 6. 7. 2016 C++ study 11
  • 12. 오늘 목표 • 왜 C++이 저런 취급을 받는지 알아보자 • 그래도 왜 C++을 해야 하는지 알아보자 • C++을 공부하는 방법을 알아보자 • C++ 표준에 대해서 알아보자 2016. 6. 7. 2016 C++ study 12
  • 13. C++이란? 2016. 6. 7. 2016 C++ study 13
  • 14. C++ 이란? • C++ is a general-purpose programming language providing a direct and efficient model of hardware combined with facilities for defining lightweight abstractions. - Bjarne Stroustrup 2016. 6. 7. 2016 C++ study 14
  • 15. C++을 관통하는 두 가지 요소 • Built-in operation과 타입이 하드웨어와 “직접적 으로” mapping 된다. • 이것이 C++이 빠르고, low-level 개발이 가능하게 되는 이유 • User-defined types를 폭 넓게 쓸 수 있는 추상화 메커니즘을 제공한다. 2016. 6. 7. 2016 C++ study 15
  • 16. Stroustrup의 언어 디자인 목표 • Leave no room for a lower-level language below C++. • 실제로 assembly language를 제외하면 C++보다 더 아 래를 내려가는 언어는 없음 • Zero-overhead principle: What you don’t use you don’t pay for. • 단 하나의 byte, 단 하나의 cycle도 코드의 의도와 다르 게 낭비되지 않는다. • 하지만 코드는 내 의도대로 짜지지 않는데… 2016. 6. 7. 2016 C++ study 16
  • 17. Programming styles 2016. 6. 7. 2016 C++ study 17
  • 18. Programming style • 흔히들 우리가 말하는 “언어 패러다임” 개념. • Procedural programming • Data abstraction • Object-oriented programming • Generic programming 2016. 6. 7. 2016 C++ study 18
  • 19. Procedural programming • Programming focused on processing and the design of suitable data structures. • ”어떻게 처리 할 것인가” 와 “어떻게 저장할 것인 가”가 관건 • C를 몇가지 예외를 제외하면 사실상 C++의 subset으로 만들면서 받아들인 style. • 물론 ”몇가지 예외” 때문에 함께 build를 하기 힘들다 는 문제가 발생했지만… 2016. 6. 7. 2016 C++ study 19
  • 20. Data abstraction • Programming focused on the design of interfaces, hiding implementation details in general and representations in particular. • 현대의 OO 언어라면 당연히 갖춰야 할 특성. • C++에선 Concrete class, abstract class라는 개념으 로 나뉜다. • 이 차이는 문법적으로는 굉장히 명확한 기준(pure virtual function의 존재성)으로 갈린다. • 하지만 설계의 의미론 상에선 꼭 PVF가 없다는 것이 abstract class가 아닌 것이 되는건 아니다. 2016. 6. 7. 2016 C++ study 20
  • 21. Object-oriented programming • Programming focused on the design, implementation, and use of class hierarchies. • Polymorphism, encapsulation 개념 • 사실 저자가 나눈대로 Data abstraction과 OOP를 나눌 수 있는 것 같진 않다. 2016. 6. 7. 2016 C++ study 21
  • 22. Generic programming • Programming focused on the design, implementation, and use of general algorithms. • Template: parametric polymorphism • Specialization • 가독성을 제외하면 굉장히 괜찮은 기능 중 하나. • Java의 generic 과는 구현 원리가 다름을 참고. 2016. 6. 7. 2016 C++ study 22
  • 23. 기타 특징들 2016. 6. 7. 2016 C++ study 23
  • 24. Type safety • 컴파일러가 특정 변수의 타입을 알 수 있나? 2016. 6. 7. 2016 C++ study 24
  • 25. Type safety • Static types • 하나의 변수는 하나의 타입을 가진다. • Expressiveness, maintainability, performance에 지대한 공헌 • Compile-time type checking • Type-checking과 data-hiding을 하기 위해선 compile time에 checking 하는것이 굉장히 중요하다. • 파이썬을 떠올려 보자… • 그리고 void*와 reinterpret_cast를 떠올려보자… • Type-safe는 이상이고, 우린 approaximate. • Low-level에선 답이 없다. 2016. 6. 7. 2016 C++ study 25
  • 26. 다양한 언어적 기능 2016. 6. 7. 2016 C++ study 26
  • 27. 다중 상속을 지원하는 언어? • 다중 상속, virtual inheritence와 같은 개념은 C++ 외에는 열심히 지원하는 언어는 잘 없다. • Template의 구현도 다른 strong type 언어와 큰 차 이가 있음. • 모던한 기능도 많이 생기는 중. • Lambda expression, smart-pointers, thread support, regular expression, locale 등… • 하지만 열심히 공부하고 나면 다 C#에겐 이미 있는 것 이라는 사실을 알게 된다. 허허. 2016. 6. 7. 2016 C++ study 27
  • 28. 많은 부분을 민간에 의지함 • 극복하기 위해 각고의 노력을 하는 것으로 보이 나(thread support) 아직도 java, C#과 같은 경쟁 언 어에 비해선 훨씬 부족하다. • Testing 모듈도 없다… • 그래도 나름 기본적인 standard library는 존재 • STL, diagnostics support, RE, locales, 각종 Utilities… 2016. 6. 7. 2016 C++ study 28
  • 29. 진정한 의미의 cross-platform • Vm 기반 언어의 한계 덕에 아이러니하게도 진정 한 cross-platform 언어는 C/C++/fortran 정도 밖에 없다. • 그리고 이들은 섞어 쓸 수 있다. 아무런 추가 overhead 없이. • 실제로 LAPACK은 fortran으로 쓰여있으나 아직까지도 C++ 코드와 함께 쓰이면서 commercial하게 쓰이고 있 다. • 다른 언어와의 공조도 쉽다. • JNI, JNA, python embedding 등… 2016. 6. 7. 2016 C++ study 29
  • 30. C 호환성 • 사실… 개발자 입장에선 포기하는게 낫다. • 그래도 가능하다. Extern “C”! • TC++PL은 좋은 C 코드는 C++가 된다고 주장한다. TCPL의 예제가 모두 C++ 컴파일러로 컴파일을 해 도 같은 동작을 한다고 한다. • 그래서 어쩌라고!ㅠㅠ • 여튼 자유롭게 별 생각없이 컴파일하고 갖다 쓸 수 있는게 아니므로 너무 쉽게 생각하진 말자. 2016. 6. 7. 2016 C++ study 30
  • 31. 표준안 2016. 6. 7. 2016 C++ study 31
  • 32. C++ 표준안? • ISO라는 국제 표준 기구에서 C++의 표준을 관리 하고 있음. • “C++ 11 support” 라는 것은 이 표준에 맞게 컴파 일러를 만들었다는 뜻. • 안타깝게도 어떤 표준 사항은 구현이 너무 어려워서 들어가 있지 않은 경우도 있다(…) 2016. 6. 7. 2016 C++ study 32
  • 33. 컴파일러 개발자도 아닌데… • 왜 표준을 읽어야 하나요? • 개발자는 risk management용 unit. 동작이 어떻게 되는 지 예상을 하면 할 수록 좋다. • 다른 사람들보다 한 발자국 먼저 나갈 수 있다. • Java 8 책을 쓴다면, java 8 스펙을 보는 수 밖에 없다. • 안타깝게도 어떤 국내 저자들은 스펙도 안보고 구라를 치기 도 한다. sizeof가 함수라느니… • 다 외울 필욘 없고, 필요한 것을 찾아볼 수 있는 수준 이면 된다. • 그리고 덕후들은 외우기도 하더라… 뭐지… 2016. 6. 7. 2016 C++ study 33
  • 34. 표준 외에 읽어볼만한 것들 • 기본서 • C++ 기초 플러스 • 가장 예제가 많고 설명이 자세한 책이다. • The C++ Programming Langauge, 4th edition. • The Creator of C++, Bjarne Stroustrup의 책. • 한글판도 나왔다. • Compiler 별 documentation • GCC manual • IBM AIX documentation • MSDN 등 2016. 6. 7. 2016 C++ study 34
  • 35. FAQ 2016. 6. 7. 2016 C++ study 35
  • 36. C++ 학습법? • Stroustrup 씨에 따르면, • C++를 공부하는 이유는 “더 좋은 프로그래머가 되기 위해” 라는 것을 잊지 마라. • 다음과 같은 것에 focus를 맞추시라. • Fundamental concepts • Type safety, resource management, and invariants • Programming techniques • Resource management using scoped objects, the use of iterators in algorithms • Language-technical detail의 함정에 빠지지 마라! 2016. 6. 7. 2016 C++ study 36
  • 37. C++ 학습법? • Stroustrup 씨에 따르면, • 프로그래밍 언어에 따라서 그에 맞는 best practices가 있으니, 그걸 따라가라. 기존의 네 관념을 고집하면 이상하고 느리고 공감 못받는 코드가 나올거다. • 마지막으로, 이건 언어 학습과 똑같다. • Know what you want to say • Practice. Imitate good writing. 2016. 6. 7. 2016 C++ study 37
  • 38. Modern C++ 최고의 실습 환경? • 묻지도 따지지도 말고 gcc가 좋은 환경 • 컴파일 된 것의 성능과는 무관하게 MS는 항상 gcc 보다 표준 지원이 느리고, 정확하지 않은 경 우가 많음 • 또… 생각해보면 MS 환경에서 시스템 프로그래 밍 할 일이 많지 않다. • 아니면 말고… 2016. 6. 7. 2016 C++ study 38
  • 39. C++로 linux device driver 되나요? • 안됩니다. • … 사실 안된다고 말하긴 애매한게, 위에서 언급 했듯 C/C++, fortran, assembly는 섞어 쓸 수 있다. • 하지만 결과적으로 device driver가 kernel과 접촉 하는 코드는 C로 짜야 한다. • rust로도 device driver programming이 가능은 합 니다. • https://github.com/tsgates/rust.ko 2016. 6. 7. 2016 C++ study 39
  • 40. References 2016. 6. 7. 2016 C++ study 40
  • 41. References • TC++PL • 꼭 읽어 보세요. 저자의 따뜻한 마음을 영어로도 느낄 수 있는 책 임. • en.cppreference.com • wikipedia • C++ 11 표준 커미티 사이트 • http://www.open-std.org/jtc1/sc22/wg21/ • C++ 11 표준 working draft(원본은 돈 내고 사야 함) • http://www.open- std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf • The creator of C++, Stroustrup 의 홈페이지 • http://stroustrup.com/ • 그리고 큰 형님께서 내주시는 과제 • http://stroustrup.com/4thExercises.pdf 2016. 6. 7. 2016 C++ study 41