CodeGym /Java Blog /무작위의 /UML 클래스 다이어그램
John Squirrels
레벨 41
San Francisco

UML 클래스 다이어그램

무작위의 그룹에 게시되었습니다

소개

"두 번 측정하고 한 번 자르십시오"라는 말을 모두들 들어 보셨을 것입니다. 프로그래밍에 대한 진정한 조언입니다. 구현을 수행하는 데 시간을 보내기 전에 항상 구현에 대해 생각하는 것이 좋습니다. 구현하는 동안 종종 클래스를 만들고 상호 작용 방식을 생각해야 합니다. 모든 것을 시각적으로 표현하면 종종 가장 정확한 솔루션을 찾는 데 도움이 될 수 있습니다. 이것은 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 클래스로 이동합니다. 이제 클래스 이름의 컨텍스트 메뉴에서 "다이어그램" -> "다이어그램 팝업 표시"를 선택합니다. 결과적으로 아름다운 다이어그램을 얻습니다. UML: 이론에서 실습으로 - 2 하지만 직접 다이어그램을 그리고 싶다면 어떻게 해야 할까요? Ultimate 버전이 없으면 어떻게 됩니까? IntelliJ IDEA Community Edition을 사용하면 다른 선택의 여지가 없습니다. 따라서 UML 다이어그램이 구성되는 방식을 이해해야 합니다. 첫 번째,. 그래프 시각화 도구 세트입니다. 우리가 사용할 플러그인은 그것에 따라 다릅니다. 설치 후 Graphviz 설치 디렉터리의 bin 디렉터리를 PATH 환경 변수에 추가해야 합니다. 그런 다음 IntelliJ IDEA에서 메뉴의 File -> Settings를 선택합니다. "설정" 창에서 "플러그인" 범주를 선택하고 "리포지토리 찾아보기" 버튼을 클릭한 다음 PlantUML 통합 플러그인을 설치합니다. PlantUML의 장점은 무엇입니까? 이것은 "dot"라는 그래프 설명 언어를 사용하여 UML을 설명합니다. 이는 도트 언어가 PlantUML 이상에서 사용되기 때문에 더 보편적입니다. 또한 아래에서 수행하는 모든 작업은 IDE뿐만 아니라 planttext.com 에서도 온라인으로 수행할 수 있습니다.. PlantUML 플러그인을 설치한 후 "파일" -> "새로 만들기"를 사용하여 UML 다이어그램을 만들 수 있습니다. "UML 클래스" 다이어그램을 만들어 봅시다. 이렇게 하면 예제가 포함된 템플릿이 자동으로 생성됩니다. 내용을 삭제하고 직접 추가하겠습니다. 이를 텍스트로 표현하는 방법을 이해하려면 PlantUML 매뉴얼(plantuml class-diagram)을 살펴보십시오. UML: 이론에서 실습으로 - 3이러한 자료에 의존하여 UML 다이어그램 작성을 시작하겠습니다. 두 클래스를 설명하는 다음 콘텐츠를 추가합니다.

@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
이제 또 다른 중요한 유형의 관계인 종속성을 묘사하는 방법을 배워야 합니다. 한 클래스가 다른 클래스를 사용하지만 해당 클래스가 사용된 클래스를 포함하거나 상속하지 않을 때 사용됩니다. 예를 들어 LinkedListArrayList는 ListIterator를 생성하는 방법을 알고 있습니다 . 이것을 점선이 있는 화살표로 나타냅니다.

class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
이 모든 작업을 수행한 후 다음을 얻습니다. UML: 이론에서 실습으로 - 4필요한 만큼 세부 정보를 추가할 수 있습니다. 물론 그러한 다이어그램을 그리는 것이 초자연적인 것은 아닙니다. 자신의 작업을 할 때 손으로 빠르게 그릴 수 있습니다. 이렇게 하면 잘못된 모델을 구현하는 데 이미 하루를 보낸 후가 아니라 초기에 애플리케이션의 아키텍처를 통해 생각하고 클래스 구조의 단점을 식별하는 능력을 개발하는 데 도움이 됩니다. 시도해 볼 만한 좋은 이유인 것 같습니다. 그렇지 않나요? :)

오토메이션

PlantUML 다이어그램을 자동으로 생성하는 다양한 방법이 있습니다. 예를 들어 IDEA에는 SketchIT 플러그인이 있지만 다이어그램을 완전히 올바르게 그리지는 않습니다. 인터페이스 구현이 잘못 그려졌다고 가정해 보겠습니다(상속으로 표시됨). 인터넷에는 이것을 프로젝트의 빌드 프로세스에 통합하는 방법에 대한 예가 있습니다. 예를 들어 Maven에서 uml-java-docklet을 사용하는 방법을 찾을 수 있습니다 . 시연을 위해 Maven Archetype을 사용하여 Maven 프로젝트를 빠르게 생성합니다. 달리다

mvn archetype:generate
번호 선택 또는 필터 적용에 대한 응답으로 기본값을 그대로 두고 Enter 키를 누르기만 하면 됩니다. 항상 "maven-archetype-quickstart"입니다. 최신 버전을 선택하십시오. 다음으로 몇 가지 질문에 답하고 프로젝트 생성을 완료하겠습니다. Maven은 이 문서의 주제가 아니므로 Maven 사용자 센터UML: 이론에서 실습으로 - 5 에서 Maven에 대한 질문에 대한 답변을 찾을 수 있습니다 . 생성된 프로젝트에서 편집을 위해 프로젝트 설명 파일인 pom.xml을 엽니다. uml-java-docklet 설치 설명 의 내용을 이 파일에 복사합니다 . 설명에 사용된 아티팩트는 Maven Central 리포지토리에서 찾을 수 없습니다. 그러나 다음은 저에게 효과적이었습니다. https://mvnrepository.com/artifact/com.chfourie/uml-java-doclet/1.0.0. 즉, 설명에서 groupId를 "info.leadinglight"에서 "com.chfourie"로 바꾸고 버전을 "1.0.0"으로 설정하기만 하면 됩니다. 그런 다음 pom.xml 파일이 있는 디렉터리에서 다음 명령을 실행할 수 있습니다.

mvn clean install
그리고

mvn javadoc: javadoc
이제 생성된 문서(explorer target\site\apidocs\index.html)를 열면 UML 다이어그램이 표시됩니다. 그런데 이제 구현 관계가 올바르게 표시됩니다. :)

결론

보시다시피 UML을 사용하면 응용 프로그램의 구조를 시각화할 수 있습니다. 그러나 UML은 훨씬 더 많은 일을 할 수 있습니다. UML을 사용하여 회사 내의 다양한 프로세스를 설명하거나 작성 중인 기능을 포함하는 비즈니스 프로세스를 설명할 수 있습니다. UML이 개인적으로 얼마나 유용한지는 스스로 결정해야 하지만, 어떤 결정을 내리든 UML에 대해 자세히 알아보는 시간을 갖는 것이 도움이 될 것입니다.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION