UML에서의 스테레오 타입(Stereotype)

UML(Unified Modeling Language)에서 스테레오 타입(Stereotype)은 기존의 UML 요소(클래스, 연관 관계 등)의 의미를 구체화하거나 확장할 때 사용하는 메커니즘으로, 주로 길러멧기호(« ») 안에 표기합니다. 클래스 다이어그램의 관계(Relationship), 특히 의존(Dependency)이나 추상화(Abstraction) 관계에서 자주 사용되는 표준 스테레오 타입들을 기능별로 분류하여 빠짐없이 정리해보도록 하겠습니다. 

1. 인스턴스 생성 및 소멸 (Creation & Destruction)

한 클래스가 다른 클래스의 인스턴스를 생성하거나 없앨 때 사용합니다.

스테레오 타입 적용 관계 설명
«create» 의존 (Dependency) 클라이언트 클래스가 공급자(Target) 클래스의 인스턴스를 생성함(가장 흔히 쓰임)
«instantiate» 의존 (Dependency) «create»와 거의 동일한 의미로 사용되며, 객체 생성 관계를 강조
«destroy» 의존 (Dependency) 클라이언트가 공급자 객체를 소멸시킴을 명시

2. 사용 및 호출 (Usage & Call)

객체 간의 상호작용이나 메서드 호출을 구체적으로 명시할 때 사용합니다.

스테레오 타입 적용 관계 설명
«call» 의존 (Dependency) 한 클래스의 오퍼레이션(메서드)이 다른 클래스의 오퍼레이션을 호출
«use» 의존 (Dependency) 한 클래스가 작업을 수행하기 위해 다른 클래스를 사용함을 나타내는 가장 일반적인 형태(구체적인 의미가 모호할 때 사용)
«send» 의존 (Dependency) 클라이언트가 공급자(수신자)에게 신호(Signal)나 메시지를 전송함.
«dispatch» 의존 (Dependency) 런타임에 동적으로 오퍼레이션을 선택하여 호출하는 관계

3. 구조 및 가시성 (Structural & Visibility)

주로 패키지 간의 관계나, 접근 권한과 관련된 구조적 관계를 정의합니다.

스테레오 타입 적용 관계 설명
«import» 의존 (Dependency) 한 패키지가 다른 패키지의 요소를 public으로 가져와 자신의 네임스페이스에 추가함
«access» 의존 (Dependency) 한 패키지가 다른 패키지의 요소를 private하게 가져와 사용함을 의미
(외부로 다시 노출되지 않음)
«friend» 의존 (Dependency) C++의 friend 키워드와 유사하며, 공급자 클래스가 클라이언트 클래스에게 자신의 비공개(private) 멤버에 대한 접근 권한을 부여
«permit» 의존 (Dependency) 공급자가 클라이언트에게 자신의 내부 요소에 접근할 수 있도록 허용함

4. 추상화 및 실체화 (Abstraction & Realization)

개념적 관계나 상세화 수준의 차이를 설명할 때 사용합니다.

스테레오 타입 적용 관계 설명
«realize» 실체화 (Realization) 명세(인터페이스 등)를 실제 구현(클래스)으로 연결할 때 사용
(점선 화살표에 빈 삼각형 머리로 표현되는 관계 자체가 이것을 내포하기도 함)
«refine» 추상화 (Abstraction) 동일한 개념이지만 서로 다른 추상화 수준(예: 분석 모델 -> 설계 모델)을 가질 때, 더 구체적인 요소가 추상적인 요소를 상세화
«trace» 추상화 (Abstraction) 서로 다른 모델 간의 요소들이(예: 요구사항 -> 구현 클래스) 서로 추적 가능함
시스템의 변경 이력을 추적할 때 유용
«derive» 추상화 (Abstraction) 한 요소를 통해 다른 요소를 유도(계산)해낼 수 있음을 의미
(예: 생년월일 -> 나이)

5. 기타 고급 관계 (Advanced)

템플릿이나 대체 가능성 등을 명시합니다.

