프로그래밍 언어/C & C++ 정리

범용 데이터 구조

뽀또치즈맛 2024. 11. 12. 14:23

템플릿으로 범용 데이터 구조와 알고리즘 구현


템플릿을 이용하면 범용 구조체 타입 또는 클래스 형태를 생성할 수 있다.
가능하면 데이터 구조와 알고리즘을
프로그램에 특화된 방식으로 만들지 말고,
최대한 범용적으로 만든다.

템플릿이 아닌 범용 데이터 구조 구현 방법


템플릿 말고 다른 범용 데이터 구조는 얼마든지 만들 수 있다.
좀 구식이긴 하지만 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