반응형
제네릭(Generics)은 프로그래밍 언어에서 타입을 매개변수화하여, 다양한 데이터 타입에 대해 하나의 코드 베이스를 재사용할 수 있도록 하는 개념이다. 즉, 특정 타입에 의존하지 않고, 추상적인 타입을 인자로 받아 처리할 수 있게 해준다. 이를 통해 코드의 재사용성과 타입 안전성을 높일 수 있다.
1. 제네릭의 기본 개념
타입 매개변수화:
제네릭은 함수, 클래스, 구조체, 인터페이스 등에서 실제 타입 대신 타입 매개변수( ex: T, U)를 사용한다. 이렇게 작성된 코드는 구체적인 타입으로 치환되어 다양한 상황에서 활용될 수 있다.
타입 안정성:
제네릭을 사용하면 컴파일 타임에 타입 오류를 검출할 수 있다. 즉, 잘못된 타입이 전달되는 경우 컴파일러가 오류를 발생시켜 런타임 오류를 줄일 수 있다.
코드 재사용성:
동일한 알고리즘이나 로직을 여러 데이터 타입에 대해 중복 없이 한 번만 구현할 수 있으므로, 코드의 중복을 제거하고 유지보수를 쉽게 만든다.
2. 제네릭의 동작 방식
컴파일 타임 치환 (Monomorphization)
일부 언어(C++, Rust 등)는 제네릭 코드를 사용할 때, 각 타입에 대해별도의 구체적인 코드(인스턴스)를 생성한다. 이를 모노모피제이션이라고 하며, 컴파일 타임에 최적화된 기계어 코드가 생성된다.
타입 소거 (Type Erasure)
Java나 C#(제한적인 경우) 등에서는 제네릭 타입 정보를 컴파일 타임에만 사용하고, 런타임에는 제거하는 방식으로 동작한다. 이로 인해 제네릭 타입의 구체적인 정보가 런타임에는 보이지 않는다.
3. 제네릭의 장점과 고려사항
장점
- 코드 중복 제거 - 여러 타입에 대해 같은 로직을 적용할 수 있으므로, 코드 중복을 방지한다.
- 타입안정성 - 컴파일러가 제네릭 타입에 대해 타입 검사를 수행하므로, 런타임에 발생할 수 있는 타입 관련 오류를 사전에 방지한다.
- 유연성 - 추상화된 코드를 통해 다양한 상황에 맞게재사용이 가능해진다.
고려사항
- 컴파일 시간 증가 - 모노모피제이션을 사용하는 언어의 경우, 각 타입마다 별도의 코드 인스턴스를 생성하므로 컴파일 시간이 다소 늘어날 수 있다.
- 런타임 성능 - 타입 소거를 사용하는 언어에서는 런티임에 제네릭 타입 정보가 없어지기 때문에, 리플렉션이나 동적 타입 검사와 같은 기능을 사용할 때 제약이 있을 수 있다.
- 복잡성 증가 - 제네릭을 과도하게 사용하면 코드의 추상화 수준이 높아져서 오히려 가독성이 떨어질 수 잇으므로, 적절한 균형이 필요하다.
반응형
'Dev > notion' 카테고리의 다른 글
Syntactic sugar - 문법적 설탕 - 문법 설탕 (1) | 2025.02.21 |
---|---|
JavaScript : Prototype-based inheritance - 프로토타입 기반 상속 (1) | 2025.02.20 |
JavaScript: First-Class Functions (일급 함수) (1) | 2025.02.20 |
Closure - 클로저 (0) | 2025.02.19 |
enum (1) | 2025.02.19 |