C++/카루의 C++ 강좌

[카루의 C++강좌] 0. 시작하며 & 목차

카루-R 2020. 3. 20. 16:31
반응형

안녕하세요! 카루입니다.

C++도 다 같은 C++이 아니라는 것 알고 계시죠?

C++의 역사를 살펴보자면, 처음에 공식으로 승인된 표준안 ISO/IEC 14882:1998 (약칭 C++98) 을 시작으로 C++의 공식 표준안이 시작이 되죠. 그 후 별로 변한 게 없던 C++03이 나오고, 2007년 TR1 (테크니컬 리포트)가 제정되면서 슬슬 변하기 시작합니다.

마침내 2011년 8월 12일, ISO/IEC 14882:2011, C++11이라는 이름으로 완전히 새롭게 변한 C++이 제정되었고, 현재 대부분의 책도 C++11을 기준으로 설명합니다. 이 이후로 3년에 한 번씩 업데이트가 진행되면서 C++14에서 사소한 개선이 되다가, 또다시 C++17을 거치면서 크게 변하고, 마침내 2020년 현재 C++20이 표준화를 앞에 두고 있는 상황입니다. 아직 표준화는 안 되었지만 여러 컴파일러에선 'C++2a' 라는 이름으로 새 표준안 (예정)을 지원하고 있습니다. GCC/Clang은 -std=c++2a 라는 이름으로 지원을 하죠.

아무튼, 국내 서적에서도 C++20은 커녕 C++17/C++14에 대한 이야기가 많지 않습니다. 저는 많은 사람들이 이런 모던 C++의 기능을 더 많이 알고 사용했으면 좋겠다는 바람에서 본 강좌를 작성하게 되었습니다. 그래서 이 강좌는 C++17/C++20 및 C++2b에 맞춰 진행할 예정이며, C++17에서 삭제된 std::auto_ptr나 삼중자와 같이 제거된 부분은 언급만 하고 지나가겠습니다. 대신 새로 추가된 기능을 잘 이해하실 수 있도록 설명을 적극적으로 할 것이며, 궁금한 점이 있으시다면 댓글을 통해 언제든지 질문해 주세요. 성심성의껏 답변해 드리겠습니다.

우선 제가 쓸 강좌는 크게 세 분류로 나누어집니다.

메인스트림: [C++ 강좌] ㅡ C++을 처음 접하시는 분들께

C++17/C++20 및 C++2b에 맞춰 진행하는 강좌입니다. C++의 처음부터 끝까지 모든 내용을 다룹니다. C++을 공부해보시고 싶으신 분들이라면 현재 카테고리 (글 제목 맨 앞에 [C++강좌]가 있습니다)의 모든 글을 읽어보시면서 따라와 주세요.

예시) 자료형, 변수, 함수, 클래스, 생성자, 연산자 오버로딩, 상속, 템플릿, 예외 처리...

심화 과정: [C++ 심화]

기본 커리큘럼에서 배운 내용을 바탕으로 응용하여 더 심화된 내용까지 파고듭니다.

이것까지 이해하신다면 C++의 강력한 기능을 자유자재로 사용하실 수 있습니다.

예시) std::array vs C-array, Deduction guides, 함수의 매개변수로서의 배열....

새 표준안 또는 특수 과정: [C++ 특수]

이건 국내 서적에도 잘 기록되어있지 않은 C++의 심화 기능들에 대해서 설명합니다.

조금 어려울수도 있지만 훨씬 더 편리한 코딩을 가능하게 합니다. en.cppreference.com의 설명을 참고합니다.

예시) C++20 consteval, std::format, [[likely]], operator <=>....

저도 네이x 블로그나 티스토리 블로그에 올라온 글들을 보고 도움이 많이 되었던 만큼, 제 글도 C++을 막 시작하신 분들께 도움이 되면 좋겠습니다.

목차

0. 프로그래밍 시작하기

  • 0-1. 개발 도구 설치 및 C++환경 준비
  • 0-2. 첫번째 프로그램으로 개발 도구와 친해지기

1. 처음 접하는 C++

2. 본격적인 C++

3. 제어하는 C++

4. 구조화하는 C++

  • 4-1. 함수의 선언과 정의
  • 4-2. 디폴트 매개변수와 다중정의의 모호성
  • 4-3. 템플릿 I - 함수 템플릿
  • 4-4. 재귀함수, 인라인 함수와 constexpr 함수 // C++11/14
    • 연계과정: [C++ 심화] 9. 템플릿 메타 프로그래밍과 constexpr
  • 4-5. 네임스페이스와 인라인 네임스페이스, 다중정의 // 식별자 검색
  • 4-6. using문과 중첩 네임스페이스 // C++17/20의 Nested namespace
    • 연계과정: [C++ 특수] 3. Attribute에서의 네임스페이스와 using
  • 4-7. enum과 enum class
    • 연계과정: [C++ 특수] 4. 자료형으로써의 enum과 형변환 // C++1z 변경항목

