์๊ฐ
"๋ ๋ฒ ์ธก์ ํ๊ณ ํ ๋ฒ ์๋ฅด์ญ์์ค"๋ผ๋ ๋ง์ ๋ชจ๋๋ค ๋ค์ด ๋ณด์ จ์ ๊ฒ์ ๋๋ค. ํ๋ก๊ทธ๋๋ฐ์ ๋ํ ์ง์ ํ ์กฐ์ธ์ ๋๋ค. ๊ตฌํ์ ์ํํ๋ ๋ฐ ์๊ฐ์ ๋ณด๋ด๊ธฐ ์ ์ ํญ์ ๊ตฌํ์ ๋ํด ์๊ฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ตฌํํ๋ ๋์ ์ข ์ข ํด๋์ค๋ฅผ ๋ง๋ค๊ณ ์ํธ ์์ฉ ๋ฐฉ์์ ์๊ฐํด์ผ ํฉ๋๋ค. ๋ชจ๋ ๊ฒ์ ์๊ฐ์ ์ผ๋ก ํํํ๋ฉด ์ข ์ข ๊ฐ์ฅ ์ ํํ ์๋ฃจ์ ์ ์ฐพ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. ์ด๊ฒ์ 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](https://cdn.codegym.cc/images/article/c593932e-d51b-4f39-ba9c-66dd9d8ae2b3/800.jpeg)
![UML: ์ด๋ก ์์ ์ค์ต์ผ๋ก - 3](https://cdn.codegym.cc/images/article/710beddc-0f42-47a0-8b48-c4ac2803a50b/512.jpeg)
@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
์ด ๋ชจ๋ ์์
์ ์ํํ ํ ๋ค์์ ์ป์ต๋๋ค. ![UML: ์ด๋ก ์์ ์ค์ต์ผ๋ก - 4](https://cdn.codegym.cc/images/article/31e8f547-c84a-4cf3-9234-c53fba70e6f9/512.jpeg)
์คํ ๋ฉ์ด์
PlantUML ๋ค์ด์ด๊ทธ๋จ์ ์๋์ผ๋ก ์์ฑํ๋ ๋ค์ํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์๋ฅผ ๋ค์ด IDEA์๋ SketchIT ํ๋ฌ๊ทธ์ธ์ด ์์ง๋ง ๋ค์ด์ด๊ทธ๋จ์ ์์ ํ ์ฌ๋ฐ๋ฅด๊ฒ ๊ทธ๋ฆฌ์ง๋ ์์ต๋๋ค. ์ธํฐํ์ด์ค ๊ตฌํ์ด ์๋ชป ๊ทธ๋ ค์ก๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค(์์์ผ๋ก ํ์๋จ). ์ธํฐ๋ท์๋ ์ด๊ฒ์ ํ๋ก์ ํธ์ ๋น๋ ํ๋ก์ธ์ค์ ํตํฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์๊ฐ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด Maven์์ uml-java-docklet์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ฐพ์ ์ ์์ต๋๋ค . ์์ฐ์ ์ํด Maven Archetype์ ์ฌ์ฉํ์ฌ Maven ํ๋ก์ ํธ๋ฅผ ๋น ๋ฅด๊ฒ ์์ฑํฉ๋๋ค. ๋ฌ๋ฆฌ๋ค
mvn archetype:generate
๋ฒํธ ์ ํ ๋๋ ํํฐ ์ ์ฉ์ ๋ํ ์๋ต์ผ๋ก ๊ธฐ๋ณธ๊ฐ์ ๊ทธ๋๋ก ๋๊ณ Enter ํค๋ฅผ ๋๋ฅด๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ํญ์ "maven-archetype-quickstart"์
๋๋ค. ์ต์ ๋ฒ์ ์ ์ ํํ์ญ์์ค. ๋ค์์ผ๋ก ๋ช ๊ฐ์ง ์ง๋ฌธ์ ๋ตํ๊ณ ํ๋ก์ ํธ ์์ฑ์ ์๋ฃํ๊ฒ ์ต๋๋ค. Maven์ ์ด ๋ฌธ์์ ์ฃผ์ ๊ฐ ์๋๋ฏ๋ก Maven ์ฌ์ฉ์ ์ผํฐ![UML: ์ด๋ก ์์ ์ค์ต์ผ๋ก - 5](https://cdn.codegym.cc/images/article/327438df-0d1c-40f6-b4e6-1a6bdaa6ca95/512.jpeg)
mvn clean install
๊ทธ๋ฆฌ๊ณ
mvn javadoc: javadoc
์ด์ ์์ฑ๋ ๋ฌธ์(explorer target\site\apidocs\index.html)๋ฅผ ์ด๋ฉด UML ๋ค์ด์ด๊ทธ๋จ์ด ํ์๋ฉ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ด์ ๊ตฌํ ๊ด๊ณ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ํ์๋ฉ๋๋ค. :)
GO TO FULL VERSION