나중에 제가 다시 보려고 정리하는 핵심 요약집입니다.
1. 템플릿(Template): 만능 설계도
템플릿은 데이터 타입만 비워둔 '미완성 설계도'입니다.
- 왜 쓰는가?: int형 인벤토리, string형 인벤토리를 일일이 만들지 않고, 하나만 만들어서 돌려쓰기 위함입니다.
- 특징: T는 관습적인 이름일 뿐, ItemType처럼 자유롭게 지을 수 있으며 ,를 이용해 여러 개(T, U)를 쓸 수도 있습니다.
C++
template <typename T>
class Box {
T data; // T는 나중에 int가 될 수도, string이 될 수도 있음!
};
2. STL(Standard Template Library): 데이터 바구니
C++이 기본으로 제공하는 템플릿 보관함들입니다.
| 종류 | 특징 | 주 사용처 |
| Vector | 동적 배열. 뒤에서 넣고 빼는 게 빠름 | 순서가 중요한 아이템 리스트 |
| Map | Key-Value 쌍. 검색이 매우 빠름 | 아이템 이름으로 가격 찾기 (사전) |
| Algorithm | sort, find 등 템플릿 함수 모음 | 데이터 정렬 및 탐색 |
3. 포인터 템플릿(T*)과 메모리 관리
가장 헷갈렸던 부분입니다. T*는 "정해지지 않은 타입의 주소값을 담는 구멍"입니다.
- 화살표 연산자(->): 포인터로 객체 멤버에 접근할 때는 .이 아니라 ->를 쓴다!
- new & delete: 힙 메모리에 동적으로 객체를 만들었다면(new), 반드시 소멸자에서 메모리를 해제(delete)해야 누수가 없다.
4. [실전 예제] 템플릿 기반 로그 관리 시스템
오늘 직접 코딩하며 배운 로그 매니저 시스템의 최종 형태입니다.
C++
#include <iostream>
#include <vector>
#include <string>
using namespace std;
// 1. 로그 하나를 담는 템플릿 클래스
template <typename T>
class LogEntry {
private:
T data;
string category;
public:
LogEntry(string cat, T d) : category(cat), data(d) {}
void Print() {
cout << "[" << category << "] " << data << endl;
}
};
// 2. 로그들을 관리하는 매니저 클래스
class LogManager {
private:
vector<LogEntry<string>*> stringLogs; // 문자열 로그 포인터 보관
vector<LogEntry<int>*> scoreLogs; // 점수 로그 포인터 보관
public:
// 소멸자: new로 생성한 객체들 전부 delete (중요!)
~LogManager() {
for (auto log : stringLogs) delete log;
for (auto log : scoreLogs) delete log;
cout << "메모리 정리 완료!" << endl;
}
void AddStringLog(string cat, string msg) {
stringLogs.push_back(new LogEntry<string>(cat, msg));
}
void ShowAll() {
for (auto log : stringLogs) log->Print();
}
};
💡 오늘의 깨달음 (복습 포인트)
- 생성자는 객체 생성 시 꼭 필요한 정보(카테고리, 데이터 등)를 한 번에 받아서 초기화하는 게 안전하다.
- 부모 클래스의 소멸자에는 반드시 virtual을 붙이자. 그래야 자식 객체까지 깨끗하게 지워진다.
- 포인터 벡터를 썼다면, 벡터가 사라지기 전에 알맹이(new로 만든 것)부터 먼저 delete 해야 한다.
- c++11부터 문자열을 인트로 바꿀 때 stoi()로 가능
std::string str = "12345";
int num1 = std::stoi(str);'TIL' 카테고리의 다른 글
| UE5 협업을 위한 Git 사용법 학습 (0) | 2026.05.12 |
|---|---|
| [C++] 클래스 상속과 템플릿의 조화 (0) | 2026.05.11 |
| [C++] 상속과 다형성의 핵심: 추상 클래스부터 가상 소멸자까지 (0) | 2026.05.07 |
| [C++] 함수 오버로딩, 템플릿, 그리고 STL 컨테이너 기초 정리 (0) | 2026.05.06 |
| [C++]객체 지향과 메모리 관리 (0) | 2026.05.04 |