2025/06 14

9. Generic Programming과 템플릿 (4) - 템플릿 인자 & 특수화

Generic Programming using Template◆ 템플릿의 다중 매개변수 ● 서로 다른 이름을 사용하여 다중 매개변수를 정의 가능 ● 매개변수가 다르다면 서로 타입이 다를 수 있다template void func(T1 a, T2 b){ std::cout (10, 20.05);// T1은 int 이고 T2는 double 인 func 함수가 생성된다.func('A', 12.4);// 타입을 명시하진 않았지만, T1은 char 이고 T2가 double 인 것이 명확하므로 해당하는 함수가 생성된다.T1은 int 이고 T2는 double 인 func 함수가 생성된다.타입을 명시하진 않았지만, T1은 char 이고 T2가 double 인 것이 명확하므로 해당하는 함수가 생성된다.📘..

C++/C++ : Study 2025.06.30

9. Generic Programming과 템플릿 (3) - 함수 템플릿

Generic Programming using Template◆ C++ 템플릿 ● "설계도" 개념 ● 함수 템플릿과 클래스 템플릿 구현을 지원 ● 어떤 데이터 타입이든, 컴파일러가 적절한 함수 / 클래스를 설계도를 기반으로 생성한다 ☞ 다른 언어의 경우 런타임에서 생성하는 경우도 있다 ☞ 사용하지 않는 경우 생성하지 않는다 ● 제네릭 프로그래밍 / 메타 프로그래밍📘 핵심 요약: 템플릿을 이용한 제너릭 프로그래밍 개념✅ 템플릿이란?C++ 템플릿은 데이터 타입에 관계없이 동작하는 코드의 설계도이다.즉, 하나의 템플릿 코드를 바탕으로 타입별 함수나 클래스 정의가 자동으로 생성된다.template T max(T a, T b) { re..

C++/C++ : Study 2025.06.26

9. Generic Programming과 템플릿 (2) - 매크로 사용

Generic Programming using Macro◆ 매크로를 사용한 제네릭 프로그래밍◆ 매그로 ( #define ) ● 코드의 단순 대체 (복붙)#define MAX_SIZE 100 #define PI 3.14159📘 핵심 요약: 매크로를 사용한 제너릭 프로그래밍 (1) – #define의 기본 역할✅ 매크로란?C++에서 #으로 시작하는 코드는 전처리기(preprocessor)에 의해 처리된다.대표적인 예가 #include, 그리고 이번에 다룰 #define이다.✅ 빌드 과정에서의 위치전처리기: 컴파일 이전에 코드에 대해 대체, 제거 등의 작업을 수행한다.#define은 이 전처리 과정에서 코드에 있는 특정 식별자(identifier)를 고정된 값으로 대체한다.✅ #define 예제#..

C++/C++ : Study 2025.06.25

9. Generic Programming과 템플릿 (1) - 개요

Generic Programming 과 템플릿◆ Generic Programming 이란 ● Macro를 활용한 Generic Programming◆ 템플릿을 활용한 Generic Programming ● 함수 템플릿 ● 클래스 템플릿📘 핵심 요약: Generic Programming과 템플릿 학습 개요✅ 학습 배경C++의 STL(Standard Template Library)은 템플릿 기반으로 구성되어 있으며,그 동작 원리를 이해하려면 Generic Programming과 템플릿에 대한 개념적 이해가 필요하다.✅ 학습 목표이번 장에서는 타입에 독립적인 코드를 작성하는 기법인 Generic Programming을 이해하고,이를 구현하기 위한 도구인 템플릿의 사용 방법을 학습..

C++/C++ : Study 2025.06.24

8. 연산자 오버로딩 (10) - 첨자 연산자 오버로딩

Subscript([ ]) operator overloading◆ 첨자 연산자 오버로딩에서 고려해야 할 점 ● 첨자 연산자 오버로딩에서 배열에 대한 복사 생성 허용 여부의 결정이 필요 ☞ 허용하지 않고 싶을 경우 아래와 같이 해상 생성자를 private 선언 또는 delete로 접근 불가능하게 한다.private: Point* arr; int arr_len;public: PointArr(const PointArr &arr) {} // private 복사 생성자 PointArr& operator=(const PointArr &arr) {} // private 대입 연산자 혹은private: Point* arr; int arr_len;public: PointArr(const..

C++/C++ : Study 2025.06.22

8. 연산자 오버로딩 (9) - 첨자 연산자 오버로딩

Subscript([ ]) operator overloading◆ 첨자 연산자 오버로딩 ● [ ] 연산자 ● 멤버 함수로 오버로딩 필요 ☞ (복습) [ ] , ( ) , -> , = 와 같은 몇몇 연산자는 멤버 함수로만 오버로딩 가능 ● 경계 검사 등 기능 확장을 위해 용이하게 사용된다📘 첨자 연산자 오버로딩 (operator[])✅ 개요[] 연산자는 배열처럼 객체에 인덱스로 접근할 수 있게 해주는 연산자이다.obj[i] → obj.operator[](i) 로 해석된다.✅ 오버로딩 목적단순한 배열 접근뿐만 아니라,👉 경계 검사, 읽기/쓰기 분리, 로깅, 데이터 가공 등 기능 확장이 가능하다.특히 클래스 내부에서 포인터나 배열을 관리할 때 매우 유용하다.✅ 반드..

C++/C++ : Study 2025.06.22

8. 연산자 오버로딩 (8) - 대입 연산자 , 깊은 복사

중요한 Part이다.★★★★★Assignment Operator Overloading◆ 대입 연산자 오버로딩, 깊은 복사 ● C++는 대입 연산자를 자동 생성해 준다. ● 자동 생성된 대입 연산자는 얕은 복사를 수행한다 ● 포인터 타입의 멤버 변수가 존재하면, 깊은 복사를 통한 연산자 직접 정의 필요하다. ● 자동 생성된 대입 연산자는 얕은 복사를 수행한다 ● "복사 생성자" 내용 복습 ☞ 복사 생성자는 자동 생성된다. ☞ 자동 생성된 복사 생성자는 얕은 복사 수행한다. ☞ 포인터 타입의 멤버 변수가 존재하는 경우, 깊은 복사의 직접 정의가 필요하다.📘 복사 생성자와 대입 연산자: 구조와 개념의 유..

C++/C++ : Study 2025.06.21

8. 연산자 오버로딩 (7) - 대입 연산자 , 얕은 복사

중요한 Part이다.★★★★★Assignment Operator Overloading◆ 대입 연산자 오버로딩 ● C++는 대입 연산자를 자동 생성해 준다. ● 대입 연산과 복사 생성의 구분 ● 자동 생성된 대입 연산자는 얕은 복사를 수행 Point p1{ 10,20 }; Point p2{ 30,40 }; Point p3 = p1; // ** 대입이 아닌 복사 생성 p3.ShowPosition(); Point p4; p4 = p1; // * 대입 연산 p4.ShowPosition();📘 대입 연산자 오버로딩 (Assignment Operator Overloading)C++에서 대입 연산자 = 또한 오버로딩이 가능한 이항 연산자이다.하지만 이 ..

C++/C++ : Study 2025.06.20

8. 연산자 오버로딩 (6) - 스트림 삽입 및 추출 연산자 오버로딩

중요한 Part이다.★★★★★Stram Insertion and Extraction Overloading◆ 스트림 삽입 연산자 오버로딩, 구현 ● ostream의 참조자를 반환하여 chain insertion 이 가능하도록 구현해야 한다. ☞ 참조자를 반환하지 않으면 cout ☞ 또한 기본적으로 cout 객체는 복사 불가 friend ostream& operator ● 전역 함수로 선언 필요하다. ☞ 멤버 함수로 선언하면 아래와 같이 사용해야 한다.p1 📌 Stream Insertion 연산자 오버로딩 정리스트림 삽입 연산자 이렇게 해야 cout 만약 ostream을 값으로 반환하면 cout 이유는 cout friend o..

C++/C++ : Study 2025.06.18

8. 연산자 오버로딩 (5) - Ostream 객체

Stream Insertion and Extraction Overloading◆ 스트림 삽입 및 추출 연산자 오버로딩 Point p1{ 10,20 }; Point p2{ 30,40 }; p1.showPosition(); // [10,20] p2.showPosition(); // [30,40] // * 복잡한 멤버 함수 대신 cout > p3; // 50 60 // * 기본 자료형처럼 stream 입력도 가능하도록 한다.🔹 기존 방식: 출력 전용 함수 사용지금까지 객체의 좌표 값을 확인하려면 ShowPosition()과 같은 멤버 함수를 따로 정의하여 호출했다.이 방식은 기본적인 접근이지만 매번 함수를 호출해야 하고, std::cout과 직접 연결되지 않아 불편하다..

C++/C++ : Study 2025.06.16