• 검색 결과가 없습니다.

클래스와 클래스 계층구조의 정의

문서에서 외국도서관 정책자료 (페이지 100-112)

일러두기

4. 클래스와 클래스 계층구조의 정의

이 절에서는 클래스와 클래스 계층구조를 정의할 때 고려할 사항과 범하기 쉬운 오류에 대해 논의한다(3절의 4단계). 앞에서 언급한 바와 같이, 어떤 분야에도 단 하나의 정확한 클래스 계층구조는 없다. 계층구조는 온톨로지의 용도, 응용프로그램에서 요구하는 상세성 정도, 개인적인 선호도, 여타 다른 모델과의 호환성 요건에 따라 달라진다. 그러나 우리는 클래스 계층구조를 개발할 때 염두에 두어야 하는 가이드라인을 제시했다. 상당한 수의 신 규 클래스를 정의한 후에는 작성되는 계층관계가 이 지침을 준수하는지 확인해 보는 것이 유용하다.

4.1 정확한 클래스 계층구조의 반영 “~이다(is-a)” 관계

클래스 계층관계는 “~이다(is-a)” 관계로 표현한다: 모든 클래스 B의 사례가 클래스 A의 사례가 되면 특정 클래스 A는 클래스 B의 하위 클래스이다. 예를 들어 샤도네이

하나의 와인은 모든 와인의 하위 클래스가 아니다.

흔히 범하는 모델링 오류 중 하나는 전자를 후자의 하위클래스로 만드는 계층 구조에서 동일한 개념의 단수형 및 복수형을 모두 포함하는 것이다. 예를 들어, 복수형인 Wines 클 래스를 정의하고 단수형인 Wine 클래스를 Wines 클래스의 하위클래스로 정의하는 것은 잘 못이다. 여러분이 “~의 일종이다(kind-of)” 관계를 표현하는 계층구조를 생각해 본다면, 모 델링 오류는 분명할 것이다: 단수형인 Wine은 Wines의 일종(kind of)이 아니다. 이러한 오 류를 피하는 가장 좋은 방법은 클래스를 명명할 때 단수형이나 복수형 중에 하나만 사용 하는 것이다(개념의 명명에 대해서는 6절의 논의사항을 보라).

계층관계의 전이성(Transitivity) 하위 관계는 이동한다.

만일 B가 A와 C의 하위 클래스이고, C가 B의 하위 클래스이면, C는 A의 하위 클래 스이다.

예를 들어, 우리는 와인(Wine) 클래스를 정의할 수 있다. 그리고 화이트 와인(white wine) 을 와인(Wine)의 하위 클래스로 정의한다. 그리고 우리는 샤도네이(Chardonnay) 클래스를 화이트 와인(white wine)의 하위 클래스로 정의한다. 하위클래스 관계의 전이성은 샤도네이 (Chardonnay) 클래스가 와인(Wine)의 하위 클래스라는 것을 의미한다. 직접적인 하위클래스 (direct subclass)는 해당 클래스와 “가장 가까운” 하위클래스이다: 계층구조에서 어떤 클래 스와 그것의 직접적인 하위클래스 사이에는 클래스가 존재하지 않는다. 즉, 클래스와 직접 적인 상위클래스 사이에는 다른 클래스가 없다는 의미이다. 여기서 샤도네이(Chardonnay) 는 화이트 와인(white wine)의 직접적인 하위클래스이며, 와인(Wine)의 직접적인 하위클래 스는 아니다.

클래스 계층구조의 발전

일관성 있는 클래스 계층구조를 유지하는 것은 대상 분야가 발전함에 따라서 더욱 어려 워진다. 예를 들어, 수 년 간 모든 진펀들(Zinfandel) 와인은 레드 와인이었다. 그러므로 우 리는 진펀들(Zinfandel) 와인을 레드 와인(Red wine)의 하위 클래스로 정의했었다. 그러나 와인 생산자들이 포도를 압착해서 포도에서 색깔을 만들어내는 요소를 순간적으로 제거하 여, 최종 결과물인 와인의 색깔을 바꾼다. 그런 이유로 우리는 장밋빛 색깔을 지닌 “화이 트 진펀들"을 얻는다. 이제 우리는 진펀들(Zinfandel) 클래스를 나누어 두 유형의 진펀들 화이트 진펀들(White zinfandel)과 레드 진펀들(Red zinfandel) 로 구분한다. 그리고 이것을 로제 와인과 레드 와인 클래스의 하위 클래스에 각각 분류한다.

클래스와 클래스명

