[다형성]
: 다양한 타입의 값들에 대해 작동하도록 디자인된 코드
: 정확성을 유지하기위해, 타입들은 공통적으로 명확한 특징을 가지고 있어야 하고, 코드는 어느 다른 특징에 의존되면 안된다.
[다형성의 종류]
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을 미뤄 단일 매커니즘을 사용한다.
'[프로그래밍 언어론]' 카테고리의 다른 글
프로그래밍 언어론 7-1-4강. 타입의 분류(Classification of Types) (0) | 2019.12.12 |
---|---|
프로그래밍 언어론 7-1-3강. 직교성(Orthogonality) (0) | 2019.12.12 |
프로그래밍 언어론 7-1-1강. "타입"의 의미 (0) | 2019.12.10 |
프로그래밍 언어론 7강. 타입 시스템(Type Systems) (0) | 2019.12.10 |
프로그래밍 언어론 6-7강. 불확정성(Nondeterminacy) (0) | 2019.12.02 |