Search Results for '서브타이핑'


1 POSTS

  1. 2007/12/09 Programming Language
구현상속과 타입상속, 서브클래싱(subclassing)과 서브타이핑(subtyping)
구현상속은 상위클라스가 가지는 모든 필드와 메소드를 이를 상속하는 하위클라스에 모두 전달하여 버린다 (코드 재사용). 이러한 상속에서는 하위클라스에서 상속받은 일부 메소드만 재정의한다 해도 동적할당을 통해 상위클라스의 모든 멤버가 존재한다고 기대할 수 있는 특징을 가지고 있다. 이런 관점에서의 상속을 서브클래싱이라고 한다. 하지만 서브클래싱이 반드시 서브타이핑을 뜻하지는 않는다. 다음 예제를 보면 C.compare는 D.compare의 하위타입이 되지 못한다. 이는 함수들이 하위-상위 관계이기 위해선 함수인자들은 상위-하위 관계(contravariant arguments)가 되어야 하기 때문이다.

class D { int compare(D) }
class C extends D { int compare(C) }


다중상속(multiple inheritence), 인터페이스(interface)
C++의 다중상속은 어느정도의 모호함을 가지고 있다. 그 이유는 구현상속은 트리구조임에 반해 타입상속은 그래프구조이기 때문인데, 한 클라스가 동일한 메소드를 가지고 있는 두 클라스에 다중상속 할 때 어느 클라스의 구현 부분을 끌어와야 하는지 알 수 없기 때문이다. 그에 비하여 Java는 인터페이스를 통해 이 문제를 쉽게 해결한다.

오버로딩(static overloading), 멀티메소드(multiple dispatch, multimethod) 동일한 메소드 명을 통해 수행할 코드를 찾는 방법을 다음과 같은 발전 단계로 설명해 볼 수 있다 : 1) 동적할당을 통하여 런타임시의 함수호출자 타입에 따라 코드를 검색한다, 2) 메소드 오버로딩을 통하여 런타임시의 함수호출자 타입과 컴파일타임시의 함수인자 타입에 따라 코드를 검색한다, 3) 멀티메소드를 통하여 런타임시의 함수호출자 타입과 함수인자 타입에 따라 코드를 검색한다. 다음 예제들에서 볼 수 있듯이 메소드 오버로딩과 멀티메소드는 어느 정도의 모호성을 가지고 있다.

method(I) vs. method(J) for method(t) where T<:I, T<:J and I, J are imcomparable
method(I,J) vs. method(J,I) for method(j,j) where J<:I

- http://www.mobilejava.co.kr/...
- http://www.2computing.com/...
- http://www.javaservice.net/~java/...
2007/12/09 17:52 2007/12/09 17:52
Date
2007/12/09 17:52
Category
technote
, , ,
Response
No Trackback , No Comment

Leave a comment