TIL

[C++] 함수 오버로딩, 템플릿, 그리고 STL 컨테이너 기초 정리

think95592 2026. 5. 6. 20:51

📅 학습 날짜: 2026년 5월 6일

  1. 함수 오버로딩 (Function Overloading)
    동일한 이름의 함수를 매개변수에 따라 여러 개 정의하는 기술입니다.

✅ 오버로딩 성립 조건
매개변수의 타입이 다른 경우

매개변수의 개수가 다른 경우

❌ 오버로딩이 불가능한 경우 (모호성 발생)
타입 변환의 모호성: int가 double과 long 둘 다로 변환 가능할 때 컴파일러는 방황합니다.

디폴트 매개변수: 인자를 하나 생략했을 때, 디폴트 값이 있는 함수와 없는 함수가 겹치면 에러가 발생합니다.

포인터 vs 배열: int*와 int[]는 실질적으로 같은 타입으로 취급됩니다.

반환 타입만 다른 경우: 함수 호출 시 이름과 인자만 보고 판단하므로, 리턴 타입만으로는 구분이 불가능합니다.

  1. 템플릿 (Template)
    데이터 타입을 일반화하여 하나의 코드로 다양한 타입을 처리하는 '설계도'입니다.

함수 템플릿: add(3, 5), add(2.5, 4.1)처럼 호출 시 타입이 결정됩니다.

클래스 템플릿: 어떤 타입이든 담을 수 있는 배열 클래스 등을 만들 때 유용합니다.

  1. STL(Standard Template Library) 기초
    🔹 벡터 (std::vector)
    배열과 유사하지만 크기가 유동적인 동적 배열 컨테이너입니다.

push_back(): 끝에 데이터 추가

pop_back(): 마지막 데이터 제거

size(): 현재 들어있는 원소 개수 확인

erase(): 특정 위치 데이터 삭제 (성능 저하 주의)

🔹 맵 (std::map)
키(Key)-값(Value) 쌍을 저장하며, 키를 기준으로 자동 정렬되는 컨테이너입니다.

특징: 중복 키 허용 안 함, 오름차순 정렬.

검색: find(key)를 통해 데이터를 빠르게 찾을 수 있습니다.

  1. 알고리즘 (Algorithm) & 반복자 (Iterator)
    ⚙️ 정렬과 검색
    sort(): 데이터를 정렬합니다. 사용자 정의 비교 함수(compare)를 통해 정렬 기준을 바꿀 수 있습니다.

find(): 특정 데이터의 위치를 찾습니다.

📍 반복자 (Iterator)
컨테이너의 원소를 가리키는 '포인터와 유사한 화살표'입니다.

begin(): 첫 번째 요소의 위치

end(): 마지막 요소의 다음 칸 (종료 지점)

*it: 가리키는 위치의 데이터 알맹이(역참조)

장점: vector, list, map 등 어떤 자료구조든 동일한 문법으로 접근 가능하게 해줍니다.