UML에서 CORBA로 변환은 UML(Unified Modeling Language) 버전 2.0 모델 요소를 CORBA(Common Object Request Broker Architecture) IDL(Interface Definition Language)로 변환합니다. 이 변환을 사용하여 UML 2.0 스펙에서 CORBA 프로젝트를 생성할 수 있습니다. 또한 이 변환에서는 대부분의 COBRA 요소를 모델로 작성 및 생성할 때 사용할 수 있는 선택적인 간단한 프로파일을 제공합니다.
UML에서 CORBA로 변환을 사용하려면 먼저 UML 2.0 모델 및 프로젝트를 작성 및 편집하는 방법을 알아야 합니다. 다음 프로시저에서는 CORBA 변환의 가장 기본적인 사용을 표시합니다.
UML 모델을 CORBA로 변환하려면 다음을 수행하십시오.
1. 모델링 Perspective인지 확인하십시오.
2. 모델 탐색기 보기에서 UML 컴포넌트("Component1")를 작성한 후 해당 컴포넌트에서 인터페이스("Interface1")를 작성하십시오.
3. 컴포넌트에서 마우스 오른쪽 버튼을 클릭하여 변환 > 변환 실행 > UML에서 CORBA로를 클릭하십시오.
4. 변환 실행 창에서 대상 컨테이너 작성을 클릭하십시오.
5. 새 프로젝트 창에서 프로젝트 이름으로 Sample을 지정한 후 완료를 클릭하십시오.
새 프로젝트는 이름이 "Component1.idl"인 IDL 파일을 포함하며 해당 파일은 이름이 Interface1인 인터페이스를 정의합니다.
또한 변환 시 더 복잡한 여러 다른 기능(예: 소스 모델을 수정하지 않고 이름 대체, 잠재적인 변환 문제점에 대비하여 UML 모델의 유효성 검증 등)을 수행할 수 있습니다.
각 변환 응용프로그램의 소스로 UML 모델, 컴포넌트, 컴포넌트를 포함하는 패키지 또는 이러한 요소의 조합을 지정할 수 있습니다. 변환 시 지정된 소스의 계층 구조에서 각 UML 컴포넌트의 단일 IDL 파일이 생성됩니다. 각 IDL 파일에는 해당 UML 컴포넌트가 소유한 요소의 코드만 들어 있습니다. 변환 시 UML 컴포넌트가 소유하지 않는 요소는 무시됩니다. 변환 소스로 기타 요소를 지정하면 유효성을 검증하는 도중 변환에 실패합니다.
CORBA 프로파일을 적용하는 경우 변환 시 코드가 생성되는 모델에서 UML 컴포넌트를 제어할 수 있습니다. generateCode 특성을 true 또는 false로 설정하여 이 제어를 연습할 수 있습니다. 특성을 false로 설정하면 변환 시 코드가 생성될 때 해당 컴포넌트를 무시합니다.
각 변환 응용프로그램의 대상은 단순한 Eclipse 프로젝트 자원입니다. 프로젝트에는 Eclipse 작업공간 자원 파일로 간주되는 IDL 파일이 하나 이상 들어 있습니다.
프로파일을 사용하지 않고 다음 CORBA 유형을 모델로 작성할 수 있습니다.
선택적 프로파일에서는 더 많은 특정 CORBA 유형을 모델로 작성하도록 다음과 같이 스테레오타입을 제공합니다.
CORBA 변환 프로파일에서는 스테레오타입에 따른 제한조건을 정의합니다. 소스 모델에서 이 제한조건을 평가하고 오류를 보고하도록 "유효성 검증 실행" 명령을 실행할 수 있습니다. 또한 CORBA 변환 시 변환이 적용되는 모델 부분에서 추가로 유효성을 검증합니다.
맵핑 모델을 사용하여 생성된 코드에서 모델로 작성된 요소 이름을 바꿀 수 있습니다. 컴포넌트를 제외한 UML 요소 이름은 단순한 ID로만 바꿀 수 있습니다. UML 컴포넌트 이름은 단순한 ID 또는 IDL 파일이 생성된 대상 컨테이너에 상대적인 유효한 부분 경로로 바꿀 수 있습니다. 이때 경로는 IDL 파일 이름으로 끝나야 합니다. 예를 들어 컴포넌트 A의 이름을 dirA\A로 바꾸면 변환 시 대상 컨테이너의 최상위 레벨 대신, dirA 디렉토리에 A.idl이 생성됩니다.
다음 표에서는 변환 시 UML 2.0 모델 요소를 CORBA IDL로 맵핑하는 방법을 나열합니다.
UML 2.0 요소 |
CORBA IDL 요소 |
모델 |
없음 |
컴포넌트 |
IDL 파일 |
기본 유형 |
기본 유형 |
원시 |
|
패키지 |
모듈(패키지가 컴포넌트에 있는 경우) |
무시됨(패키지가 컴포넌트에 없는 경우) |
|
인터페이스 |
인터페이스 |
속성 또는 연관 |
속성 |
오퍼레이션 |
IDL 오퍼레이션 |
매개변수 |
IDL 오퍼레이션 매개변수 |
열거 |
열거 |
클래스 <<CORBAValue>> |
값 유형 |
custom 값 유형 |
|
boxed 값 유형 |
|
Static 속성 |
상수 |
클래스 <<CORBAStruct>> |
struct |
클래스 <<CORBAException>> |
예외 |
클래스 <<CORBATypedef>> |
Typedef |
배열 |
|
시퀀스 |
UML 2.0 컴포넌트는 단일 CORBA IDL 파일에 맵핑됩니다. 컴포넌트의 IDL 파일에는 컴포넌트가 소유한 모든 CORBA 요소가 들어 있습니다.
UML 2.0 기본 유형은 CORBA 기본 유형 또는 CORBA 원시 유형으로 맵핑됩니다. UML 2.0 기본 유형으로서 모든 CORBA 기본 유형을 포함하는 UML 2.0 유형 라이브러리는 모델로 가져올 때 사용 가능합니다. 또는 기존 CORBA 기본 유형과 동일한 이름으로 UML 2.0 기본 유형을 작성하여 모델의 유형 선택에서 사용할 수 있습니다. 다음 목록에서는 유형 라이브러리에서 사용 가능한 CORBA 기본 유형을 표시합니다.
목록에 지정된 유형 이외의 다른 이름에 해당하는 UML 2.0 기본 유형은
CORBA 원시 유형을 표시합니다. CORBA 원시 유형은 IDL 파일에서
원시 정의를 생성하며 모델의 유형 선택에서 사용할 수 있습니다.
UML 2.0 컴포넌트에 들어 있는 UML 2.0
패키지는 CORBA 모듈로 맵핑됩니다. 변환 시 UML 2.0 컴포넌트에
없는 UML 2.0 패키지는
무시됩니다.
UML 2.0 인터페이스는 CORBA 인터페이스로 맵핑됩니다. UML 2.0 인터페이스의 UML 2.0 일반화는 CORBA 인터페이스의 계승으로 맵핑됩니다. 다음 표에서는 변환 시 인터페이스 특성을 변환하는 방법을 나열합니다.
UML 인터페이스 특성 |
변환 결과 |
이름 |
IDL에서 잘못된 문자를 모두 제거하여 이름이 지정된 새 CORBA 인터페이스 |
가시성, public |
일반 인터페이스 |
가시성, private |
로컬 인터페이스 |
Abstract |
Abstract CORBA 인터페이스 |
리프 |
무시됨 |
UML 2.0 속성 및 연관은 CORBA 속성으로 맵핑됩니다. 다음 표에서는 변환 시 속성 특성을 변환하는 방법을 나열합니다.
변환 결과 |
|
이름 |
이름이 같은 CORBA 속성 |
유형 |
기본 유형이 지정된 CORBA 속성 |
"Is Static" 및 "default" 값 |
CORBA 상수 |
읽기 전용 |
읽기 전용 CORBA 속성 |
순서 지정 |
IDL 순서 지정 |
다음 표에서는 변환 시 연관 특성을 변환하는 방법을 나열합니다.
UML 연관 특성 |
변환 결과 |
이름 |
같은 이름의 CORBA 속성 |
유형 |
이 연관의 공급자에 해당하는 유형의 CORBA 속성 |
"Is Static" 및 "default" 값 |
CORBA 상수 |
읽기 전용 |
읽기 전용 CORBA 속성 |
순서 지정 |
IDL 순서 지정 |
UML 인터페이스 또는 <<CORBAValue>> 스테레오타입의 UML 클래스에 선언된 UML 2.0 오퍼레이션은 IDL 오퍼레이션으로 직접 맵핑됩니다. 변환 시 기타 UML 2.0 오퍼레이션은 무시됩니다. 다음 표에서는 변환 시 오퍼레이션 특성을 변환하는 방법을 나열합니다.
UML 오퍼레이션 특성 |
변환 결과 |
이름 |
지정된 이름의 새 CORBA 오퍼레이션 |
리턴 유형 |
CORBA 오퍼레이션의 리턴 유형 |
모든 기타 특성 |
무시됨 |
<<CORBAOneway>> 스테레오타입의 오퍼레이션 |
단방향 IDL 오퍼레이션 |
<<CORBAValue>> UML 클래스의 오퍼레이션에서 <<create>> 스테레오타입 |
CORBA 값 초기화 프로그램 오퍼레이션으로 맵핑 |
UML 2.0 매개변수는 IDL 오퍼레이션의 매개변수로 맵핑됩니다. 다음 표에서는 변환 시 매개변수 특성을 변환하는 방법을 나열합니다.
UML 매개변수 특성 |
변환 결과 |
이름 |
지정된 이름의 새 매개변수 |
방향(in, out, inout) |
IDL에서 대응하는 매개변수('return'은 무시됨) |
유형 |
지정된 유형의 매개변수 |
가시성 |
무시됨 |
UML 2.0 열거는 CORBA 열거로 맵핑됩니다. 열거는 열거 리터럴만 포함할 수 있습니다.
<<CORBAValue>> 스테레오타입의 UML 2.0 클래스는
CORBA 값 유형으로 맵핑됩니다. <<CORBAValue>>
스테레오타입에서는 이름이 스펙이고
유형이 열거 {"none", "custom", "boxed"}로 지정된 특성을 제공합니다. 기본값은
"none"입니다. 스펙 특성을 "custom"으로 설정하면
CORBA custom 값으로 맵핑됩니다. 스펙 특성을
"boxed"로 설정하면 CORBA boxed 값으로 맵핑됩니다.
CORBA 값 유형은 인터페이스 특성과는 서로 독립된 초기화 프로그램 메소드 및 선택적 상태에 해당하는 엔티티입니다. CORBA 값 유형의 상태 구성원은 <<CORBAState>> 스테레오타입의 UML 속성으로 표시되고 초기화 프로그램 메소드는 제품과 함께 제공되는 기본 프로파일에서 <<create>> 스테레오타입을 적용하여 표시됩니다.
다음 표에서는 변환 시 클래스 특성을 변환하는 방법을 나열합니다.
UML 클래스 특성 |
변환 결과 |
스테레오타입 |
<<CORBAValue>> |
이름 |
지정된 이름의 새 값 유형. |
가시성 |
무시됨 |
Abstract |
Abstract 값 유형 |
가시성이 public 또는 private로 지정된 <<CORBAState>>의 속성 |
가시성이 public 또는 private로 지정된 CORBA 값 유형의 CORBA 상태 구성원 |
<<create>> 오퍼레이션 |
abstract가 아닌 값 유형의 CORBA 팩토리 메소드 |
CORBA 상수 선언은 IDL 파일, 모듈, 인터페이스 또는 값 유형의 범위에서 나타날 수 있습니다.
인터페이스 또는 값 유형의 범위에서 나타나는 CORBA 상수는
해당 UML 인터페이스 또는 클래스의
UML static 속성으로 표시될 수 있습니다.
CORBA 모듈 또는 IDL 파일 범위에 나타나는 CORBA 상수는
UML 패키지(모듈 상수인 경우) 또는 UML 컴포넌트(IDL 범위 상수인 경우)에
나타나는 <<CORBAConstants>> 스테레오타입의 UML 클래스에
있는 속성이어야 합니다.
이 클래스 이름은 무시됩니다. <<CORBAConstants>>
스테레오타입의 각 클래스 속성은 상수 선언으로 표시됩니다.
<<CORBAStruct>> 스테레오타입의 UML 2.0 클래스는 CORBA struct로 맵핑됩니다. 이 클래스에서는 오퍼레이션 없이 속성 하나로 제한됩니다. struct 구성원은 클래스의 UML 속성 또는 연관으로 표시됩니다.
<<CORBAException>> 스테레오타입의 UML 2.0 클래스는 예외 정의를 표시합니다. 이 클래스 유형은 선택적으로 속성을 포함할 수 있습니다.
CORBA 2.4에서 CORBA 오퍼레이션만 예외를 발생시킬 수 있으며
CORBA 속성은 예외를 발생시킬 수 없습니다. 따라서 CORBA
오퍼레이션에서 예외를 발생시키면 해당 UML 오퍼레이션의
RaisedException 특성에 표시됩니다.
변환 시 CORBA typedef를 사용하여 기존 CORBA
유형에 새 이름을 지정합니다. <<CORBATypedef>> 스테레오타입의
UML 2.0 클래스는 CORBA typedef로 맵핑됩니다. 이 UML 2.0 클래스를
기존 CORBA 유형으로 대체하는 관계는 CORBA typedef를
표시하는 전체 표기법입니다.
CORBA 2.4 스펙에서는 CORBA 배열 및 시퀀스 유형의
anonymous 선언을 사용하지 않습니다. 이 맵핑에서는
anonymous
CORBA 배열 또는 시퀀스를 지원하지 않습니다. typedef 선언을
사용하여 배열 또는 시퀀스 유형 이름을 지정해야 합니다. UML 2.0 클래스를 확장한
<<CORBATypedef>>
스테레오타입에는 스펙 특성(해당 값은 "none",
"array" 및 "sequence"이며 기본값은 "none"임) 및
배열 및 시퀀스 차원을 포함하는 차원 특성(해당 기본값은 비어 있음)이 들어 있습니다.
CORBA 배열은 <<CORBATypedef>> 스테레오타입의
UML 2.0 클래스를 배열 요소 유형이 들어 있는 UML 요소로
대체하는 관계를 통해 모델로 작성됩니다. 스테레오타입의 "스펙"
특성은 "array"로 설정되고 "dimensions" 특성은 배열 차원(예: "[3][5]")을
표시하는 문자열로 설정됩니다. <<CORBATypedef>> 스테레오타입의
클래스로 구성된 유형의 연관은
CORBA 배열에 해당하는
유형으로 구성된 유형의 구성원을 모델화합니다.
CORBA 시퀀스는
<<CORBATypedef>> 스테레오타입의 UML 2.0 클래스를
시퀀스 요소 유형을 표시하는 UML 요소로 대체하는 관계를
통해 모델화됩니다.
스테레오타입의
"스펙" 특성은 "sequence"로 설정되고
"dimensions" 특성은 선택적으로
시퀀스의
상한을 표시하는 문자열 값(예: "12")으로 설정됩니다.
<<CORBATypedef>> 스테레오타입의 클래스에서
구성된 유형의 연관은 CORBA 시퀀스에 해당하는 유형으로 구성된 유형의
구성원을 모델화합니다.
변환 시 해당 정의가 다른 컴포넌트에 나타나는
유형을 사용할 때 자동으로 #include가 생성됩니다. 대부분의 CORBA IDL 파일에서는
ORB.idl 파일을 포함해야 합니다. 모델로 작성하지 않은 다른 외부 IDL
파일에 해당하는 생성된 IDL 파일에서 #include를 강제 실행해야 하는 경우
현재 컴포넌트에서 외부 IDL 파일을 표시하는 새로 작성된 컴포넌트로
이어지는 종속성을 작성해야 합니다. generateCode 특성을 false로 설정하여
새로
작성된 컴포넌트에서 코드 생성을 방지할 수 있습니다. 이 특성은
CORBA 프로파일에서 컴포넌트 스테레오타입과 함께
제공됩니다. 예를
들어 IDL 파일에서 "#include <ORB.idl>"을 생성하려면
현재 IDL 파일을 모델화하는 컴포넌트에서 새 컴포넌트 ORB로
이어지는
종속성을 작성해야 합니다. 또한
생성 코드에서 새 컴포넌트 ORB로의 변환을 방지하려면
해당 generateCode 특성을 false로 설정하십시오.
다음 CORBA 구성은 현재 이 프로파일에서 맵핑되지 않습니다.
CORBA 변환은 사용자가 자동으로 소스 제어 시스템에서 새 파일을 확인한 후 이를 추가할 수 있도록 팀 지원과의 통합을 제공합니다.
변환 시 소스 모델을 수정하지 않도록 변환할 대상 요소의
대체 이름을 지정할 수 있습니다.
플랫폼 독립 모델에 CORBA 특정 세부사항(예: 이름 지정 제한사항)을
포함시킬 경우 대체 이름을 지정할 수도
있습니다. 소스
모델을 수정하지 않고 대체 대상 이름을 지원하려면 모델 맵핑을 작성하십시오.
맵핑 모델을 작성하려면 다음을 수행하십시오.
1. 모델링 Perspective인지 확인하십시오.
2. 모델 탐색기 보기에서 UML 모델을 클릭하십시오.
3. 메뉴 표시줄에서 모델링 > 변환 > 변환 구성을 클릭하십시오.
4. 새 UML 2.0 대 CORBA 변환을 작성하십시오(예:
맵핑 작성 변환으로 이름 지정).
5. 맵핑 페이지에서 맵핑 모델만 작성(변환 없음)을 클릭하십시오.
6. 파일 이름을 지정한 후 실행을 클릭하십시오.
변환 맵핑 기능을 사용하면 CORBA 변환은 맵핑 모델을 작성합니다. 이때 모델은 각 변환 가능한 요소의 아티팩트를 포함하는
독립된 모델입니다. 아티팩트는 원래 변환 가능한 요소를 나타내고 이 요소와
동일한 이름을 가집니다. 원래 요소에 대체 이름을 지정하려면
아티팩트의 파일 이름 특성에 새 이름을 입력하십시오. 아티팩트의
파일 이름 특성을 변경하지 않으면 변환 시 아티팩트의 기본 이름이
지정된 요소가
생성됩니다. 다음 표에서는 대체 이름에 대한 예를 나열합니다.
UML 소스 |
맵핑 아티팩트 파일 이름 |
생성된 CORBA |
Component1 |
"" |
Component1.idl 파일 |
Component2 |
"myIDL" |
myIDL.idl 파일 |
Component3 |
"myDir\myIDL2" |
"myDir" 폴더의 myIDL2.idl 파일 |
맵핑 모델을 사용하려면 다음을 수행하십시오.
1. 모델링 Perspective인지 확인하십시오.
2. 모델 탐색기 보기에서 UML 모델을 클릭하십시오.
3. 메뉴 표시줄에서 모델링 > 변환 > 변환 구성을 클릭하십시오.
4. 새 UML 2.0 대 CORBA 변환을 작성하십시오(예:
맵핑 사용
변환으로 이름 지정).
5. 맵핑 페이지에서 맵핑 모델 사용을 클릭하십시오.
6. 이전에 작성한 맵핑 모델을 클릭하고 실행을 클릭하십시오.
변환 실행 시 맵핑 모델에서 지정한 대체 이름을
사용합니다.
CORBA 변환 플러그인에서는 잠재적인 변환 문제점에 대비하여
모델의 유효성을 검증하는 기능을 제공합니다. 예를 들어
순환 일반화 관계 및 이름 지정 충돌 때문에 생성된 IDL
파일에서 컴파일 오류가 발생합니다. 생성된 코드에서
발생할 수 있는
잠재적인 문제점 목록을 보려면 소스 모델에
프로파일을 적용한 후 유효성 검증 기능을 실행하십시오.
다음 표에서는 잠재적인 변환 문제점의 일부를 나열합니다.
카테고리 |
잠재적인 변환 문제점 |
CORBAValue 스테레오타입 |
값 유형은 typedef, struct, 예외 또는 열거 이외의 중첩된 클래스류를 포함할 수 없습니다. |
값 유형은 고유한 이름의 구성원을 포함해야 합니다. |
|
값 유형의 계승된 속성은 고유해야 합니다. |
|
값 유형의 계승된 오퍼레이션은 고유해야 합니다. |
|
값 유형은 abstract가 아닌 인터페이스 하나만 지원할 수 있습니다. |
|
abstract 값 유형은 다른 abstract 값 유형에서만 계승되어야 합니다. |
|
값 유형은 같은 클래스에서 두 번 이상 계승될 수 없습니다. |
|
상태 구성원이 있는 값 유형은 상태 구성원이 있는 단일 값 유형에서만 계승될 수 있습니다. |
|
abstract 값 유형은 상태 구성원을 포함하지 않으며 boxed 값 유형일 수 없습니다. |
|
boxed 값 유형에서는 계승을 수행할 수 없습니다. |
|
boxed 값 유형에는 하나의 연관 또는 속성만 있어야 합니다. |
|
CORBAConstants 스테레오타입
|
CORBAConstants 클래스는 오퍼레이션을 포함할 수 없습니다. |
CORBAConstants 클래스는 중첩된 클래스류를 포함할 수 없습니다. |
|
CORBAConstants 클래스는 고유한 이름의 구성원을 포함해야 합니다. |
|
CORBAException 스테레오타입 |
CORBAException 클래스는 중첩된 클래스류를 포함할 수 없습니다. |
CORBAStruct 스테레오타입 |
struct는 일반화 또는 구현 관계의 소유자일 수 없습니다. |
struct는 중첩된 클래스류를 포함할 수 없습니다. |
|
struct는 오퍼레이션을 포함할 수 없습니다. |
|
CORBATypedef 스테레오타입 |
typedef는 일반화 관계를 포함할 수 없습니다. |
typedef는 하나의 대체 관계를 포함할 수 없습니다. |
|
typedef는 연관, 속성 또는 오퍼레이션을 포함할 수 없습니다. |
|
typedef는 중첩된 클래스류를 포함할 수 없습니다. |
|
CORBAState 스테레오타입 |
상태 구성원 속성은 소유자로서 값 유형 클래스를 포함해야 합니다. |
CORBAOneway 스테레오타입 |
단방향 오퍼레이션은 in 또는 inout 유형의 매개변수를 포함할 수 없습니다. |
단방향 오퍼레이션의 리턴 유형은 void이어야 합니다. |
|
단방향 오퍼레이션의 소유자는 인터페이스여야 합니다. |
|
단방향 오퍼레이션은 예외를 발생시킬 수 없습니다. |
|
열거 |
열거의 열거 리터럴 이름은 고유해야 합니다. |
컴포넌트 |
컴포넌트는 중첩된 컴포넌트를 포함할 수 없습니다. |
컴포넌트의 모든 패키지의 이름은 고유해야 합니다. |
|
인터페이스 |
인터페이스의 구성원 이름은 고유해야 합니다. |
인터페이스는 중첩된 인터페이스, 패키지, 값 유형 또는 컴포넌트를 포함할 수 없습니다. |
|
비제약 인터페이스는 로컬 인터페이스에서 계승될 수 없습니다. |
|
인터페이스의 계승된 오퍼레이션은 고유해야 합니다. |
|
인터페이스의 계승된 속성은 고유해야 합니다. |
|
인터페이스는 두 번 이상 같은 인터페이스를 계승할 수 없습니다. |
|
abstract 인터페이스는 다른 abstract 인터페이스에서만 계승될 수 있습니다. |
|
일반 |
모델은 이름이 CORBA 키워드(예: 패키지, 클래스, 인터페이스, 오퍼레이션, 특성, 매개변수 및 열거)인 요소를 포함할 수 없습니다. |
모델은 순환 일반화 또는 구현 관계가 지정된 클래스 또는 인터페이스일 수 없습니다. |
|
모델은 중복 요소 이름을 포함할 수 없습니다. |
|
모델의 계층 구조는 잘못 구성될 수 없습니다(예: 중첩된 컴포넌트 포함). |