์๊ฐ
์ด๋ฆฐ์์ ๋๊ตฌ๋ โ ๋ ๋ฒ ์ธก์ ํ๊ณ ํ ๋ฒ ์๋ฅด๋ค โ ๋ผ๋ ๋ง์ ๋ค์ด๋ณธ ์ ์ด ์์ ๊ฒ์ ๋๋ค . ํ๋ก๊ทธ๋๋ฐ์์๋ ๋ง์ฐฌ๊ฐ์ง๋ค. ์คํํ๋ ๋ฐ ์๊ฐ์ ๋ณด๋ด๊ธฐ ์ ์ ๊ตฌํ์ ๋ํด ํญ์ ์๊ฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ตฌํ ์ค์ ํด๋์ค๋ฅผ ์์ฑํ๊ณ ์ํธ ์์ฉ์ ๊ณ ์ํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ ์๊ฐ์ ์ผ๋ก ํํํ๋ฉด ๊ฐ์ฅ ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ๋์์ด ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก UML์ด ์ฐ๋ฆฌ๋ฅผ ๋๋ ๊ณณ์ ๋๋ค .UML์ด๋ ๋ฌด์์ ๋๊น?
๊ฒ์ ์์ง์์ ์ฌ์ง์ ๋ณด๋ฉด UML์ด ๋ค์ด์ด๊ทธ๋จ, ํ์ดํ ๋ฐ ์ฌ๊ฐํ์ ๊ดํ ๊ฒ์์ ๋ถ๋ช ํ ์ ์ ์์ต๋๋ค. ์ค์ํ ๊ฒ์ UML์ด Unified Modeling Language ๋ก ๋ณํ๋๋ค๋ ๊ฒ์ ๋๋ค . ์ฌ๊ธฐ์ ํต์ผ์ด๋ผ๋ ๋จ์ด๊ฐ ์ค์ํฉ๋๋ค. ์ฆ, ์ฐ๋ฆฌ ๊ทธ๋ฆผ์ ์ฐ๋ฆฌ๋ฟ๋ง ์๋๋ผ UML์ ์๋ ๋ค๋ฅธ ์ฌ๋๋ค๋ ์ดํดํ ์ ์์ต๋๋ค. ์ด๊ฒ์ ๋ค์ด์ด๊ทธ๋จ์ ๊ทธ๋ฆฌ๋ ๋ฐ ์ฌ์ฉ๋๋ ๊ตญ์ ์ธ์ด์์ด ๋ฐํ์ก์ต๋๋ค.
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 ํด๋์ค๋ก ์ด๋ํฉ๋๋ค . ์ด์ ํด๋์ค ์ด๋ฆ์ ๋ํ ์ปจํ ์คํธ ๋ฉ๋ด๋ฅผ ํตํด โ๋ค์ด์ด๊ทธ๋จโ -> โ๋ค์ด์ด๊ทธ๋จ ํ์ ํ์โ๋ฅผ ์ ํํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ฐ๋ฆฌ๋ ์๋ฆ๋ค์ด ๋ค์ด์ด๊ทธ๋จ์ ์ป์ต๋๋ค.
@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
๊ทธ๋ค์ . ์ด๊ฒ์ ์ ์ ์ด ์๋ ํ์ดํ๋ก ํ์ํด ๋ณด๊ฒ ์ต๋๋ค. ArrayList
ListIterator
class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
์ด ๋ชจ๋ ๊ฒ์ด ๋๋๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋ณด์ผ ๊ฒ์
๋๋ค:
์คํ ๋ฉ์ด์
PlantUML ๋ค์ด์ด๊ทธ๋จ์ ์๋์ผ๋ก ์์ฑํ๋ ๋ฐฉ๋ฒ์๋ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด Idea ์๋ SketchIT ํ๋ฌ๊ทธ์ธ์ด ์์ง๋ง ์ฌ๋ฐ๋ฅด๊ฒ ๊ทธ๋ ค์ง์ง๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ธํฐํ์ด์ค ๊ตฌํ์ด ์๋ชป ๊ทธ๋ ค์ก์ต๋๋ค(์์์ผ๋ก ํ์๋จ). ๋ํ ์ด๋ฅผ ํ๋ก์ ํธ์ ๋น๋ ๋ผ์ดํ์ฌ์ดํด์ ํฌํจ์ํค๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ ๊ฐ ์ธํฐ๋ท์ ์์ต๋๋ค. uml-java-docklet์ ์ฌ์ฉํ๋ Maven ์ ์๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค . ์ด๊ฒ์ด ์ด๋ป๊ฒ ์ํ๋๋์ง ๋ณด์ฌ์ฃผ๊ธฐ ์ํด Maven Archetype์ ์ฌ์ฉํ์ฌ Maven ํ๋ก์ ํธ๋ฅผ ๋น ๋ฅด๊ฒ ์์ฑํ๊ฒ ์ต๋๋ค. ๋ค์ ๋ช ๋ น์ ์คํํด ๋ณด๊ฒ ์ต๋๋ค. ํํฐ๋ฅผ ์ ํํ๋ผ๋ ๋ฉ์์ง๊ฐ ํ์๋๋ฉด( ์ซ์ ์ ํ ๋๋ ํํฐ ์ ์ฉ ) ๊ฐ๋จํ Enter๋ฅผ ๋๋ฌ ๊ธฐ๋ณธ๊ฐ์ ๊ทธ๋๋ก ๋ก๋๋ค. ์ด๋ ํญ์ " maven-archetype-quickstart " ์ ๋๋ค . ์ต์ ๋ฒ์ ์ ์ ํํ์ธ์. ๋ค์์ผ๋ก ์ง๋ฌธ์ ๋ตํ๊ณ ํ๋ก์ ํธ ์์ฑ์ ์๋ฃํฉ๋๋ค.mvn archetype:generate
mvn clean install
mvn javadoc:javadoc
GO TO FULL VERSION