WIPIVERSE

매개변수 다형성

매개변수 다형성
매개변수 다형성(Parameter Polymorphism)은 타입 이론 및 프로그래밍 언어 설계에서 사용되는 개념으로, 함수나 자료구조가 구체적인 타입에 의존하지 않고 매개변수화된 형태로 정의될 수 있음을 의미한다. 이때 함수나 자료구조는 하나의 정의만으로 여러 종류의 타입에 대해 동일한 동작을 수행한다.

정의

매개변수 다형성은 타입 매개변수(type parameter) 를 도입함으로써 구현된다. 구체적인 타입이 아니라 타입 변수(예: T, U)를 사용하여 함수를 정의하고, 해당 함수가 호출될 때 실제 타입이 결합(binding)되어 구체화된다. 이는 제네릭(generic) 메커니즘과 동일시되는 경우가 많으며, 정적 타입 언어에서는 컴파일 타임에 타입 검사가 이루어진다.

주요 특징

  1. 타입 독립성: 하나의 구현으로 여러 타입에 적용 가능하다.
  2. 컴파일 타임 타입 검증: 실제 타입이 결합될 때 컴파일러가 타입 일관성을 검사한다.
  3. 코드 재사용성 증대: 동일한 로직을 중복 작성할 필요가 없으며, 타입 안전성을 유지한다.

사용 예시

  • 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.

매개변수 다형성은 현대 프로그램 언어 설계에서 핵심적인 타입 추상화 메커니즘으로, 코드의 일반화와 안전성을 동시에 확보하는 역할을 수행한다.

둘러보기

더 찾아볼 만한 주제

    전체 문서 보기