클래스와 클래스명을 구분하는 것은 중요하다:

클래스는 대상 분야 내의 개념을 표현하며, 이러한 개념을 의미하는 단어를 나타내는 것은 아니다.

클래스명은 다른 용어를 선택할 경우 변경 가능하지만, 용어 자체는 실세계에 실재하는 사물을 표현한다. 예를 들어 우리는 새우를 표현하는 Shrimps 클래스를 만들고 그것을 같 은 개념을 표현하는 다른 용어인 Prawns로 변경할 수 있다. 그러면 shrimp 요리와 어울리 는 와인에 대해서는 prawn 요리라고 언급해야 한다. 그래서 실제로는 다음 규칙이 필요하다:

동일한 개념에 대한 동의어는 다른 클래스를 표현하지 않는다.

동의어는 어떤 개념이나 용어에 대한 다른 형태의 이름일 뿐이다. 그러므로 우리는 Shrimp라는 클래스와 Prawn이라는 클래스, 그리고 가능하면 Crevette라고 불리는 클래스를 가져서는 안 된다. Shrimp나 Prawn이라는 하나의 클래스만 존재해야 한다. 많은 시스템에 서 특정 클래스에 대한 동의어, 역어, 발표용 이름(presentation names) 목록을 관리할 수 있 다. 시스템에서 이러한 연관관계를 처리하지 않는다면, 동의어는 항상 클래스 설명 (documentation) 부분에 기재되어야 한다.

클래스 순환 방지

우리는 클래스 계층구조에서 순환(cycles)을 방지해야 한다. 어떤 클래스 A가 B를 하위 클래스로 가지는 동시에 B가 A의 상위클래스가 될 때 계층구조에 순환이 있다고 한다. 이 러한 순환구조를 만드는 것은 클래스 A와 B가 동등하다는 것을 선언하는 것이다: 클래스

클래스 계층구조의 동위관계

계층구조에서 동위관계(Siblings)는 동일한 클래스의 직접적인 하위 클래스를 의미한다 (4.1절을 보라).

계층구조에서 모든 동위관계는 (루트에 있는 것을 제외) 일반성 수준이 동일해야 한다.

예를 들어, 화이트 와인(white wine)과 샤도네이(Chardonnay)는 동일 클래스(즉, 와인(Win e))의 하위 클래스가 될 수 없다. 화이트 와인(white wine)은 샤도네이(Chardonnay)보다 더 상위 수준의 개념이기 때문이다. 동위관계는 특정 도서 내의 동일한 수준의 절들이 동일 수준의 일반성을 가진 것과 같은 방식으로 “동일 선상에 있는” 개념들을 표현해야 한다.

이런 점에서 클래스 계층구조에 대한 요건은 도서의 개요(outline)에 대한 요건과 유사하다.

그러나 계층구조의 루트에 있는 개념(Thing과 같이 최상위 클래스의 직접적인 하위클래 스로 표현되는)은 해당 분야의 주요 부문을 표현하므로 동일한 개념을 가지고 있지 않다.

클래스의 수의 결정 기준

특정 클래스가 포함하는 직접적인 하위클래스의 수에는 고정된 규칙이 없다. 그러나 대 부분의 잘 구조화된 온톨로지들은 2개에서 12개의 직접적인 하위클래스를 가진다. 그러므 로 다음의 두 가이드라인을 따른다.

어떤 클래스가 단 하나의 직접적인 하위클래스만 가진다면, 모델링 문제가 있거나 온 톨로지가 완벽하지 않은 것이다.

어떤 클래스에 12개 이상의 하위 클래스가 있다면, 중간 범주를 추가할 필요할 수 있다.

두 규칙 중 첫 번째는 불릿 리스트는 절대 하나의 불릿점을 가질 수 없다는 식자 규칙 (typesetting rule)과 유사하다. 예를 들어 대부분의 레드 버건디 와인은 코트 도르(Côtes d’Or) 와인이다. 우리가 버건디 와인의 다수를 차지하는 이 유형만 표현하려 한다고 가정 하자. 우리는 레드 버건디(Red Burgundy) 클래스를 만들고, 하나의 하위클래스인 코트 도 르(Cotes d’Or)를 만들 것이다(그림 6a). 그러나 이렇게 표현하면 결국 레드 버건디와 코트 도르 와인이 동일하게 되어(모든 레드 버건디 와인은 코트 도르 와인이며 모든 코트 도르

와인은 레드 버건디 와인이다), 코트 도르(Cotes d’Or) 와인 클래스를 만들 필요가 없으며, 새로운 정보를 얻을 수도 없다. 만일 더 저렴한 버건디 와인이며 코트 도르 남부 지역에서 생산되는 코트 샬로네즈(Côtes Chalonnaise) 와인을 추가한다면, 버건디(Burgundy) 클래스에 2개의 하위클래스를 작성할 수 있다: 코트 도르(Cotes d’Or)와 코트 샬로네즈(Cotes Chalonnaise) (그림 6b).

