티스토리 뷰
🟩 오늘의 목표
- 함수 오버로딩의 성립 조건과 우선순위를 이해한다.
- template을 사용하여 타입에 독립적인 범용 코드를 작성한다.
- new/delete를 통한 동적 할당과 클래스 객체의 생명 주기를 완벽히 제어한다.
🟧 1. 함수 오버로딩 (Function Overloading)
🟦 개념 및 성립 조건
C++에서는 이름이 같은 함수를 여러 개 정의할 수 있다. (C언어와 다른 점)
- 가능한 경우: 매개변수의 타입이 다르거나, 개수가 다를 때.
- 불가능한 경우: 반환형(Return Type)만 다른 경우에는 성립하지 않음.
🟦 호출 우선순위 (Resolution Order)
컴파일러가 어떤 함수를 부를지 결정하는 순서는 다음과 같다.
- 정확한 일치 (Exact Match): 매개변수 타입이 완벽히 같음.
- 승격 (Promotion): 데이터 손실 없는 변환 (char, short → int, float → double).
- 표준 변환 (Standard Conversion): 데이터 손실 가능성 있음 (double → int).
- 사용자 정의 변환: 클래스 변환 생성자 등.
🟦 주의: 오버로딩 모호성
호출 시 어떤 함수인지 헷갈리면 컴파일 에러가 발생한다.
- 디폴트 매개변수 때문에 인자 개수가 겹치는 경우.
- 매개변수 타입이 단순히 포인터와 배열의 차이인 경우.
🟧 2. 템플릿 (Template)
🟦 개념 및 문법
자료형(Type)에 구애받지 않고 코드를 재사용하기 위한 문법. "빵틀"과 같다.
- 문법: template <typename T> (T는 임의의 타입 이름)
- 함수뿐만 아니라 클래스도 템플릿으로 만들 수 있다 (예: vector, array 등).
C++
// 템플릿 함수 예시 (덧셈)
template <typename T>
T add(T a, T b) {
return a + b;
}
int main() {
add(1, 2); // int 버전 자동 생성
add(1.5, 2.5); // double 버전 자동 생성
}
🟧 3. 클래스와 메모리 관리 (Q&A 정리)
🟦 객체 생성: new vs malloc
C++ 클래스를 다룰 때는 반드시 new를 써야 한다.
| 구분 | new (C++) | malloc (C) |
| 용도 | 객체 생성 및 초기화 | 단순 메모리 할당 |
| 생성자 호출 | O (호출됨) | X (호출 안 됨 - 위험!) |
| 반환 타입 | 해당 객체 포인터 | void* (형변환 필요) |
| 해제 방법 | delete | free |
- 주의: malloc으로 클래스를 만들면 생성자가 실행되지 않아, 내부 변수가 쓰레기 값이 되거나 프로그램이 뻗을 수 있다.
🟦 접근 지정자 및 접근법
- private: 외부에서 접근 불가. Getter/Setter 함수로만 접근하여 데이터를 보호(캡슐화)한다.
- 접근 기호:
- 일반 객체 (Bank b): 점(.) 사용 👉 b.Deposit();
- 포인터 객체 (Bank* b): 화살표(->) 사용 👉 b->Deposit();
🟦 초기화와 소멸
- 멤버 초기화: private: int balance = 0; 처럼 선언과 동시에 값을 넣는 것이 안전하다 (C++11 이상).
- 소멸자 (~Class): new로 할당한 메모리는 프로그램 종료 전 반드시 delete로 해제해야 하며, 이때 소멸자가 호출된다.
C++
// 안전한 클래스 사용 패턴
class Bank {
private:
int balance = 0; // 1. 초기화
public:
void setBalance(int amount) { balance = amount; } // 2. Setter
int getBalance() { return balance; } // 3. Getter
};
int main() {
Bank* myBank = new Bank(); // 4. 동적 할당
myBank->setBalance(100); // 5. 화살표 접근
delete myBank; // 6. 메모리 해제 (필수)
}
🟫 오늘 느낀 점
- 함수 오버로딩과 템플릿으로 코드를 일반화하는 법을 익히고, C++ 객체 생성 시 malloc 대신 new/delete가 필수적인 이유를 확실히 이해했다.
'내일배움캠프 Unreal_7기 > 본캠프' 카테고리의 다른 글
| TIL - 16일차 (0) | 2025.12.19 |
|---|---|
| TIL - 15일차 (1) | 2025.12.18 |
| TIL - 13일차 (0) | 2025.12.16 |
| TIL - 12일차 (0) | 2025.12.12 |
| TIL - 11일차 (1) | 2025.12.11 |

