[파라미터의 다형성]
: 컴파일 시점의 타입 추론(type inference)이 없는 언어들은 실행시점까지 타입 검사(type checking)을 미루고 싶을때 암시적인 파라미터의 다형성을 제공한다.
: 컴파일 시점 타입 검사를 하지 못해 런타임 시점 검사 필요
# Scheme의 파라미터의 다형성 예시
(define min (lambda (a b) (if (< a b) a b))) |
: 여기서 'min'은 a, b의 타입이 무엇인지 모르고 '<'를 지원하는 타입들일 것이라는 가정하에 실행 시점까지 모른다.
: 즉, 타입에 대한 언급이 없다.
: 이때 a, b가 '<'를 지원하는 타입이면 (ex. 123, 345) 괜찮지만 지원하지 않는 연산자 (ex. "abc, "def", string은 "<?" 연산자 필요)는?
=> 런타임 에러 발생
# 객체지향 언어에서의 런타임 검사(check)
: 객체지향 언어에서는 객체가 현재 사용된 메소드가 지원되는 메소드면 사용될수 있다고 가정된다.
: 즉, 해당 객체가 어떤 클래스 타입인지 판단하지 않고, 사용된 메소드(ex. min)을 가지고 있는 타입 여부로 사용 가능 여부 판단한다.
ex) Ruby
Ruby에서는 'min' 메소드는 수집 클래스에 의해 지원되는 '선정의된 메소드'이다. 수집 클래스 C의 원소들이 비교연산자 "<=> 연산자"를 지원한다 가정될때, C.min은 최소 원소값을 지원한다. 그래서 수집 클래스(ex. 배열)에 .min 붙으면 해당 수집 클래스내에 가장 작은 값의 원소가 return 된다.
["apple". "pear", "orange"].min # "apple" (문맥(알파벳순서) 기준 정렬) ["apple", "pear", "orange"].min { |a,b| a.length <=> b.length } # "pear" ("min"에 trailing block을 붙여 비교 연산자의 대안 정의를 사용) |
# Duck typing
: 위와같이 객체가 요구되는 메소드를 지원할때 수용가능한 타입을 가지고 있을때 사용되는 검사(checking) 스타일.
: "오리처럼 걷고 오리처럼 꽥꽥 거리면 오리이다" 라는 개념하에 이름 붙어짐.
'[프로그래밍 언어론]' 카테고리의 다른 글
프로그래밍 언어론 7-4강. 균등 테스팅과 할당(Equality Testing and Assignment) (0) | 2019.12.15 |
---|---|
프로그래밍 언어론 7-3-1강. 일반화된 서브루틴과 클래스(Generic Subroutine and Classes) (0) | 2019.12.15 |
프로그래밍 언어론 7-2-3강. 타입 추론(Type Inference) (0) | 2019.12.14 |
프로그래밍 언어론 7-2-2강. 타입 호환성(Type Compatibility) (0) | 2019.12.13 |
프로그래밍 언어론 7-2-1강. 타입 동등성(Type Equivalence) (0) | 2019.12.13 |