매개변수 다형성
매개변수 다형성(Parameter Polymorphism)은 타입 이론 및 프로그래밍 언어 설계에서 사용되는 개념으로, 함수나 자료구조가 구체적인 타입에 의존하지 않고 매개변수화된 형태로 정의될 수 있음을 의미한다. 이때 함수나 자료구조는 하나의 정의만으로 여러 종류의 타입에 대해 동일한 동작을 수행한다.
정의
매개변수 다형성은 타입 매개변수(type parameter) 를 도입함으로써 구현된다. 구체적인 타입이 아니라 타입 변수(예: T, U)를 사용하여 함수를 정의하고, 해당 함수가 호출될 때 실제 타입이 결합(binding)되어 구체화된다. 이는 제네릭(generic) 메커니즘과 동일시되는 경우가 많으며, 정적 타입 언어에서는 컴파일 타임에 타입 검사가 이루어진다.
주요 특징
- 타입 독립성: 하나의 구현으로 여러 타입에 적용 가능하다.
- 컴파일 타임 타입 검증: 실제 타입이 결합될 때 컴파일러가 타입 일관성을 검사한다.
- 코드 재사용성 증대: 동일한 로직을 중복 작성할 필요가 없으며, 타입 안전성을 유지한다.
사용 예시
- Java:
List<E>인터페이스와ArrayList<E>클래스는E라는 타입 매개변수를 사용해 다양한 요소 타입을 저장한다.List<String> stringList = new ArrayList<>(); List<Integer> intList = new ArrayList<>(); - C++: 템플릿(template) 문법을 통해 함수와 클래스를 매개변수화한다.
template <typename T> T max(T a, T b) { return (a > b) ? a : b; } - Haskell: 함수 정의에 타입 변수와 제약조건을 명시한다.
identity :: a -> a identity x = x
이론적 배경
매개변수 다형성은 시스템 F(Polymorphic Lambda Calculus)와 같은 형식 시스템에서 정형화된다. 시스템 F는 모든 타입이 다형적으로 추상화될 수 있음을 보여주며, 실제 프로그래밍 언어에서는 이를 구현하기 위해 제네릭 타입 시스템이 도입된다.
관련 개념
- 서브타입 다형성(Subtype Polymorphism): 객체 지향 언어에서 상속 관계를 이용한 다형성.
- 오버로딩(Overloading) 및 다중 디스패치(Multiple Dispatch): 함수 시그니처에 따라 다른 구현을 선택하는 메커니즘.
- 런타임 다형성(Runtime Polymorphism): 주로 가상 함수와 같은 동적 바인딩을 통해 구현된다.
학술적 참고
- Cardelli, L. & Wegner, P. (1985). On Understanding Types, Data Abstraction, and Polymorphism. ACM Computing Surveys.
- Pierce, B. C. (2002). Types and Programming Languages. MIT Press.
매개변수 다형성은 현대 프로그램 언어 설계에서 핵심적인 타입 추상화 메커니즘으로, 코드의 일반화와 안전성을 동시에 확보하는 역할을 수행한다.