본문 바로가기
GD's IT Lectures : 기초부터 시리즈/C, C++ 기초부터 ~

[C/C++ 프로그래밍 : 중급] C/C++ 중급과정 소개

by GDNGY 2023. 5. 16.

C/C++ 중급과정 소개

 


 

 

 


[C/C++ 중급과정]

 

Chapter 1. 객체 지향 프로그래밍의 개념

Chapter 2. 클래스와 객체

Chapter 3. 생성자와 소멸자

Chapter 4. 접근 제어 지시자

Chapter 5. 상속

Chapter 6. 다형성

Chapter 7. 가상 함수와 추상 클래스

Chapter 8. 예외 처리와 오류 처리

Chapter 9. STL 컨테이너

Chapter 10. STL 알고리즘

Chapter 11. 스마트 포인터

Chapter 12. 람다 표현식

Chapter 13. 스레드

Chapter 14. 네트워크 프로그래밍

Chapter 15. GUI 프로그래밍

 


Chapter 1. 객체 지향 프로그래밍의 개념

객체 지향 프로그래밍은 현대 소프트웨어 개발의 핵심 패러다임입니다. 이 첫 번째 장에서는 객체 지향 프로그래밍의 개념을 소개하고, 그 중심에 있는 클래스, 객체, 메서드, 속성, 상속, 다형성, 캡슐화 등의 요소들을 다룹니다. 또한 C++에서 객체 지향 프로그래밍이 어떻게 작동하는지 설명하고, 효과적인 객체 지향 설계를 위한 SOLID 원칙에 대해 배웁니다. 이 장을 통해 C++ 프로그래밍의 객체 지향적 접근 방식을 이해하는데 중요한 기초를 마련하게 될 것입니다.

Chapter 2. 클래스와 객체

클래스는 데이터와 함수를 하나로 묶은 것으로, 객체 지향 프로그래밍의 기본 구성 요소입니다. 우리는 클래스를 통해 객체를 생성하며, 이렇게 생성된 객체를 이용해 프로그램을 작성합니다. 이 챕터에서는 클래스와 객체의 정의와 사용 방법, 이 둘의 관계, 클래스의 선언 및 구현, 접근 지시자, this 포인터, 그리고 정적 멤버와 정적 함수에 대해 배웁니다. 또한, 객체 지향 프로그래밍의 기본 개념인 캡슐화, 상속, 다형성에 대해 다시 한번 복습해 볼 예정입니다.

Chapter 3. 생성자와 소멸자

객체의 수명이 시작되고 종료될 때 자동으로 호출되는 이 두 함수는 클래스 설계와 객체 관리에 있어 중요한 역할을 합니다. 생성자는 객체가 생성될 때 초기화를 담당하며, 소멸자는 객체가 소멸될 때 정리 작업을 담당합니다. 이를 통해 우리는 객체의 생명주기를 안전하게 관리할 수 있습니다. 이 챕터에서는 생성자와 소멸자의 정의, 선언 및 구현 방법, 호출 시점과 순서, 그리고 동적 메모리 할당에 대해 배웁니다.

Chapter 4. 접근 제어 지시자

클래스 또는 구조체의 멤버들이 어느 정도까지 접근 가능한지를 결정하는 지시자를 말합니다. C++에서는 세 가지 접근 제어 지시자, 즉 'public', 'private', 'protected'를 제공합니다. 'public'은 가장 기본적인 접근 제어 지시자로, 클래스 내부, 클래스 외부, 파생 클래스에서 모두 접근이 가능합니다. 'private'은 해당 클래스의 멤버들만 접근이 가능하고, 그 외에서는 접근이 불가능합니다. 'protected'는 해당 클래스와 파생 클래스에서 접근이 가능하고, 그 외에서는 접근이 불가능합니다. 접근 제어 지시자는 캡슐화, 정보 은닉, 재사용성, 유지 보수의 편리성 등의 객체 지향 프로그래밍의 핵심 원칙을 지원하는 데 중요한 역할을 합니다. 이 장에서는 각 접근 제어 지시자에 대한 자세한 설명과 사용 방법, 그리고 클래스 설계 시 접근 제어 지시자의 활용에 대해 설명합니다.

