Class Template
1. 용도
Class를 정의 할 때,
멤버의 형식, 혹은 메서드의 파라미터(인수)의 형식 (여기서 말하는 형식은 Datatype)만 다르고
나머지 클래스 내부의 논리전개가 동일할 때, 각 datatype별로 클래스를 제각각 정의하는 것은 뭔가 비효율적으로 보인다.
만약 내부적인 논리 전개에 문제가 있거나 동작이 수정될 필요가 있을 경우, 각각 정의 된 클래스를 일일이 다 수정해야 한다.
소스코드 상에서 고정부/변동부로 나누고, 중복되는 코드를 줄일 수 있다면 효율적인 코딩이 될 수 있지 않을까.
Stack 이란 클래스를 정의하고자 할 때, 만약 int, float, long, double 등 각각의 datatype에 상관없이 stack을 정의 할 때
template을 쓰면 간단히 해결 된다.
Queue, Stack, Tree 등에서 쓰이는 Element들(node? 등 자료구조 구성 요소들)은 그 타입을 클래스 내부에서 정해버리면, 그 자료형만 쓸 수 있다.
만약 다른 자료형(datatype)으로 동작하게 하고 싶다면, 일일이 그 클래스를 따로 정의 해야하는 불편함과 동시에, 내부 구조의 수정이 필요한 경우 일일이 다 수정을 해줘야 하는 불편함이 있다.
2. 사용상 유의점
* 컴파일러가 template을 보고 필요한 코드를 generate한다. 따라서 이를 위해서 template코드는 header에 작성해야 한다.
* 클래스의 멤버 함수를 정의 할 때 클래스의 외부에 멤버함수를 작성하려면 각 멤버함수 별로 template <typename T> 를 추가해야 한다.
typename T가 무엇인지 알려줘야 하기 때문. 클래스 내부에 작성이 된다면 scoping rule에 의해 datatype T를 굳이 알려줄 필요가 없다.
3. Trivia
* 물론 readability(가독성)은 무척 떨어진다. 하지만 계속 쳐다보면 눈에 익기는 한다.
하지만 template은 늘 그렇듯이 예전에 공부해서 이해를 다 했다고 생각해도
다시 생소한 코드에 template이 있으면 눈에 잘 들어오지 않는다.
* 컴파일러가 코드를 Generate하기 때문에 코드량이 줄어서 생기는 Execution time의 효율은 기대하기 어렵다. 어짜피 코드는 다 생성이 되니까
코드를 줄인다고 가독성이 좋아지지 않는 아주 좋은 예 인 것 같다.
'나의 SW개발 이야기 > SW개발 일반' 카테고리의 다른 글
Fiddler 4.0/ Mobile HTTP 모니터링/ AutoResponder를 이용한 Test Server (0) | 2019.03.28 |
---|---|
TFS 변경집합을 다른 브랜치에 적용하기 (0) | 2019.03.18 |
Java Interface (0) | 2018.08.08 |
윈도우 10에서 안드로이드 소스코드 받기 with Bash on Ubuntu (0) | 2018.06.26 |
UML 클래스 다이어 그램의 이해 (0) | 2017.02.14 |