소개
"두 번 측정하고 한 번 자르십시오"라는 말을 모두들 들어 보셨을 것입니다. 프로그래밍에 대한 진정한 조언입니다. 구현을 수행하는 데 시간을 보내기 전에 항상 구현에 대해 생각하는 것이 좋습니다. 구현하는 동안 종종 클래스를 만들고 상호 작용 방식을 생각해야 합니다. 모든 것을 시각적으로 표현하면 종종 가장 정확한 솔루션을 찾는 데 도움이 될 수 있습니다. 이것은 UML 클래스 다이어그램이 우리에게 도움이 되는 곳입니다.UML이란 무엇입니까?
검색 엔진에서 관련 이미지를 보면 UML이 다이어그램, 화살표 및 사각형과 관련이 있음을 알 수 있습니다. UML은 Unified Modeling Language의 약자임을 알아야 합니다. 통합은 여기서 중요한 단어입니다. 이것은 우리의 이미지가 우리뿐만 아니라 UML을 아는 다른 사람도 이해할 수 있음을 의미합니다. 다이어그램을 그리기 위한 공통어입니다.위키피디아에 따르면,
"UML은 시스템 설계를 시각화하는 표준 방법을 제공하기 위한 소프트웨어 엔지니어링 분야의 범용 개발 모델링 언어입니다."모든 사람이 추측하지는 않지만 가장 흥미로운 점은 UML에 사양이 있다는 것입니다. UML 2 사양도 있습니다. 사양에 대한 자세한 내용은 Object Management Group 웹사이트에서 확인할 수 있습니다. 실제로 이 그룹은 UML 사양을 개발합니다. UML이 클래스 구조를 설명하는 데만 국한되지 않는다는 점도 흥미롭습니다. UML 다이어그램에는 여러 유형이 있습니다. Wikipedia에는 다양한 유형의 UML 다이어그램에 대한 간략한 설명이 있습니다. UML 다이어그램 . UML 클래스 다이어그램으로 돌아가서 "Head First Design Patterns"라는 책을 언급할 가치가 있습니다 . UML 다이어그램을 사용하여 디자인 패턴을 설명합니다. 결론은 UML이 실제로 사용된다는 것입니다. 그리고 그것을 알고 사용하는 방법을 이해하는 것이 매우 유용하다는 것이 밝혀졌습니다.
애플리케이션
IDE에서 UML로 작업할 수 있는지 알아봅시다. IntelliJ IDEA를 IDE로 사용하겠습니다. IntelliJ IDEA Ultimate를 사용하는 경우 "UML 지원" 플러그인이 "즉시" 설치됩니다. 아름다운 클래스 다이어그램을 자동으로 생성할 수 있습니다. 예를 들어 Ctrl+N 또는 "탐색" -> "클래스" 메뉴 항목을 사용하여 ArrayList 클래스로 이동합니다. 이제 클래스 이름의 컨텍스트 메뉴에서 "다이어그램" -> "다이어그램 팝업 표시"를 선택합니다. 결과적으로 아름다운 다이어그램을 얻습니다.