Chapter 5. 상속

상속은 객체 지향 프로그래밍의 중요한 요소 중 하나로, 코드의 재사용성을 향상시키고, 더 일반적인 클래스에서 더 구체적인 클래스로의 자연스러운 확장을 가능하게 합니다. 이 장에서는 기본 상속, 다중 상속, 그리고 가상 상속에 대해 배웁니다. 기본 상속은 가장 간단한 형태의 상속으로, 하나의 기본 클래스에서 파생 클래스를 생성하는 것을 포함합니다. 다중 상속은 두 개 이상의 클래스를 기본 클래스로 가질 수 있게 해 주며, 가상 상속은 다중 상속에서 발생할 수 있는 문제, 특히 다이아몬드 문제를 해결하는 데 사용됩니다. 또한, 상속을 통해 어떻게 다형성을 구현할 수 있는지, 그리고 상속 과정에서 생성자와 소멸자가 어떻게 동작하는지에 대해서도 다룹니다. 마지막으로, 상속의 장단점 및 대안에 대해 논의합니다.

Chapter 6. 다형성

다형성은 객체 지향 프로그래밍의 핵심 원리 중 하나로, 프로그램이 실행 시점에 다른 타입의 객체에 대해 다른 행동을 할 수 있게 합니다. 이 장에서는 함수 오버로딩과 연산자 오버로딩을 통해 컴파일 시간 다형성을 이해하게 됩니다. 이는 같은 이름의 함수나 연산자가 다른 인자를 받아 다른 작업을 수행할 수 있음을 의미합니다. 또한, 가상 함수와 순수 가상 함수를 통해 런타임 다형성을 이해하게 됩니다. 이는 상속 관계에 있는 클래스들의 객체가 같은 이름의 함수를 통해 다른 동작을 수행할 수 있음을 의미합니다. 마지막으로, 다형성의 활용 방법과 장점, 그리고 런타임 타입 식별(RTTI)에 대해서도 배웁니다. RTTI는 실행 시점에 객체의 실제 타입을 확인하는 기능을 제공합니다.

Chapter 7. 가상 함수와 추상 클래스

가상 함수는 다형성을 실현하기 위한 C++의 중요한 도구로서, 기본 클래스의 함수를 파생 클래스에서 재정의할 수 있게 해줍니다. 먼저 가상 함수의 이해부터 시작하여, 그 사용 방법과 동작 원리에 대해 배웁니다. 이후, 가상 함수를 활용한 다형성, 코드 재사용성 및 실제 프로그래밍 예제를 통해 가상 함수의 실용성을 알아봅니다. 이어서 추상 클래스와 순수 가상 함수에 대해 다룹니다. 추상 클래스는 순수 가상 함수를 하나 이상 포함하는 클래스를 말하며, 이를 이용해 인터페이스를 구현할 수 있습니다. 추상 클래스는 객체를 직접 생성할 수 없으며, 파생 클래스를 통해 사용됩니다.

Chapter 8. 예외 처리와 오류 처리

예외 처리의 이해부터 시작하여, 예외의 정의와 처리의 필요성, 그리고 C++에서의 예외 처리 메커니즘을 배웁니다. 그 다음으로는 try, catch, throw에 대한 사용법을 살펴보고, 여러 catch 블록을 사용하는 방법을 학습합니다.
또한 사용자 정의 예외 클래스를 만들어 예외를 더 효과적으로 처리하는 방법을 배웁니다. 이를 통해 보다 세밀한 예외 관리와 활용이 가능합니다.
그리고 예외의 전파와 예외 명세에 대해 알아보고, 예외 안전성과 예외 중립성에 대해 배웁니다. 이를 통해 프로그램에서 안전하게 예외를 처리하고, 다양한 환경에서 잘 동작하는 코드를 작성하는 방법을 이해하게 됩니다.
마지막으로 오류 처리 기법에 대해 알아보고, 오류 코드와 오류 반환, 그리고 C++에서의 assert 사용법을 배우며, 예외 처리와 오류 처리의 차이점을 이해합니다.