5. 강력한 C++

  • 5-1. 배열 II
  • 5-2. 포인터 기본 // 선언, 초기화, 역참조
    • 연계과정: [C++ 심화] 10. restrict 포인터
  • 5-3. 배열과 포인터, 범위기반 for문
  • 5-4. 포인터와 동적할당 // 연산, void*, 동적할당
    • 연계과정: [C++ 심화] 11. new의 숨은 기능
  • 5-5. 템플릿 II - 변수 템플릿
  • 5-6. 변수의 초기화 II, 참조형 변수 II // nullptr, &&
  • 5-7. 참조와 포인터
  • 5-8. 포인터 심화 // 이중포인터, 포인터 배열과 함수 포인터

6. 문자열 다루기

  • 6-1. 문자형의 포인터, 상수 문자열 // RAW string
    • 연계과정: [C++ 심화] 12. C++과 유니코드
  • 6-2. 문자 배열과 C 스타일 문자열
  • 6-3. 문자열과 포인터 // 연산, null, 할당
  • 6-4. std::string과 문자열 함수
    • 연계과정: [C++ 심화] 13. std::string을 구현해보자!
  • 6-5. std::stringstream과 std::sprintf()
    • 연계과정: [C++ 심화] 14. std::osyncstream

7. 클래스와 객체

  • 7-1. 클래스와 구조체, 멤버 변수와 멤버 함수 // 포인터 멤버, 중첩 클래스
  • 7-2. 구조체의 배열과 포인터, 초기화 // alignas, alignof
  • 7-3. 함수와 구조체
  • 7-4. 공용체
  • 7-5. 클래스의 접근제한자와 생성자/소멸자
  • 7-6. 생성자 심화, 참조 멤버 // default, 다중정의, 이니셜라이저, delete
  • 7-7. 클래스와 멤버함수와 this포인터, 정적 멤버 // 상수메서드, mutable 멤버
  • 7-8. 복사 생성자와 함수 호출
  • 7-9. 깊은 복사와 얕은 복사, 대입연산자 재정의
  • 7-10. 변환 생성자와 형 변환 연산자 // explicit(bool)
  • 7-11. 이름 없는 임시 객체, r-value 참조
  • 7-12. 이동 생성자와 이동 시맨틱, string_view
  • 7-13. 멤버 함수 심화 // const, volatile, &, && ref qualifiers

8. 클래스의 확장

  • 8-1. 산술 연산자 오버로딩
  • 8-2. 대입 연산자 오버로딩 // 복합, 이동
  • 8-3. 관계, 배열, ->, 증감 연산자
  • 8-4. 상속, 접근 제한자 복습
  • 8-5. 멤버 함수 오버라이딩 // override
  • 8-6. 참조 형식과 실형식
  • 8-7. 상속에서의 생성자와 소멸자 // 생성자 선택, 상속
  • 8-8. 가상 함수와 가상 소멸자 // final
  • 8-9. 가상 함수 테이블, 동적 바인딩과 정적 바인딩
  • 8-10. 순수 가상 클래스와 인터페이스
  • 8-11. 인터페이스 상속과 다중 상속, 가상 상속
  • 8-12. 형 변환 연산자와 상속
  • 8-13. 상속에서의 연산자 오버로딩
  • 8-14. 친구? friend 함수와 클래스, 전역 연산자 오버로딩
  • 8-15. 클래스들간의 관계 // 수평, 집합

9. 코딩을 편리하게, 더 안전하게

  • 9-1. 템플릿 III - 클래스 템플릿
  • 9-2. 스마트 포인터와 std::array
  • 9-3. 템플릿 심화 I - 템플릿 매개변수와 디폴트 값
  • 9-4. 템플릿 심화 II - 특수화와 부분 특수화
  • 9-5. 템플릿 심화 III - 가변 템플릿과 표현식 접기 // C++11/17
  • 9-6. std::initializer_list와 가변 함수
  • 9-7. 람다 식과 매개변수, 콜백 // [=, this]
  • 9-8. typedef와 using, 컨셉 Concepts // C++20

10. 예외 처리

  • 10-1. try~catch 문
  • 10-2. noexcept 지정자
  • 10-3. static_assert와 assert
  • 10-4. [[maybe_unused]]와 [[nodiscard]], [[deprecated]]

11. C++ 표준 템플릿 라이브러리, STL

  • 11-1. std::pair, std::tuple과 함수의 반환, std::get
  • 11-2. structed bindings와 decltype(auto) 반환
  • 11-3. std::vector과 std::list
  • 11-4. std::any와 std::variant, std::optional
  • 11-5. std::initializer_lists와 가변 함수
  • 11-6. 파일시스템

각 강좌가 작성될 경우 해당 문장을 클릭하시면 강좌로 넘어가실 수 있습니다.

반응형