프로그래밍 언어론 7-1-2강. 다형성(Polymorphism)

[프로그래밍 언어론]

2019. 12. 10. 20:00

 

[다형성]

: 다양한 타입의 값들에 대해 작동하도록 디자인된 코드

: 정확성을 유지하기위해, 타입들은 공통적으로 명확한 특징을 가지고 있어야 하고, 코드는 어느 다른 특징에 의존되면 안된다.

 

 

 

[다형성의 종류]

1. Parametric 다형성 (Generics의 개념)

  : 코드가 타입을 파리미터로 명시적 혹은 비명시적으로 받는다. 

  # 명시적인 parametric 다형성( = Generic )

    : 정적으로 타입되는 언어에서 보여지고, 컴파일 시점에 주로 실행된다.

  # 암시적인 parametric 다형성

    : 컴파일 시점에 실행 / 주로 ML-family 언어 / 동적 typing과 실행 시점 checking 발생과 병행

 

2. Subtype 다형성 (상속의 개념)

  : 코드가 특정 타입 T에 대해 값과 함께 동작하도록 되어 있으나, 프로그래머가 추가적인 타입이 확장되고 T를 개선할 수 있다. 

  : 객체지향 언어에서 주로 사용

  : 타입 checking이 대부분 컴파일 시점에 발생한다. ( 정적 typing )

  : 실행시점 비용은 추가적인 작업(상속때)

 

# Parametric과 Subtype 방식의 결합

  : "list of T" (List<T>)와 같이 사용할때 유용 

  : List 생성은 뒤의 클래스 상관없이 생성되고(컴파일시점에), 나중에 어떤 타입들이던 인스턴스화 된다.(이후에 확인)

 

# 동적으로 타입되는 객체지향 언어 (smalltalk, python, ruby 포함)

  : 두가지 다형성 방법 둘다에 대해 실행 시점까지 checking을 미뤄 단일 매커니즘을 사용한다.