C++ 템플릿
오늘은 C++의 템플릿에 대해서 배움.
C++ 템플릿
오버로딩■ 네임 맹글링 (Name Mangling)같은 함수 이름의 구분을 위해 함수 이름 + 매개변수 정보로 고유한 이름을 부여하는 것. (+C는 오버로딩 자체가 X) ■ 오버로딩 조건1. 매개변수 타입이 다름.2
ha2m.tistory.com
Java와 유사한 부분이 많아서 이해하는 데 크게 어려움이 있진 않았지만, 예제 코드를 해석할 때 헷갈려서 시간이 좀 걸리기도 하고 코드를 직접 작성할 때 막상 생각나지 않음.
개념에 대한 이해와 많은 예제 풀이 및 작성이 필요하다고 느낌.
아래는 수업 예제 중 하나로, 배운 점이 몇 가지 있어서 가져옴.
#include <iostream>
#include <memory>
using namespace std;
template<typename T>
class Array
{
private:
unique_ptr<T[]> data;
int size;
public:
Array(int s)
: data(make_unique<T[]>(s)), size(s)
{
}
int GetSize() const { return size; }
// 객체를 배열 처럼 사용할 수 있게 해줘요.
T& operator[](int index) { return data[index]; }
// 가장 단순한 remove
void RemoveAt(int index)
{
unique_ptr<T[]> newData = make_unique<T[]>(size - 1);
for (int i = 0, j = 0; i < size; i++)
{
if (i == index) continue;
newData[j++] = data[i];
}
data = move(newData);
size--;
}
};
int main()
{
Array<int> a(4);
a[0] = 10;
a[1] = 20;
a[2] = 30;
a[3] = 40;
cout << "원소 삭제 전 : " << endl;
for (int i = 0; i < a.GetSize(); i++)
{
cout << a[i] << " ";
}
cout << "\n" << endl;
a.RemoveAt(1); // 20 제거
cout << "원소 삭제 후 : " << endl;
for (int i = 0; i < a.GetSize(); i++)
{
cout << a[i] << " ";
}
return 0;
}
우선, 연산자 오버로딩을 하는 방법을 알게 됨.
Array는 진짜 배열이 아닌 객체이다 보니 a[0] 같은 문법을 사용할 수 없는데, 연산자 오버로딩(T& operate[])을 사용하여 진짜 배열처럼 [ ]를 사용하여 접근할 수 있게 됨.
그리고 스마트 포인터에 대해 익숙해져 감.
make_unique( ), move( ) 등 익숙하지 않은 코드들이 있다보니 이해하는 데 어려웠었는데, 자주 접하고 그때마다 개념도 다시 찾아보고 공부하면서 이제는 어떤 의미인지 파악됨.
마지막으로 소멸자에 대해 추가적으로 배움.
강의 자료에 소멸자에 대해 제대로 설명해준 기억이 없어서 이번 기회에 제대로 찾아봄.
해당 예제는 스마트 포인터로 자동 해제되어 소멸자가 필요없는 것과, default 소멸자가 있어서 기본적인 해제 기능이 있다는 것, ~Array() = default; 와 같이 명시적으로 표현도 가능하다는 점 등 새로운 지식들도 많이 알게 됐고, 기존에 왜 소멸자를 쓰고 안썼는지에 대해 정확히 알 수 있었음.
Tistory의 코드블럭에 언어 선택하는 기능이 있는 걸 이제 알았음...
지금이라도 기존 게시물의 코드블럭을 전부 고치고 제대로 써야겠음 :(
'내일배움캠프_Unreal > TIL' 카테고리의 다른 글
| 내일배움캠프_Unreal/TIL - Day 17 (251219) (0) | 2025.12.19 |
|---|---|
| 내일배움캠프_Unreal/TIL - Day 16 (251218) (0) | 2025.12.18 |
| 내일배움캠프_Unreal/TIL - Day 14 (251216) (0) | 2025.12.16 |
| 내일배움캠프_Unreal/TIL - Day 13 (251215) (0) | 2025.12.15 |
| 내일배움캠프_Unreal/TIL - Day 12 (251212) (0) | 2025.12.12 |