티스토리 뷰

🟩 오늘의 목표

  • 함수 오버로딩의 성립 조건과 우선순위를 이해한다.
  • template을 사용하여 타입에 독립적인 범용 코드를 작성한다.
  • new/delete를 통한 동적 할당과 클래스 객체의 생명 주기를 완벽히 제어한다.

 

🟧 1. 함수 오버로딩 (Function Overloading)


🟦 개념 및 성립 조건

C++에서는 이름이 같은 함수를 여러 개 정의할 수 있다. (C언어와 다른 점)

  • 가능한 경우: 매개변수의 타입이 다르거나, 개수가 다를 때.
  • 불가능한 경우: 반환형(Return Type)만 다른 경우에는 성립하지 않음.

🟦 호출 우선순위 (Resolution Order)

컴파일러가 어떤 함수를 부를지 결정하는 순서는 다음과 같다.

  1. 정확한 일치 (Exact Match): 매개변수 타입이 완벽히 같음.
  2. 승격 (Promotion): 데이터 손실 없는 변환 (char, short → int, float → double).
  3. 표준 변환 (Standard Conversion): 데이터 손실 가능성 있음 (double → int).
  4. 사용자 정의 변환: 클래스 변환 생성자 등.

🟦 주의: 오버로딩 모호성

호출 시 어떤 함수인지 헷갈리면 컴파일 에러가 발생한다.

  • 디폴트 매개변수 때문에 인자 개수가 겹치는 경우.
  • 매개변수 타입이 단순히 포인터와 배열의 차이인 경우.

 

🟧 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