📔 오늘 공부한 내용

C++에 대한 내용으로, 템플릿에 대한 학습을 진행했다. 우리가 프로그램을 작성할 때, 코드는 보통 Compile -> Linking 과정을 수행한다.

Compile과정을 수행하면 a.cpp와 같은 파일이 a.out과 같은 실행 가능한 파일로 변환이 된다. 이는 작성한 C언어를 어셈블리어로 변환하는 과정이다.
Linking과정은 연관성이 있는 프로그램을 엮어 하나의 프로그램으로 만든다. 우리가 쉽게 볼 수 있는 exe파일은 여러개의 out파일을 순서와 관계에 따라 엮어서 만들어진 파일이다.

템플릿

템플릿(Template)은 C++에서 제공하는 제너릭(Generic) 도구이다. C++에서는 Auto와 같이 변수의 타입에 상관없이 추론하는 기능을 제공하는데, 템플릿도 유사한 기능이라고 볼 수 있다.

  • Template: 프로그래머가 수행해야 할 복사&붙여넣기 작업을 컴파일러가 타입 추론을 통해 컴파일 타임에 제공하는 것
# 클래스 템플릿
template<typename T>
class Sample{
	Sample(const Sample<T>& src) = default;
    ...
}

# 함수 템플릿
template<typename T>
void f(const T& param);

int, float와 같이 타입을 T로 설정한 뒤, T를 변수의 타입으로 사용하면 범용성 있는 사용을 할 수 있다.
템플릿은 컴파일하는 순간 일련의 알고리즘에 의해 연역된다. 즉, 코드 상 사용하고 있는 타입을 추론해, 이를 여러개 정의하는 것과 동일한 과정을 거친다.

템플릿 파라미터

템플릿 파라미터는 여러개를 사용할 수가 있으며, 템플릿 파라미터 팩을 사용해 무한한 개수의 파라미터를 정의할 수도 있다.

# 여러 개의 파라미터 정의
template<typename Func, typename Fund>

# 파라미터 팩을 사용
template<typename Func, typename... Params>

템플릿 파라미터에는 정수, 열거형, 포인터, 참조 타입 등이 올 수 있는데 이를 non-type 템플릿 파라미터라 한다.

# size_t는 non-type template parameter
templace<class Ty, std::size_t N>

또한, 템플릿 파라미터에는 다른 템플릿 파라미터가 올 수 있으며, 이를 템플릿 템플릿 파라미터라 한다.

# E와 F를 사용하는 템플릿과 T를 같이 사용하는 템플릿
template<typename T, template<typename E, typename F>>

템플릿은 using을 사용해 별칭 템플릿을 만들 수 있다. 하지만, typedef를 사용하면 타입이 결정된 인스턴스에 대해서만 별칭을 만들 수 있다.

template<typename T>
using MyAllocList = std::list<T, MyAlloc<T>>;

📝 TIL을 정리하며

🤕 어려웠던 점

템플릿은 생각보다 쉬운 존재이고, 어렵지는 않았다.

🤔 궁금한 점

아직은 궁금한 점은 없었다.

😁 느낀 점

오늘은 템플릿에 대한 내용을 다뤘지만, 사실 템플릿을 많이 사용하지 않는다. STL에 대한 이야기를 좀 더 다루긴 했지만, STL에 대한 정리는 별도의 포스트로 정리할 계획이기에, 본 포스트에 기재하지는 않았다.


📌 프로그래머스 데브코스 6기 자율주행 인지과정(Perception) 수강 내용을 바탕으로 정리한 TIL 입니다.
📅 Today: 2023. 9.21.

profile
그냥 끄적여보는 블로그

0개의 댓글