스테레오 타입 적용 관계 설명
«bind» 의존 (Dependency) 템플릿(제네릭) 클래스에 실제 파라미터를 제공하여 구체적인 클래스를 생성하는 바인딩 관계를 나타냄(예: List<T> -> List<String>)
«substitute» 의존 (Dependency) 런타임에 클라이언트가 공급자를 다른 요소로 대체하여 사용할 수 있음을 의미
(리스코프 치환 원칙과 관련)
«copy» 의존 (Dependency) 한 객체가 다른 객체의 복사본임을 나타냄
«become» 의존 (Dependency) 한 객체가 다른 객체로 변환됨을 나타냄
(주로 객체의 상태나 역할이 완전히 바뀔 때 사용)

💡 참고 사항

  • 표기 위치 : 연결선(주로 점선 화살표)의 중간에 «stereotype» 형태로 기입합니다.
  • 사용 빈도 : 실무에서는 «create», «use», «call», «realize», «bind» 정도가 가장 빈번하게 사용됩니다.
  • 사용자정의 : UML은 확장 가능하므로,  새로운 스테레오 타입(예: «http-get», «json-mapping»)을 정의하여 사용가능.

이 스테레오 타입들을 활용하면 단순히 "연결되어 있다"를 넘어 "어떤 목적으로 연결되어 있는지"를 명확하게 전달할 수 있습니다.

 

<기출문제>

2019년 35번 문제

 

정답 : ❷번. 제시된 문제는 UML 클래스 다이어그램의 스테레오타입(Stereotype)과 이를 실제 자바(Java) 코드로 구현했을 때의 매핑이 올바른지 묻는 문제입니다.

 

❌ 정답 분석 (틀린 것 찾기)
② (나) : <<local>> 다이어그램의 의미
스테레오타입 <<local>>은 클래스 A의 특정 오퍼레이션(메서드) 내부에서 클래스 B의 인스턴스를 지역 변수(Local Variable)로 선언하여 일시적으로 사용한다는 것을 의미합니다.

public class A {
    B b = new B();  // <--- 여기가 문제입니다.
    public void f() {
        ... // use b
    }
}

위 코드에서 B b = new B();는 메서드 내부가 아니라 클래스 영역에 선언되어 있습니다. 이는 지역 변수가 아니라 멤버 변수(Field/Property)입니다. 멤버 변수로 선언된 관계는 보통 일반적인 연관(Association) 관계나 합성(Composition) 등으로 표현합니다. 그렇다면 올바른 <<local>> 코드는? 바로 변수 b가 메서드 f() 안에서 선언되어야 합니다.

public class A {
    public void f() {
        B b = new B(); // 이렇게 메서드 안에서 지역 변수로 선언되어야 함
        ... // use b
    }
}

 

✅ 나머지 보기 분석 (맞는 것들)
① (가) : <<create>> 다이어그램의 의미 : 클래스 A가 클래스 B의 인스턴스를 생성한다는 의미입니다. 메서드 내부에서 new B()를 호출하여 객체를 생성하고 있으므로 적절합니다.

public B makeB() {
    return new B(); // 'new' 키워드를 통해 객체를 생성하고 있음
}


③ (다) : <<parameter>> 다이어그램의 의미 : 클래스 A의 메서드가 호출될 때, 클래스 B의 인스턴스를 인자(Parameter/Argument)로 전달받아 사용한다는 의미입니다. 메서드 시그니처에 B 타입의 변수가 매개변수로 명시되어 있으므로 적절합니다.

public void f(B b) { // 메서드의 괄호 안에 파라미터로 'B b'를 받고 있음
    ... // use b
}


④ (라) : <<delegate>> 다이어그램의 의미 : 클래스 A가 수행해야 할 작업을 스스로 처리하지 않고, 연관된 클래스 B에게 위임(Delegate)하여 대신 처리하게 한다는 의미입니다. 자신의 메서드 내에서 다른 객체의 메서드를 호출하여 책임을 넘기고 있으므로 적절합니다.

public void f() {
    itsB.f(); // A의 f()가 호출되었지만, 실제 동작은 itsB의 f()를 호출하여 처리함
}


💡 요약

  • 멤버 변수로 선언됨 → 일반 연관 (Association)
  • 메서드 인자로 받음 → <<parameter>>
  • 메서드 내부 변수로 선언됨 → <<local>>
  • 객체 생성 (new) → <<create>>