템플릿의 장점
템플릿이 다른 제네릭 프로그래밍보다 Type Safe하다.
템플릿은 컴파일 타임에 받을 수 있는 모든 타입을 오버로딩한다.
따라서 템플릿은 제대로 사용하기만 한다면 타입 안전성을 보장한다.
하지만 다른 제네릭 프로그래밍은
void*로 변환하여 값을 받아오기 때문에,
위험성이 따른다.
템플릿의 단점
템플릿은 동형(homogenous)데이터 구조만 지원한다.
데이터 구조마다 한가지 타입으로 된 객체만 저장할 수 있다.
앞서 말했듯 템플릿은 동형 데이터 구조만을 지원하며,
이를 위해 컴파일 타임에 받아올 모든 타입을 오버로딩하기 때문에,
최종 바이너리 코드의 크기가 커지는
코드 비대 현상이 발생한다.
각 템플릿 인스턴스에 고도로 특화된 코드는
그보다 느리지만 범용적인 코드보다 길어지는 경향이 있다.
+템플릿과 상속 둘 중 뭘 써야할까?
Java의 모든 객체는 직간접적으로 Object 클래스를 상속받는다.
그렇다면 이는 다형성을 이용한 범용 데이터 구조를 만들기 위함을 알 수 있다.
범용 데이터 구조를 위해
템플릿과 상속 둘 중 무엇을 사용해야할 지에 대한 기준은 무엇일까?
템플릿을 사용하는 경우
Coding Standard에 따라 다르겠지만,
동일한 기능에 다양한 타입에 제공할 때는 템플릿을 사용한다.
예를 들어 모든 타입에 적용할 수 있는
범용 알고리즘은 템플릿으로 작성하는 것을 추천한다.
모든 타입을 저장하는 컨테이너도
템플릿으로 작성하는 것이 다.
여기서 핵심은 템플릿 기반의 데이터 구조나
알고리즘은 모든 타입에 대해 똑같이 처리한다는 것이다.
단, 요구사항에 따라 특정한 타입을 다르게 처리하는 경우에는
템플릿 특수화를 사용하면 된다.
상속을 사용하는 경우
반면, 특정 타입마다 동작을 다르게 제공할 때는 상속을 이용한다.
예를 들어 도형 그리기 프로그램에서
원, 정사각형, 직선의 도형의 타입은
shape 베이스 클래스의 상속으로 구현한다.
++참고
참고로 템플릿과 상속을 동시에 적용해도 된다.
베이스 클래스 템플릿을 상속하는 템플릿을 만들 수 있다.
'프로그래밍 언어 > C & C++ 정리' 카테고리의 다른 글
가상 소멸자와 비 가상 소멸자 (0) | 2024.11.21 |
---|---|
다형성(Polymorphism) (2) | 2024.11.20 |
범용 데이터 구조 (0) | 2024.11.12 |
OOP - 상속 (0) | 2024.11.11 |
연산자 오버로딩을 남용하는 것 (1) | 2024.11.10 |