JavaRush /Java Blog /Random-KO /UML: 이론에서 실습까지
Viacheslav
레벨 3

UML: 이론에서 실습까지

Random-KO 그룹에 게시되었습니다

소개

어린시절 누구나 “ 두 번 측정하고 한 번 자르다 ” 라는 말을 들어본 적이 있을 것입니다 . 프로그래밍에서도 마찬가지다. 실행하는 데 시간을 보내기 전에 구현에 대해 항상 생각하는 것이 좋습니다. 구현 중에 클래스를 생성하고 상호 작용을 고안해야 하는 경우가 많습니다. 그리고 이를 시각적으로 표현하면 가장 올바른 방법으로 문제를 해결하는 데 도움이 되는 경우가 많습니다. 이것이 바로 UML이 우리를 돕는 곳입니다 .

UML이란 무엇입니까?

검색 엔진에서 사진을 보면 UML이 다이어그램, 화살표 및 사각형에 관한 것임을 분명히 알 수 있습니다. 중요한 것은 UML이 Unified Modeling Language 로 변환된다는 것입니다 . 여기서 통일이라는 단어가 중요합니다. 즉, 우리 그림은 우리뿐만 아니라 UML을 아는 다른 사람들도 이해할 수 있습니다. 이것은 다이어그램을 그리는 데 사용되는 국제 언어임이 밝혀졌습니다.

UML: 이론에서 실습까지 - 1

Wikipedia에 따르면

UML은 소프트웨어 개발, 비즈니스 프로세스 모델링, 시스템 설계 및 조직 구조 표시의 객체 모델링을 위한 그래픽 설명 언어입니다.
모든 사람이 생각하거나 깨닫지 못하는 가장 흥미로운 점은 UML에 사양이 있다는 것입니다. 게다가 UML2 사양도 있습니다. 사양에 대한 자세한 내용은 개체 관리 그룹 웹사이트에서 확인할 수 있습니다 . 실제로 이 그룹에서는 UML 사양을 개발하고 있습니다. UML이 클래스 구조를 설명하는 데만 국한되지 않는다는 점도 흥미롭습니다. UML 다이어그램에는 다양한 유형이 있습니다. UML 다이어그램 유형에 대한 간략한 설명은 동일한 Wikipedia: UML 다이어그램 또는 Timur Batyrshinov의 UML 다이어그램 검토 비디오에서 볼 수 있습니다 . UML은 다양한 프로세스를 설명하는 데에도 널리 사용됩니다. 예를 들면 JWT를 사용한 Single Sign-On입니다 . UML 클래스 다이어그램의 사용으로 돌아가서 동일한 UML 다이어그램으로 패턴을 설명하는 Head First: Design Patterns 책을 주목할 가치가 있습니다. UML이 실제로 사용되고 있는 것으로 밝혀졌습니다. 그리고 그 적용에 대한 지식과 이해는 매우 유용한 기술이라는 것이 밝혀졌습니다.

애플리케이션