그림 6. Red Burgundy 클래스의 하위클래스들. 특정 클래스의 하위클래스가 하나인 경우에는 대개 모델링에 있어서 문제가 있는 것이다.

이제 우리가 모든 유형의 와인을 와인(Wine) 클래스의 직접적인 하위클래스로 작성했다 고 가정해 보자. 이 목록은 보졸레와 보르도와 같은 상대적으로 일반적인 상위 유형의 와 인 뿐 아니라 포이약이나 마르고와 같은 더욱 구체적인 하위 유형의 와인도 포함한다(그 림 7a). 와인(Wine) 클래스는 너무 많은 직접적인 하위클래스를 가지고 있어서, 온톨로지가 더 조직적인 방법으로 여러 종류의 와인을 표현하기 위해서는 메독(Medoc)이 보르도 (Bordeaux)의 하위클래스가 되고 코트 도르(Cotes d’Or)가 버건디(Burgundy)의 하위클래스가 되어야 한다. 또한 레드 와인(Red wine)과 화이트 와인(white wine)과 같은 중간 범주를 추 가하는 것이 여러 사람들이 가지고 있는 와인 분야의 개념 모델을 반영하는 것이다(그림 7b).

그러나 동위관계에 있는 클래스 목록이 길어질 지라도 해당 개념을 모아줄 실제 존재하 는(natural) 클래스가 없다면, 인위적으로 클래스를 생성할 필요는 없다 클래스는 있는 그 대로 둔다. 온톨로지는 실세계를 반영한 것이고, 실세계 해당 범주가 없다면, 온톨로지도 그것을 반영해야 한다.

그림 7. 와인의 범주화. 모든 와인과 와인의 유형을 여러 수준으로 범주화시킨 것.

4.3 다중 상속

많은 지식-표현 시스템에서 클래스 계층구조 내의 다중상속(multiple inheritance)을 허 용한다: 특정 클래스는 여러 클래스의 하위클래스가 될 수 있다. 우리가 디저트 와인에 대 해 별도의 클래스를 작성하고자 할 때, 디저트 와인(Dessert wine) 클래스를 생성한다. 이

때 포트 와인은 레드 와인인 동시에 디저트 와인이 된다.6) 그러므로 우리는 포트(Port) 클 래스가 두 개의 상위 클래스를 갖는 것으로 정의한다: 레드 와인(Red wine)과 디저트 와인 (Dessert wine). 포트(Port) 클래스의 모든 사례는 레드 와인(Red wine)과 디저트 와인(Dessert wine) 클래스의 사례가 될 것이며, 포트(Port) 클래스는 두 부모 클래스로부터 슬롯과 패싯 을 상속받을 것이다. 그러므로 당도(Sugar) 슬롯은 디저트 와인(Dessert wine) 클래스로부터 달콤함(SWEET)이라는 값을 상속 받고, 타닌 함량(tannin level) 슬롯과 색깔(color) 슬롯의 값은 레드 와인(Red wine) 클래스로부터 상속받을 것이다.

4.4 클래스의 생성 시기

모델링 과정에서 가장 어려운 것 중 하나는 새로운 클래스를 만들 것인지, 서로 다른 속성 값을 이용해서 차이점(distinction)을 나타낼 지를 결정하는 일이다. 이질적인 여러 클 래스로 구성된 매우 복잡한 계층구조나 각 슬롯에 지나치게 많은 정보가 담겨 있는 극소 수의 클래스로 이루어진 매우 단순한 계층구조는 모두 보는 이를 어렵게 한다. 이 둘 사이

모델링 과정에서 가장 어려운 것 중 하나는 새로운 클래스를 만들 것인지, 서로 다른 속성 값을 이용해서 차이점(distinction)을 나타낼 지를 결정하는 일이다. 이질적인 여러 클 래스로 구성된 매우 복잡한 계층구조나 각 슬롯에 지나치게 많은 정보가 담겨 있는 극소 수의 클래스로 이루어진 매우 단순한 계층구조는 모두 보는 이를 어렵게 한다. 이 둘 사이

문서에서 외국도서관 정책자료 (페이지 100-112)