상속

설명

CUBRID는 다중 상속을 허용한다. 다시 말해서 한 클래스는 하나 이상의 수퍼클래스로부터 속성과 메소드를 상속받을 수 있다. 그러나 상속은 수퍼클래스의 속성이나 메소드가 추가 또는 삭제될 때, 몇 가지 충돌을 발생시킨다.

이러한 충돌은 다중 상속 시 하나 이상의 수퍼클래스에 이름이 같은 속성이나 메소드가 존재할 때 발생한다. 예를 들어 두 개 이상의 수퍼클래스로부터 동일한 이름과 타입을 가지는 속성을 상속받을 가능성이 있을 때에는 반드시 상속받기를 원하는 속성을 지정해야 한다. 이러한 경우 만약 상속받은 수퍼클래스가 삭제된다면 동일한 이름과 타입의 속성을 가지는 또 다른 수퍼클래스로부터 속성을 상속해야 한다. 대부분의 경우는 데이터베이스 시스템에서 자동으로 이러한 문제를 해결한다. 그러나 시스템의 해결 방법이 원하는 방법이 아니라면 사용자가 직접 상속 구문을 통해 해결할 수도 있다.

하나 이상의 수퍼클래스로부터 속성을 상속할 때, 이름은 같지만 도메인이 다른 경우가 존재한다. 예를 들어, 두 개의 수퍼클래스가 도메인이 클래스인 동일한 이름의 속성을 가질 수 있다. 이 경우 서브클래스는 좀 더 상세화된 도메인, 즉, 클래스 계층 구조에서 더 하위에 존재하는 클래스를 도메인으로 가지는 속성을 자동으로 상속받게 된다. 앞의 경우와 같은 충돌이 스트링, 정수 타입과 같이 시스템이 제공하는 기본 타입간에 발생할 경우에 상속은 불가능하다. 상속 시 발생하는 충돌과 이에 대한 해결 방법은 클래스 충돌 해결에서 다룬다.

구문

CREATE { CLASS | TABLE } class_name
[ {UNDER | AS SUBCLASS OF } super_class_name [ {, super_class_name }_ ] ]
[ CLASS ATTRIBUTE
( class_attr_definition_list ) ]
[ ( attr_definition | class_constraint
[ { , attr_definition | class_constraint_definition }_ ] ) ]
[ METHOD method_definition_list ] ]
[ FILE path_name_list ] ]
[ INHERIT resolution_list [ {, resolution_list }_ ] ] [ ; ]

super_class_name:
[ user_name.]classname

class_attr_definition:
attribute_name datatype [ DEFAULT value ] [ NOT NULL ]

attr_definition:
attribute_name datatype [ { SHARED [ value ] | DEFAULT value } ] [ constraints ]

constraints:
NOT NULL
UNIQUE

class_constraint_definition:
[ CONSTRAINT constraint_name ] UNIQUE
(attribute_name [{, attribute_name} ...])

method_definition:
[ CLASS ] method_name [ ( [ arg_type_list ] ) ]
[ result_type ] [ FUNCTION method_implementation_name ]

arg_type:
datatype

result_type:
datatype

resolution_list:
attr_mthd_name OF super_class_name [ AS alias ]

상속 시 주의 사항은 아래와 같다.

수퍼클래스 이름은 클래스의 소유자를 알기 쉽게 하도록 사용자 이름부터 시작될 수 있다.

관계형 데이터베이스와의 호환성을 위해 CREATE 구문에서 CLASS라는 키워드 대신 TABLE을 사용할 수 있다. 속성은 관계형 데이터베이스에서 테이블의 열(컬럼)과 동일한 개념이다.