IDE에서 동일한 UML을 사용하여 작업할 수 있는 방법을 살펴보겠습니다. IntelliJ Idea를 IDE로 활용해 보겠습니다 . IntelliJ Idea Ultimate를 사용하면 즉시 " UML Support " 플러그인이 설치 됩니다 . 이를 통해 아름다운 클래스 다이어그램을 자동으로 생성할 수 있습니다. 예를 들어 Ctrl+N을 사용하거나 메뉴 항목 "Navigate" -> "Class"를 사용하면 ArrayList 클래스로 이동합니다 . 이제 클래스 이름에 대한 컨텍스트 메뉴를 통해 “다이어그램” -> “다이어그램 팝업 표시”를 선택합니다. 결과적으로 우리는 아름다운 다이어그램을 얻습니다.
UML: 이론에서 실습까지 - 2
하지만 직접 그리고 싶은데 Ultimate 버전의 Idea도 없다면 어떻게 될까요? IntelliJ Idea Community Edition을 사용한다면 다른 선택의 여지가 없습니다. 이렇게 하려면 UML 다이어그램이 어떻게 구성되어 있는지 이해해야 합니다. 먼저 Graphviz를 설치해야 합니다 . 그래프를 시각화하기 위한 유틸리티 세트입니다. 이는 우리가 사용할 플러그인에서 사용됩니다. 설치 후 Graphviz 설치 디렉터리 의 bin 디렉터리를 PATH 환경 변수 에 추가해야 합니다 . 그런 다음 IntelliJ Idea의 메뉴에서 파일 -> 설정을 선택합니다. "설정" 창에서 "플러그인" 카테고리를 선택하고 "저장소 찾아보기" 버튼을 클릭한 후 PlantUML 통합 플러그인을 설치합니다 . PlantUML이 왜 그렇게 좋은가요 ? UML을 설명하기 위해 " dot " 이라는 그래프 설명 언어를 사용하며 이를 통해 UML을 더욱 보편적으로 사용할 수 있습니다. 이 언어는 PlantUML에서만 사용되는 것이 아닙니다. 또한 아래에서 수행하는 모든 작업은 IDE뿐만 아니라 온라인 서비스 planttext.com 에서도 수행할 수 있습니다 . PlantUML 플러그인을 설치한 후 “파일” -> “새로 만들기”를 통해 UML 다이어그램을 생성할 수 있습니다. "UML 클래스" 유형의 다이어그램을 만들어 보겠습니다. 이 과정에서 예제가 포함된 템플릿이 자동으로 생성됩니다. 해당 내용을 삭제하고 Habr: 클래스 관계 - UML에서 코드까지의 기사로 무장한 자체적인 내용을 만들어 보겠습니다 . 그리고 이것을 텍스트에서 어떻게 묘사하는지 이해하기 위해 PlantUML 매뉴얼인 plantuml class-diagram을 살펴보겠습니다 . 맨 처음에는 연결을 설명하는 방법을 보여주는 표가 있습니다.
UML: 이론에서 실습까지 - 3
" UML의 클래스 간 관계. 예제 " 에서 연결 자체를 살펴볼 수도 있습니다 . 이러한 자료를 바탕으로 UML 다이어그램 만들기를 시작해 보겠습니다. 두 클래스를 설명하는 다음 콘텐츠를 추가해 보겠습니다.

@startuml
class ArrayList {
}
class LinkedList {
}
@enduml
Idea에서 결과를 보려면 "View" -> "Tool Windows" -> "PlantUML"을 선택하세요. 클래스를 나타내는 두 개의 사각형만 얻을 수 있습니다. 우리가 알고 있듯이 이 두 클래스는 모두 List 인터페이스를 구현합니다. 이 클래스 관계를 구현이라고 합니다. 이러한 연결을 나타내려면 점선이 있는 화살표를 사용하십시오. 그것을 묘사해 보자:
interface List
List <|.. ArrayList
List <|.. LinkedList
List- 하위 클래스 중 하나입니다 Collection. 즉, Collection에서 상속됩니다. 이러한 연결을 일반화라고 합니다. 규칙적인 연속선이 있는 화살표처럼 보입니다. 그것을 묘사해 보자:
interface Collection
Collection <|-- List
다음 연결 유형의 경우 패키지 전용 요소 배열 ArrayList에 대한 항목을 클래스 설명에 추가합니다.
~Object[] elementData
이제 우리는 어떤 객체가 포함되어 있는지 보여주고 싶습니다 ArrayList. 이 경우 연결 유형은 aggregation 이 됩니다 . 이 경우의 단위는 ArrayList이므로 여기에는 다른 개체가 포함되어 있습니다. 목록의 개체는 목록 없이도 존재할 수 있기 때문에 집계를 선택합니다. 목록의 필수 부분은 아닙니다. 그들의 수명은 목록의 수명과 연결되어 있지 않습니다. Aggregate는 라틴어에서 "조립된", 즉 무언가로 구성된 것으로 번역됩니다. 예를 들어, 인생에는 펌프와 모터로 구성된 펌핑 장치가 있습니다. 장치 자체를 분해하여 일부 구성 요소를 남겨 둘 수 있습니다. 예를 들어, 판매하거나 다른 단위에 넣는 것입니다. 목록도 마찬가지다. 그리고 이는 단위 근처의 빈 다이아몬드와 연속된 선의 형태로 표현됩니다. 이를 다음과 같이 묘사해보자:
class Object{
}
ArrayList o- Object
ArrayList이제 우리는 와 달리 클래스에 저장된 데이터를 참조하는 컨테이너가 LinkedList포함되어 있음 을 보여주고 싶습니다 . Node이 경우 Node그들은 그들 자신의 일부 LinkedList이며 따로 살 수 없습니다. Node콘텐츠가 직접 저장되지는 ​​않지만 해당 콘텐츠에 대한 링크만 포함되어 있습니다. 예를 들어 LinkedList행 에 추가할 때 Node해당 행에 대한 링크와 이전 및 다음 행에 대한 링크가 포함된 새 를 추가합니다 Node. 이러한 유형의 의사소통을 구성 이라고 합니다 . 복합재(부품으로 구성된 복합재)를 표시하려면 연속된 선과 함께 유색 다이아몬드가 그려집니다. 이제 이것을 연결의 텍스트 표시로 작성해 보겠습니다.
class Node{
}
LinkedList *-- Node
이제 우리는 또 다른 중요한 관계 유형인 종속 관계를 표시하는 방법을 배워야 합니다. 한 클래스가 다른 클래스를 사용할 때 사용되며, 해당 클래스는 사용 중인 클래스를 포함하지 않으며 그 하위 클래스도 아닙니다. 예 를 들어, LinkedList그들은 . 이것을 점선이 있는 화살표로 표시해 보겠습니다. ArrayListListIterator
class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
이 모든 것이 끝나면 다음과 같이 보일 것입니다:
UML: 이론에서 실습까지 - 4
필요한 만큼 자세히 설명할 수 있습니다. 모든 명칭은 여기에 표시됩니다: " PlantUML - 클래스 다이어그램 ". 또한 이러한 다이어그램을 그리는 데 초자연적 인 것은 없으며 작업을 수행 할 때 손으로 빠르게 그릴 수 있습니다. 이는 애플리케이션 아키텍처를 통해 사고하는 능력을 개발하고 잘못된 모델을 구현하는 데 하루를 보낸 후가 아니라 조기에 클래스 구조 결함을 식별하는 데 도움이 됩니다. 제 생각에는 그것이 시도해 볼 만한 좋은 이유라고 생각하나요? )
UML: 이론에서 실습까지 - 5

