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>>