Chapter 9. STL 컨테이너

STL에 대한 기본 개념을 이해하고, 그 구성요소인 컨테이너, 반복자, 알고리즘에 대해 알아봅니다. 또한 STL의 장점과 특징에 대해서도 살펴봅니다. 다음으로, 시퀀스 컨테이너인 vector, list, deque, array, forward_list를 알아보며 각각의 사용 방법에 대해 배우게 됩니다. 또한 컨테이너 어댑터인 stack, queue, priority_queue와 연관 컨테이너인 set, multiset, map, multimap에 대해 알아보고, 비순차 컨테이너인 unordered_set, unordered_multiset, unordered_map, unordered_multimap의 사용법을 배웁니다. 이어서, 모든 컨테이너에서 사용 가능한 공통 멤버 함수에 대해 알아보며, 실제 예제를 통해 그 사용법을 이해하게 됩니다. 마지막으로, 컨테이너와 반복자의 관계에 대해 이해합니다. 반복자의 개념과 필요성, 그리고 컨테이너와 반복자가 상호작용하는 방법을 배웁니다.

Chapter 10. STL 알고리즘

STL 알고리즘이 무엇인지, 그 특징과 분류에 대해 이해합니다. 다음으로 비 수정 시퀀스 알고리즘으로 for_each, find와 그 변형, count와 그 변형에 대해 배웁니다. 수정 시퀀스 알고리즘인 copy와 그 변형, move, swap과 그 변형도 이해하게 됩니다. 이후 정렬 알고리즘으로 sort, stable_sort, partial_sort, nth_element를 배우며, 이진 검색 알고리즘으로 lower_bound, upper_bound, equal_range, binary_search에 대해 알아봅니다. 또한 수치 알고리즘으로 iota, accumulate, inner_product, adjacent_difference, partial_sum에 대해 배우며, 집합 알고리즘인 merge, includes, set_union 등에 대해 이해하게 됩니다. 힙 알고리즘으로 make_heap과 그 변형, sort_heap, is_heap과 그 변형을 알아보고, 마지막으로 최소/최대 알고리즘인 min, max와 그 변형에 대해 배웁니다.

Chapter 11. 스마트 포인터

스마트 포인터가 무엇인지, 그 필요성과 사용 이유, 그리고 작동 원리에 대해 알아봅니다. 다음으로, auto_ptr에 대해 배웁니다. auto_ptr의 정의와 사용법, 제약사항과 문제점, 그리고 예제 코드와 활용법을 소개합니다. unique_ptr에 대해 배웁니다. unique_ptr의 정의와 사용법, 특징, 그리고 예제 코드와 활용법을 알아봅니다. shared_ptr에 대해 배웁니다. shared_ptr의 정의와 사용법, 참조 카운팅 방식, 그리고 예제 코드와 활용법을 소개합니다. weak_ptr에 대해 배웁니다. weak_ptr의 정의와 사용법, 특징과 필요성, 그리고 예제 코드와 활용법을 알아봅니다. 마지막으로, 사용자 정의 스마트 포인터에 대해 배웁니다. 사용자 정의 스마트 포인터의 구현 방법, 활용 방안, 그리고 예제 코드와 활용법을 배우게 됩니다.

Chapter 12. 람다 표현식

람다 표현식이 무엇인지, 그 필요성과 사용 이유, 그리고 작동 원리에 대해 설명합니다. 다음으로, 람다 표현식의 기본 형식에 대해 배웁니다. 이는 람다 표현식의 기본 문법, 반환 타입, 그리고 예제 코드와 활용법을 포함합니다. 람다 표현식의 캡처 리스트에 대해서도 배웁니다. 이는 캡처 리스트가 무엇인지, 사용법, 그리고 예제 코드와 활용법을 다룹니다. 람다 표현식과 함수 객체에 대한 비교와 이를 어떻게 대체할 수 있는지에 대해서도 설명합니다. 람다 표현식을 이용한 함수 객체의 예제 코드와 활용법도 제공합니다. 마지막으로, 람다 표현식을 이용한 STL 알고리즘 사용법과 STL 알고리즘에서의 람다 표현식 활용 사례를 알아봅니다. STL 알고리즘과 람다 표현식의 조합에 대한 예제 코드와 활용법도 소개합니다.