오토메이션

PlantUML 다이어그램을 자동으로 생성하는 방법에는 여러 가지가 있습니다. 예를 들어 Idea 에는 SketchIT 플러그인이 있지만 올바르게 그려지지는 않습니다. 예를 들어, 인터페이스 구현이 잘못 그려졌습니다(상속으로 표시됨). 또한 이를 프로젝트의 빌드 라이프사이클에 포함시키는 방법에 대한 예제가 인터넷에 있습니다. uml-java-docklet을 사용하는 Maven 의 예가 있다고 가정해 보겠습니다 . 이것이 어떻게 수행되는지 보여주기 위해 Maven Archetype을 사용하여 Maven 프로젝트를 빠르게 생성하겠습니다. 다음 명령을 실행해 보겠습니다. 필터를 선택하라는 메시지가 표시되면( 숫자 선택 또는 필터 적용 ) 간단히 Enter를 눌러 기본값을 그대로 둡니다. 이는 항상 " maven-archetype-quickstart " 입니다 . 최신 버전을 선택하세요. 다음으로 질문에 답하고 프로젝트 생성을 완료합니다. mvn archetype:generate
UML: 이론에서 실습까지 - 6
Maven은 이 기사의 초점이 아니므로 Maven 질문에 대한 답변은 Maven 사용자 센터 에서 찾을 수 있습니다 . 생성된 프로젝트에서 편집을 위해 프로젝트 설명 파일 pom.xml을 엽니다 . uml-java-doclet 설치 설명 의 내용을 복사해 보겠습니다 . 설명에 사용된 아티팩트를 Maven Central 저장소에서 찾을 수 없습니다. 그러나 그것은 https://mvnrepository.com/artifact/com.chfourie/uml-java-doclet/1.0.0 과 함께 나에게 효과적이었습니다 . 즉, 해당 설명에서는 " info.leadinglight " 의 groupId를 " com.chfourie "로 바꾸고 버전을 " 1.0.0 "으로 설정하면 됩니다. 그런 다음 pom.xml 파일이 있는 디렉터리에서 다음 명령을 실행할 수 있습니다 . 이제 생성된 문서(explorer target\site\apidocs\index.html)를 열면 UML 다이어그램이 표시됩니다. 그건 그렇고, 구현은 이미 여기에 올바르게 표시되어 있습니다) mvn clean installmvn javadoc:javadoc

결론

보시다시피 UML을 사용하면 애플리케이션의 구조를 시각화할 수 있습니다. 게다가 UML은 이것에만 국한되지 않습니다. UML을 사용하면 회사 내의 다양한 프로세스를 설명하거나 작성 중인 기능이 작동하는 비즈니스 프로세스를 설명할 수 있습니다. UML이 개인적으로 얼마나 유용한지는 귀하가 결정하는 데 달려 있지만, 시간을 내어 UML을 더 자세히 읽어보는 것은 어떤 경우에도 유용할 것입니다. #비아체슬라프
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION