UML의 화살표와 선은 무엇을 뜻하고, 클래스 다이어그램과 시퀀스 다이어그램은 언제 사용할까요? 게임 퀘스트의 유스케이스, 캐릭터 클래스의 관계, GameScene.Start의 호출 순서를 실습과 예제로 읽어 봅니다. 다이어그램의 관계를 C# 코드와 대조하며 게임 구조를 설명하는 방법을 익힙니다.
2022년 1학기 한국애니메이션고등학교 2학년 「3D 게임 프로그래밍」 3강 「프레임워크 설계를 위한 UML」에서 가르친 내용입니다.
UML 이 필요해진 까닭

UML(Unified Modeling Language)은 우리말로 통합 모델링 언어입니다. 소프트웨어 규모가 커지고 객체 지향으로 만들게 되면서, 기획과 개발 사이에 "누가 무엇을 하고, 어떤 클래스가 누구를 알고, 어떤 순서로 부르는지" 를 그림으로 약속할 필요가 생겼습니다. 설계만 맡는 아키텍트 직무가 생긴 것도 이 무렵입니다.
| 다이어그램 | 무엇을 그리나 | 답하는 질문 |
|---|---|---|
| Use Case | 사용자와 기능 | 누가 무엇을 할 수 있나? |
| Class | 클래스와 관계 | 어떤 클래스가 있고 누가 누구를 아나? |
| Sequence | 시간 순서의 호출 | 어떤 순서로 누가 누구를 부르나? |
| State Chart | 상태와 전환 | 어떤 상태가 있고 언제 바뀌나? (다음 편) |
수업에서는 Visual Paradigm 으로 그렸습니다. 도구는 무엇이든 괜찮고, 모양의 뜻을 아는 것이 중요합니다.
유스케이스 다이어그램
- MMORPG 의 퀘스트에는 수락, 취소, 대화, 연속 퀘스트, 보상 선택 같은 쓰임새가 있습니다.
- 퀘스트 관련 콘텐츠를 유스케이스 다이어그램으로 그려 보세요.
| 모양 | 뜻 |
|---|---|
| 사람 모양 (Actor) | 시스템을 쓰는 사람이나 바깥 시스템. 여기서는 플레이어 캐릭터 |
| 타원 (Use Case) | 사용자가 할 수 있는 일 |
| 실선 | Actor 가 직접 시작하는 일 |
| «include» 점선 화살표 | 그 일을 하면 반드시 따라오는 일. 화살표는 따라오는 쪽을 가리킵니다 |
플레이어가 직접 시작하는 일은 "NPC 와 대화 시작" 과 "퀘스트 완료" 둘뿐입니다. 대화를 시작하면 퀘스트 대화가 진행되고, 그 안에서 대화 스킵 · 수락 · 취소가 일어납니다. 퀘스트를 완료하면 보상을 고르고, 연속 퀘스트라면 다음 대화가 이어집니다. 기능 목록만 늘어놓았다면 놓쳤을 "연속 퀘스트" 연결이 그림에서는 화살표로 드러납니다.
클래스 다이어그램
- 3DLesson 솔루션에서 선언한 클래스들의 관계를 클래스 다이어그램으로 그려 보세요.
- 대상: Character, Controller, GameDB, GameScene, MonsterController, Weapon
| 선 | 뜻 | 코드에서는 |
|---|---|---|
| 실선 + 열린 화살표 (연관) | 멤버 변수로 계속 가지고 있습니다 | Controller controller; 같은 필드 |
| 점선 + 열린 화살표 (의존) | 잠깐 불러 씁니다 | 함수 안에서 GameDB.GetSingleton() 을 부름 |
| 실선 + 빈 삼각형 (상속) | 자식이 부모를 물려받습니다 | class MonsterController : Controller |
public class GameScene : MonoBehaviour
{
Controller controller; // 연관: 실선 화살표 "controller"
Character character1; // 연관: 실선 화살표 "character1"
GameDB gameDB; // 연관: 실선 화살표 "gameDB"
}
public class MonsterController : Controller // 상속: 빈 삼각형
{
void Attack(Character target) { } // 의존: 점선 화살표 (매개변수로 잠깐 씀)
}선 이름(controller, character1, gameDB)은 멤버 변수의 이름입니다. 클래스 다이어그램을 보면 코드를 열지 않고도 "GameScene 이 무엇을 쥐고 있는지" 를 압니다. 반대로 화살표가 너무 많이 모이는 클래스가 보이면, 그 클래스가 너무 많은 일을 하고 있다는 신호입니다.
시퀀스 다이어그램
- GameScene 의 Start() 함수에서 일어나는 호출을 다이어그램으로 그려 보세요.
- 라이프라인: GameScene, Character, GameDB, MtNetwork
| 모양 | 뜻 |
|---|---|
| 위의 상자와 아래로 뻗은 점선 (라이프라인) | 객체와 그 객체가 살아 있는 시간 |
| 세로 막대 (활성화) | 그 객체가 일하고 있는 구간 |
| 실선 + 꽉 찬 화살촉 | 함수 호출 |
| 점선 + 열린 화살촉 | 객체를 만들거나(Create) 얻어 옴(Get) |
| 자기에게 돌아오는 화살표 | 자기 함수를 부름 (Init, Connect) |
void Start()
{
Character hero = Character.Create(); // 1: Create() → 안에서 2: Init(), 3: GetCharacter()
hero.transform.SetParent(transform); // 4: transform.SetParent()
MtNetwork net = MtNetwork.Get(); // 5: Get()
net.Start(); // 6: Start() → 안에서 6.1: Connect()
net.RegisterGameListener(this); // 7: RegisterGameListener()
}Character 상자가 GameScene 보다 아래에서 시작하는 데 주목하세요. Create() 로 만들어지기 전에는 Character 가 없기 때문입니다. MtNetwork 도 Get() 으로 얻어 온 뒤부터 그려집니다. 시퀀스 다이어그램은 "언제 무엇이 생기는지" 까지 보여 줍니다.
상태 다이어그램
네 번째 다이어그램인 상태 다이어그램(State Chart)은 게임에서 특히 중요해서 다음 편에서 몬스터의 상태 머신과 함께 따로 다룹니다.
정리
- 유스케이스는 누가 무엇을, 클래스는 누가 누구를, 시퀀스는 어떤 순서로.
- 선의 종류가 뜻입니다. 실선은 가지고 있고, 점선은 잠깐 쓰고, 빈 삼각형은 물려받습니다.
- 이미 짠 코드를 다시 그려 봅니다. 화살표가 몰리는 곳이 고칠 곳입니다.
다음 편에서는 상태 다이어그램과 몬스터의 상태 머신, 그리고 게임 프레임워크 설계를 다룹니다.
함께 읽으면 좋은 글
AI가 만든 Unity 코드를 직접 검증해 보고 싶다면
이 글에서 살펴본 구조를 바탕으로 AI에게 작업을 요청하고 결과를 읽는 연습을 이어가세요. 「AI 코드를 읽는 게임 개발자」 무료 세션 1에서 시작하거나, 전체 커리큘럼과 수강 안내를 확인할 수 있습니다.