Chapter 13. 스레드

레드가 무엇인지, 그 필요성, 그리고 멀티 스레드와 멀티 프로세스의 차이에 대해 배웁니다. 다음으로, 스레드의 생성과 종료에 대해 알아보며, 스레드의 생명주기를 이해하게 됩니다. 스레드 동기화 기술에 대해서도 배웁니다. 이는 뮤텍스와 세마포어의 개념과 이들을 활용한 스레드 동기화 방법을 다룹니다. 또한, 조건 변수와 스레드 풀에 대해 배웁니다. 이는 조건 변수의 개념과 이를 이용한 스레드 관리, 그리고 스레드 풀을 통한 효율적인 스레드 관리 방법을 다룹니다. C++11에서의 스레드에 대해서도 알아보게 됩니다. 이는 C++11의 스레드 라이브러리 소개, 스레드 생성과 관리, 그리고 스레드 동기화에 대한 내용을 포함합니다. 스레드 로컬 저장소에 대한 내용, 그리고 스레드 안전성에 대한 내용도 포함되어 있습니다.

Chapter 14. 네트워크 프로그래밍

네트워크 프로그래밍의 개념과 필요성, 그리고 기본적인 클라이언트/서버 모델과 네트워크 프로토콜, 소켓에 대해 배울 것입니다. 다음으로 소켓 프로그래밍에 대한 기본적인 지식을 다루는데, 소켓의 생성과 사용, TCP와 UDP 프로그래밍에 대한 내용을 포함합니다. 그리고 멀티스레딩과 네트워크에 대해 배우며, 멀티스레드 서버의 필요성, 멀티스레드 TCP와 UDP 서버의 구현에 대해 다룹니다. 비동기 I/O와 이벤트 기반 네트워크에 대한 내용도 있습니다. 여기서는 비동기 I/O의 개념, select와 poll을 이용한 이벤트 기반 서버, 그리고 epoll을 이용한 고성능 서버 구현에 대해 배웁니다. 또한 네트워크 보안에 대한 내용을 다루며, SSL/TLS를 이용한 암호화 통신과 OpenSSL을 이용한 네트워크 프로그래밍에 대해 배웁니다. 마지막으로 고급 네트워크 프로그래밍에 대한 내용이 있습니다. 이는 Raw 소켓과 ICMP, 멀티캐스트와 브로드캐스트, 그리고 네트워크 프로그래밍 최적화 기법에 대한 내용을 포함합니다.

Chapter 15. GUI 프로그래밍

GUI(Graphical User Interface) 프로그래밍의 필요성과 기본 원리를 배웁니다. C/C++에서 사용 가능한 다양한 GUI 라이브러리 선택에 대해 논의합니다. 다음으로, 윈도우와 컨트롤 생성, 관리, 그리고 메시지 처리 및 이벤트 핸들링에 대한 기본적인 개념을 다룹니다. 이어서, WinAPI를 이용한 GUI 프로그래밍에 대해 배웁니다. 이 섹션에서는 WinAPI에 대한 이해와 WinAPI를 이용한 윈도우 생성, 이벤트 처리 방법에 대해 다룹니다. MFC(Microsoft Foundation Class)를 이용한 GUI 프로그래밍에 대한 내용이 다음으로 나옵니다. MFC에 대한 이해와 MFC를 이용한 윈도우 생성, 이벤트 처리 방법에 대해 학습합니다. 또한 Qt를 이용한 GUI 프로그래밍에 대한 내용도 포함되어 있습니다. Qt에 대한 이해와 Qt를 이용한 윈도우 생성, 이벤트 처리에 대해 배울 것입니다. 마지막으로, 고급 GUI 프로그래밍에 대한 내용을 다룹니다. 이 섹션에서는 다양한 GUI 컨트롤 이용 방법, 2D 그래픽스 프로그래밍, 그리고 3D 그래픽스 프로그래밍에 대해 배웁니다.
반응형

댓글