@startuml
class ArrayList {
}
class LinkedList {
}
@enduml
IDEA에서 결과를 보려면 "보기" -> "도구 창" -> "PlantUML"을 선택하십시오. 클래스를 나타내는 두 개의 사각형만 얻습니다. 우리는 이 두 클래스 모두 List 인터페이스를 구현한다는 것을 알고 있습니다. 이 클래스 관계를 실현이라고 합니다. 이 관계는 점선이 있는 화살표를 사용하여 표시됩니다. 그려봅시다:
interface List
List <|.. ArrayList
List <|.. LinkedList
List는 Collection 클래스의 자식 중 하나입니다 . 즉, Collection 을 상속합니다 . 이 관계를 일반화라고 합니다. 일반적인 연속 선이 있는 화살표처럼 보입니다. 그려봅시다:
interface Collection
Collection <|-- List
다음 유형의 관계를 위해 ArrayList 클래스 설명에 요소의 패키지 개인 배열 에 대한 항목을 추가합니다 .
~Object[] elementData
이제 ArrayList에 일부 객체가 포함되어 있음 을 보여주고 싶습니다 . 이 경우 집계 관계가 있습니다. 배열목록다른 개체를 포함하므로 집계입니다. 목록의 개체는 목록 없이 존재할 수 있기 때문에 집계라고 합니다. 개체는 목록의 필수 부분이 아닙니다. 그들의 수명은 목록의 수명과 연결되어 있지 않습니다. "집합"이라는 단어는 라틴어에서 왔으며 "조립된", 즉 무언가로 구성된 것으로 번역됩니다. 예를 들어, 생활에는 펌프와 모터로 구성된 펌프 어셈블리(집합체)가 있습니다. 어셈블리 자체는 분해할 수 있으며 일부 구성 요소는 그대로 둘 수 있습니다. 예를 들어, 판매하거나 다른 어셈블리에 넣습니다. 리스트에서도 마찬가지입니다. 이것은 집계에서 빈 마름모와 연속 선으로 표현됩니다. 이를 다음과 같이 표현하겠습니다.
class Object{
}
ArrayList o- Object
이제 우리는 ArrayList 와 달리 LinkedList 클래스가 저장된 데이터를 참조하는 컨테이너인 Node 를 포함하고 있음 을 보여주고 싶습니다 . 이 경우 Node 는 LinkedList 의 일부 이며 독립적으로 존재하지 않습니다. 노드 는 콘텐츠 자체가 아닙니다. 콘텐츠에 대한 참조만 포함합니다. 예를 들어 LinkedList 에 문자열을 추가할 때 문자열에 대한 참조와 이전 및 다음 노드 에 대한 링크를 포함하는 새 노드를 추가합니다.. 이 관계를 구성이라고 합니다. 컴포지트(구성 부품으로 이루어진 것)에 채워진 마름모꼴로 연속선을 그려서 묘사합니다. 이제 관계를 텍스트로 표현하겠습니다.
class Node{
}
LinkedList *-- Node
이제 또 다른 중요한 유형의 관계인 종속성을 묘사하는 방법을 배워야 합니다. 한 클래스가 다른 클래스를 사용하지만 해당 클래스가 사용된 클래스를 포함하거나 상속하지 않을 때 사용됩니다. 예를 들어 LinkedList 와 ArrayList는 ListIterator를 생성하는 방법을 알고 있습니다 . 이것을 점선이 있는 화살표로 나타냅니다.
class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
이 모든 작업을 수행한 후 다음을 얻습니다. 
오토메이션
PlantUML 다이어그램을 자동으로 생성하는 다양한 방법이 있습니다. 예를 들어 IDEA에는 SketchIT 플러그인이 있지만 다이어그램을 완전히 올바르게 그리지는 않습니다. 인터페이스 구현이 잘못 그려졌다고 가정해 보겠습니다(상속으로 표시됨). 인터넷에는 이것을 프로젝트의 빌드 프로세스에 통합하는 방법에 대한 예가 있습니다. 예를 들어 Maven에서 uml-java-docklet을 사용하는 방법을 찾을 수 있습니다 . 시연을 위해 Maven Archetype을 사용하여 Maven 프로젝트를 빠르게 생성합니다. 달리다
mvn archetype:generate
번호 선택 또는 필터 적용에 대한 응답으로 기본값을 그대로 두고 Enter 키를 누르기만 하면 됩니다. 항상 "maven-archetype-quickstart"입니다. 최신 버전을 선택하십시오. 다음으로 몇 가지 질문에 답하고 프로젝트 생성을 완료하겠습니다. Maven은 이 문서의 주제가 아니므로 Maven 사용자 센터
mvn clean install
그리고
mvn javadoc: javadoc
이제 생성된 문서(explorer target\site\apidocs\index.html)를 열면 UML 다이어그램이 표시됩니다. 그런데 이제 구현 관계가 올바르게 표시됩니다. :)
GO TO FULL VERSION