{{위키데이터 속성 추적}}
[[파일:UML logo.svg|오른쪽|200px]]
[[파일:UML Diagrams.jpg|섬네일|420px|UML 다이어그램]]

'''통합 모델링 언어'''(UML, {{llang|en|Unified Modeling Language}})는 [[소프트웨어 공학]]에서 사용되는 표준화된 범용 [[모델링 언어]]이다.<ref name=":1">{{서적 인용| title = Unified Modeling Language User Guide, The | publisher = Addison-Wesley | edition = 2 | year = 2005 | page = 496 | url = http://www.informit.com/store/unified-modeling-language-user-guide-9780321267979 | isbn = 0321267974}}</ref> 이 표준은 UML을 고안한 [[객체 관리 그룹]]에서 관리 하고 있다.

UML은 소프트웨어 집약 시스템의 [[시각적 모델]]을 만들기 위한 도안 표기법을 포함한다.

== 개요 ==
통합 모델링 언어는 [[객체 지향 프로그래밍]] 소프트웨어 집약 시스템을 개발할 때 산출물을 명세화, 시각화, 문서화할 때 사용한다.<ref name="Foldoc01">{{웹 인용 |url= http://foldoc.org/UML |제목=Unified Modeling Language |웹사이트=[[자유 온라인 컴퓨팅 사전]] |날짜=2002년 1월 3일 |확인날짜=2020년 1월 21일}}</ref> UML은 아래와 같은 사항을 포함하여 시스템의 구조적 청사진을 시각화하는 표준안을 제공한다:

* [[유스 케이스|행위자 (UML)]]
* [[비즈니스 프로세스]]
* (논리적) [[부품 (UML)]]
* [[행위 (UML)]]
* [[프로그래밍 언어]] 구문
* [[데이터베이스 스키마]]
* 재사용할 수 있는 [[컴포넌트 기반 소프트웨어 공학]]<ref name="OMG00">{{저널 인용 |성1=Booch |이름1=Grady |성2=Jacobson |이름2=Ivar |이름3=James |성3=Rumbaugh |날짜=2017년 11월 |제목=ABOUT THE UNIFIED MODELING LANGUAGE SPECIFICATION |url=https://www.omg.org/spec/UML/2.5.1 |저널= |출판사= |권= |호=2.5.1 |doi= |확인날짜=2020년 1월 21일 }}</ref>

UML은 [[데이터 모델링]]([[개체-관계 모델]])과 [[비즈니스 모델링]](업무 흐름), [[객체 모델링]], 부품 모델링의 최선의 기술을 조합한다.
UML은 [[소프트웨어 개발 프로세스]]뿐만 아니라 다른 구현 기술의 모든 공정에서 사용될 수 있다. UML은 [[Booch 방법론]]의 [[객체 모델링 기법]](OMT)와 [[객체 지향 소프트웨어 공학]](OOSE)을 광범위하게 사용할 수 있는 단일한 공통 [[모델링 언어]]로 통합한다. UML의 목표는 동시적 [[분산 컴퓨팅|분산 시스템]]을 모델링 하는 표준 언어다. UML은 [[산업]]의 실질적 [[표준]]으로서, [[객체 관리 그룹]](OMG)에 의해 개선되고 있다. 초기에 OMG가 엄격한 소프트웨어 모델링 언어를 만들기 위해 객체 지향 방법론적인 통지를 요청했고, 많은 산업 선구자가 UML 표준 제작을 돕기위해 진지하게 응답하였다.<ref name="Foldoc01"/>

UML 모델은 [[객체 관리 그룹]]이 지원하는 [[QVT]]와 같은 변환 언어 등을 이용해 다른 표현(예를 들면 자바)으로 자동적으로 변환된다.
UML은 확장할 수 있으며 커스터마이제이션을 위한 메커니즘인 [[프로파일 (UML)]], [[스테레오타입 (UML)]]을 제공한다.
프로파일을 이용한 확장의 의미는 UML 2.0에서 개선되었다.

== 역사 ==
UML은 [[그래디 부치]], [[제임스 럼버|제임스 럼버(James Rumbaugh)]], [[이바 야콥슨|이바 야콥슨(Ivar Jacobson)]]의 머리에서 태어났다. 최근 “쓰리 아미고(Three Amigos-3인방)”이라고 불리는 이 세 사람은 80년대 전반부터 90년대 초반까지 객체지향 분석 설계 분야에서 각자의 영역에서 방법론을 연구해 왔었다. 그들이 발표한 방법론은 동일한 분야의 다른 경쟁자들보다 항상 탁월한 위치에 있었으며, 세 사람은 90년대 중반에 이르러 각자의 아이디어를 교환하기 시작하였고, 결국 각자의 방법을 하나로 모아 합치기에 이른다.

1994년, 럼버는 부치가 세운 [[래셔널 소프트웨어]]에 영입 되었고, 야콥슨은 그로부터 1년 후에 래셔널 사에 들어가게 된다.

나머지는 그들이 말하듯이, 역사(History)라고 말할 수 있다. UML의 초안(draft) 버전은 소프트웨어 업계를 뒤흔들기 시작했고, 그 결과로 돌아온 피드백은 바로 변경점에 반영되었다. “UML은 우리들의 전략에 딱 맞는다”라고 인식해 가는 회사가 늘어남에 따라 그 결과로 UML 컨소시엄도 발족하게 되었다. UML 컨소시엄의 멤버로는 [[디지털 이큅먼트 코퍼레이션]], [[휴렛 팩커드]], [[인텔리캅]], [[마이크로소프트]], [[오라클 (기업)|오라클]], [[텍사스 인스트루먼트]], 래셔널 소프트웨어 등이 있었다. 1997년 UML 컨소시엄은 UML 버전 1.0을 만들어 내었고, [[객체 관리 그룹]](OMG:Object Management Group)이 표준 모델링 언어의 제안서를 내라는 요구에 맞추어 이것을 제출 하였다.

UML 컨소시엄은 계속 발전하였으며, OMG에 다시 상정된 UML 1.1d은 1997년 말에 표준 모델링 언어로 채택되었다. OMG는 UML의 관리 기법을 받아들여 1998년에 새로운 수정안을 발표하였다. UML은 소프트 웨어의 업계 명실 상부한 표준이 되었으며, 계속 수정 보완되고 있다. 버전 1.3과 1.4 그리고 1.5가 나와 있고, 이전 버전들, 즉 버전 1.X는 대부분의 모델 및 UML 모델링 책의 기본이 되었다.<ref>Joseph Schmuller, ''Teach Yourself UML in 24 Hours, 3/E'', SAMS, 2004</ref>
2005년 버전 2.0이 OMG에 의해 승인되었다.

== UML 구성요소 ==
=== 소프트웨어 개발 방법론 ===
{{참고|소프트웨어 개발 방법론}}
UML 그 자체는 개발 방법이 아니지만<ref>John Hunt (2000). ''The Unified Process for Practitioners: Object-oriented Design, UML and Java''. Springer, 2000. {{ISBN|1-85233-275-1}}. p.5.door</ref> 그 당시 주도적이었던 객체 지향 소프트웨어 개발 방법론(예를 들면 [[Booch 방법론]], [[객체 모델링 기법]], [[Objectory]])과 잘 어울리도록 설계되었다. UML 발전해 감에 따라서 UML의 장점을 취하기 위해 몇몇 다른 방법론(예를 들면 객체 모델링 기법)이 개선되었다. 또 UML을 기반으로 한 새 방법론이 만들어지기도 했는데 [[래셔널 통합 프로세스|IBM 래셔널 통합 프로세스]](RUP)가 가장 유명하다. 이 외에도 추상 방법론(Abstraction Method), 동적 시스템 개발 방법론 등 더 특수한 해결책이나 다른 목적을 달성하기 위해 설계된 UML 기반의 방법론이 많이 있다.

=== 모델 ===
모델은 이학 및 공학 분야에서 상당히 유용하게 쓰이는 개념으로서 가장 일반적인 의미로 말하면, "모델을 만든다"는 것은 잘 모르고 있는 것을 이해하는데 도움이 될 것으로 추측되는 어떤 것을 사용한다는 뜻이다. 어떤 분야에서는 이 모델의 일련의 수식(방정식)의 집합으로 정의되기도 하며, 다른 분야에서는 컴퓨터 시뮬레이션을 모델로 삼기도 한다.

UML의 여러 가지 그래픽 요소는 하나의 큰 그림, 즉 다이어그램을 그리는데 사용된다. UML은 언어이기 때문에, 이들 그래픽 요소들을 맞추는 데에는 규칙이 필요하다. 다이어그램의 목적은 시스템을 여러 가지 시각에서 볼 수 있는 뷰(View)를 제공하는 것이며, 이러한 뷰의 집합을 모델(Model)이라고 한다. 시스템의 UML 모델은 건물을 짓는 건축가의 스케일 모델과도 비슷하다고 말할 수 있다. UML 모델은 시스템 자체의 “목적 행동”을 설명하는 언어이다. UML 모델은 시스템의 “구현 방법을 설명하는 수단”이 아니다.

=== 클래스 다이어그램 ===
대부분의 사물은 자기만의 속성과 일정한 행동 수단을 지니고 있다. 이러한 행동을 오퍼레이션(Operation)의 집합으로 생각할 수 있다. UML에서는 두단어 이상으로 이루어진 클래스 이름은 단어 사이의 공백을 없애고, 각 단어의 처음 문자를 모두 대문자로 한다(예:Wikipedia). 속성과 행동의 이름 또한 마찬가지이지만, 가장 앞 단어의 처음 문자는 소문자로 한다(예:edit()).

== 같이 보기 ==
[[파일:Umbrello KDE 4.1.png|섬네일|320px|[[Umbrello UML Modeller]] 스크린샷.]]

* [[UML 용어 소사전]]
* [[애자일 모델링]]
* [[개체-관계 모델]]
* [[실행형 UML]]
* [[모델링 기초 개념]]
* [[UML 도구 목록]]
* [[메타 모델링]]
* [[모델 기반 시험]]
* [[모델 주도 통합]]
* [[소프트웨어 청사진]]
* [[SysML]]
* [[UML 상태 기계]]
* [[UML 색상]]
* [[UXF]]
* [[UN/CEFACT 모델링 방법론]]
* [[메시지 시퀀스 차트]]

== 각주 ==
{{각주}}

== 외부 링크 ==
* {{위키공용분류-줄}}

{{UML}}
{{ISO 표준}}
{{소프트웨어 공학}}

{{전거 통제}}

[[분류:통합 모델링 언어| ]]
[[분류:소프트웨어 공학]]
[[분류:데이터 모델링 언어]]
[[분류:다이어그램]]
[[분류:지식 표현]]
[[분류:ISO 표준]]
[[분류:명세 언어]]
[[분류:모델링 언어]]