템플릿으로 범용 데이터 구조와 알고리즘 구현
템플릿을 이용하면 범용 구조체 타입 또는 클래스 형태를 생성할 수 있다.
가능하면 데이터 구조와 알고리즘을
프로그램에 특화된 방식으로 만들지 말고,
최대한 범용적으로 만든다.
템플릿이 아닌 범용 데이터 구조 구현 방법
템플릿 말고 다른 범용 데이터 구조는 얼마든지 만들 수 있다.
좀 구식이긴 하지만 C, C++의 void*가 해당 예시이다.
하지만 이 방법은 타입 세이프(안정적)하지 않다.
C++17부터는 void*와 템플릿을 사용하지 않고
std::any 클래스를 사용하는 방법이 있다.
객체 타입이 무엇이든 any클래스에 저장할 수 있다.
std::any 내부에서 void*를 사용하지만,
본래 타입(자료형)을 저장해두기 때문에 안정성을 보장한다.
템플릿을 사용하지 않고 범용 데이터 구조를 만드는
또 다른 방법은 데이터 구조를 특정한 클래스에 맞게 정의하는 것이다.
그리고 다형성을 이용해 이 클래스에서 상속된
파생 클래스를 데이터 구조에 저장할 수 있게 만든다.
Java에서는 이 구조를 최대한 활용하고 있다.
자바의 모든 클래스는 간접적으로든 직접적으로든
Object 클래스를 상속받는다.
하지만 이러한 방식도 타입 안전성을 보장하지는 않는다.
다운 캐스팅이 필요한 경우
컨테이너에서 개체를 꺼낼 때의 타입을 알고 있다가,
그 타입에 맞게 다운 캐스팅을 해야하기 때문이다.
'프로그래밍 언어 > C & C++ 정리' 카테고리의 다른 글
다형성(Polymorphism) (2) | 2024.11.20 |
---|---|
템플릿의 장단점 (0) | 2024.11.19 |
OOP - 상속 (0) | 2024.11.11 |
연산자 오버로딩을 남용하는 것 (1) | 2024.11.10 |
연산자 오버로딩과 const (0) | 2024.11.06 |