ecole42

CPP Piscine

CPP Piscine은 ecole42의 C++ 교육 과정으로, C++ 프로그래밍의 기초부터 고급 개념까지 8개의 모듈을 통해 단계적으로 학습하는 프로젝트. 메모리 관리, 객체지향 프로그래밍, 템플릿, STL 등 C++의 핵심 개념을 실습을 통해 이해하고, 각 모듈별 exercise를 통해 실전 프로그래밍 능력을 향상시킨다

C++

개요

이 프로젝트는 ecole42의 C++ 교육 과정을 통해 C++ 프로그래밍의 기초부터 고급 개념까지 단계적으로 학습할 수 있도록 설계되었다. 각 모듈은 특정 C++ 개념에 집중하여 실습을 통해 이해를 돕는다.

프로젝트 구조

42cpp_piscine/
├── module00/  # C++ 기초
├── module01/  # 메모리 할당, 참조, 포인터
├── module02/  # 고정소수점, 연산자 오버로딩
├── module03/  # 상속
├── module04/  # 다형성, 추상 클래스
├── module05/  # 예외 처리
├── module06/  # 타입 캐스팅
├── module07/  # 템플릿
└── module08/  # STL 컨테이너

모듈별 설명

Module 00 - C++ 기초

C++의 기본 문법과 클래스 개념을 학습한다.

  • ex00 - megaphone: 문자열을 대문자로 변환하는 프로그램
  • ex01 - phonebook: 간단한 전화번호부 프로그램 (최대 8개 연락처)
  • ex02 - accounts: 계좌 클래스 구현

주요 학습 내용:

  • 기본 입출력 (std::cout, std::cin)
  • 문자열 처리
  • 클래스와 객체의 기본 개념

Module 01 - 메모리 할당과 참조

메모리 관리, 포인터, 참조에 대해 학습한다.

  • ex00 - Pony: 힙과 스택에 객체 생성하기
  • ex01: 포인터와 참조의 차이
  • ex02 - Zombie: 동적 메모리 할당을 사용한 좀비 생성
  • ex03 - ZombieHorde: 좀비 무리 생성
  • ex04: 포인터와 참조 심화
  • ex05 - Brain: 포인터를 사용한 객체 관계
  • ex06 - Weapon: 참조와 포인터를 사용한 무기 시스템
  • ex07 - replace: 파일 읽기/쓰기 및 문자열 치환
  • ex08: 참조와 포인터 심화
  • ex09 - Logger: 파일 로깅 시스템
  • ex10 - Read: 파일 읽기 프로그램

주요 학습 내용:

  • 힙(Heap)과 스택(Stack) 메모리
  • 동적 메모리 할당 (new, delete)
  • 포인터와 참조의 차이와 사용법
  • 파일 입출력 (std::ifstream, std::ofstream)

Module 02 - 고정소수점과 연산자 오버로딩

고정소수점 수학과 연산자 오버로딩을 학습한다.

  • ex00: 기본 클래스 복사 생성자와 할당 연산자
  • ex01: 고정소수점 클래스 기본 구현
  • ex02: 고정소수점 연산자 오버로딩
  • ex03 - eval_expr: 고정소수점을 사용한 수식 계산기

주요 학습 내용:

  • 복사 생성자와 할당 연산자
  • 연산자 오버로딩 (+, -, *, /, ==, !=, >, < 등)
  • 고정소수점 수학 구현
  • 전위/후위 증감 연산자

Module 03 - 상속

C++의 상속 개념을 학습한다.

  • ex00 - FragTrap: 기본 클래스 구현
  • ex01 - ScavTrap: 상속을 통한 클래스 확장
  • ex02: 상속 계층 구조 (ClapTrap → FragTrap, ScavTrap)
  • ex03 - NinjaTrap: 다중 상속 개념
  • ex04 - SuperTrap: 다중 상속과 가상 상속

