템플릿은 함수나 클래스를 찍어내듯이 만들수 있도록 일반화(generic) 시켜주는 도구이다.
템플릿과 유사한 함수가 바로 인라인 함수인데, 둘의 차이점은
템플릿 = 그 지점에 복사해서 자료형을 매핑해서 복사해준다.
인라인 = 라인 안에 코드를 복사해서 넣어주겠다.
이다.
인라인이 성립하는 조건은 두 가지가 있는데,
1. 인라인 키워드가 붙어 있을 때.
2. 클래스 내부에 선언과 정의를 동시에 할 것.
이 조건을 만족하는 예시
class A
{
inline int add() { return 0; } // 즉시 종료
};
이런 경우이거나,
class A
{
int add() {}
};
이런 경우를 말한다.
템플릿 또한 마찬가지로, 템플릿 선언은 다음과 같이 할 수 있다.
templete<Typename T>void Add(T a)
{
}
Add<int>();
이런 식으로 작성하게 된다면 T를 int로 교체하게 된다.
템플릿의 규칙 중 하나는 헤더에다가 정의해야 한다는 것이다. 인라인과는 조금 다르다.
인라인은 소스 파일로 이동시킬 수 있지만, 템플릿은 그게 안되기 때문에 그렇다.
왜 그런가?
우리가 짠 코드는 전처리기 -> 컴파일러 -> 링커 순으로 들어가기 때문에, 인라인 함수는 컴파일러 단계에서 처리하게 되고, 템플릿의 경우 전처리기 단계에서 헤더 파일에 정의된 내용을 읽고, 컴파일러 단계에서 필요한 타입으로 변환되기 때문이다. 즉 둘의 코드 변환 방식이 미묘하게 달라서 생기는 차이이다.
템플릿의 경우 템플릿의 특수화 라는 것이 있다.
템플릿 자체가 보편적으로 쓰려고 만든것 아닌가요? 라고 할 수 있지만, 예를 들어 int형을 호출하면 int형으로 출력이 되지만 캐스팅을 해야 하는 경우, float형을 int형으로 소숫점 자리는 자르고 정수화 한 결과를 알고 싶은 경우같은 형이 헷갈리는 경우에 아예 형 지정을 해버리는 방법이다.
'Programming > 자료구조 & 알고리즘' 카테고리의 다른 글
자료구조) 이중 연결 리스트 (Double Linked List) - 1 (0) | 2024.11.21 |
---|---|
자료구조) 연결 리스트(Linked List) (0) | 2024.11.20 |