주요 학습 내용:

  • 클래스 상속 (: public BaseClass)
  • 접근 제어자 (public, protected, private)
  • 생성자/소멸자 호출 순서
  • 다중 상속과 다이아몬드 문제
  • 가상 상속 (virtual)

Module 04 - 다형성과 추상 클래스

다형성과 추상 클래스, 인터페이스를 학습한다.

  • ex00 - Sorcerer: 가상 함수와 다형성 기본
  • ex01 - Character: 추상 클래스와 순수 가상 함수
  • ex02 - Squad: 인터페이스 구현
  • ex03 - Materia: 인터페이스와 팩토리 패턴
  • ex04 - Mining: 인터페이스 다중 구현

주요 학습 내용:

  • 가상 함수 (virtual)
  • 순수 가상 함수 (= 0)
  • 추상 클래스
  • 인터페이스 패턴
  • 다형성 활용

Module 05 - 예외 처리

C++의 예외 처리 메커니즘을 학습한다.

  • ex00 - Bureaucrat: 기본 예외 처리
  • ex01: 예외 클래스 정의
  • ex02: 예외 처리 심화
  • ex03: 예외 처리 실전
  • ex04: 예외 처리 고급
  • ex05: 예외 처리 종합

주요 학습 내용:

  • try-catch 블록
  • 예외 클래스 정의 및 상속
  • std::exception 상속
  • 예외 안전성 (Exception Safety)
  • RAII 패턴

Module 06 - 타입 캐스팅

C++의 다양한 타입 캐스팅 방법을 학습한다.

  • ex00 - Convert: 스칼라 타입 변환
  • ex01: 타입 캐스팅 심화
  • ex02: 다양한 캐스팅 연산자

주요 학습 내용:

  • static_cast: 안전한 타입 변환
  • dynamic_cast: 런타임 타입 확인
  • reinterpret_cast: 비트 단위 재해석
  • const_cast: const 제거

Module 07 - 템플릿

C++ 템플릿 프로그래밍을 학습한다.

  • ex00: 함수 템플릿
  • ex01: 클래스 템플릿
  • ex02: 템플릿 특수화

주요 학습 내용:

  • 함수 템플릿 (template<typename T>)
  • 클래스 템플릿
  • 템플릿 특수화
  • 템플릿 메타프로그래밍 기초

Module 08 - STL 컨테이너

C++ 표준 라이브러리의 컨테이너를 학습한다.

  • ex00 - easyfind: STL 컨테이너 탐색
  • ex01: 컨테이너 심화
  • ex02: 알고리즘 활용

주요 학습 내용:

  • std::vector, std::list, std::deque
  • std::set, std::map
  • 반복자 (Iterator)
  • STL 알고리즘 (std::find, std::sort 등)

빌드 및 실행

각 모듈의 각 exercise는 독립적으로 빌드할 수 있다. 대부분의 exercise는 Makefile 또는 compile.sh 스크립트를 포함하고 있다.

Makefile이 있는 경우:

cd module00/ex00
make
./megaphone "hello world"

compile.sh가 있는 경우:

cd module01/ex00
chmod +x compile.sh
./compile.sh
./a.out

학습 내용

이 프로젝트를 통해 학습하는 주요 C++ 개념들:

  1. 기본 문법: 변수, 함수, 클래스, 객체
  2. 메모리 관리: 힙/스택, 동적 할당, 스마트 포인터 개념
  3. 객체지향 프로그래밍: 캡슐화, 상속, 다형성
  4. 연산자 오버로딩: 사용자 정의 타입의 연산자 정의
  5. 예외 처리: 안전한 에러 처리 메커니즘
  6. 템플릿: 제네릭 프로그래밍
  7. STL: 표준 라이브러리 활용

참고사항

  • 모든 코드는 42 코딩 스타일 가이드를 따른다
  • 각 exercise는 특정 C++ 개념에 집중하여 설계되었다
  • en.subject.pdf 파일에서 각 모듈의 상세한 요구사항을 확인할 수 있다