๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“š์ฝ์€ ์ฑ… ์ •๋ฆฌ/๊ฐ์ฒด์ง€ํ–ฅ๋””์ž์ธํŒจํ„ด

[JAVA ๊ฐ์ฒด์ง€ํ–ฅ ๋””์ž์ธ ํŒจํ„ด] 1์žฅ : ๊ฐ์ฒด์ง€ํ–ฅ ๋ชจ๋ธ๋ง

1.1 ๋ชจ๋ธ๋ง

์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์—์„œ ๋ชจ๋ธ์˜ ์—ญํ• 

  • ์„œ๋กœ์˜ ํ•ด์„์„ ๊ณต์œ ํ•ด ํ•ฉ์˜๋ฅผ ์ด๋ฃจ๊ฑฐ๋‚˜ ํ•ด์„์˜ ํƒ€๋‹น์„ฑ์„ ๊ฒ€ํ† 
  • ํ˜„์žฌ์˜ ์‹œ์Šคํ…œ ๋˜๋Š” ์•ž์œผ๋กœ ๊ฐœ๋ฐœํ•  ์‹œ์Šคํ…œ์˜ ์›ํ•˜๋Š” ๋ชจ์Šต์„ ๊ฐ€์‹œํ™”
  • ์‹œ์Šคํ…œ์˜ ๊ตฌ์กฐ์™€ ํ–‰์œ„๋ฅผ ๋ช…์„ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๋Š” ํ‹€์„ ์ œ๊ณต

๋ชจ๋ธ์€ ์ถ”์ƒํ™”์— ๊ธฐ๋ฐ˜์„ ๋‘”๋‹ค.

ํŠน์ • ๊ด€์ ์—์„œ ๊ด€๋ จ์ด ์žˆ๋Š” ์ ์€ ๋ถ€๊ฐ์‹œํ‚ค๊ณ  ๊ด€๋ จ ์—†๋Š” ๋ฉด์€ ๋ฌด์‹œํ•œ๋‹ค.

ex) ๋Œ€ํ•™๊ต ํ•™์‚ฌ ์ง€์› ์—…๋ฌด

-> ํ•™์ƒ์˜ ๋จธ๋ฆฌ์นด๋ฝ ์ˆ˜, ๋จธ๋ฆฌ ์ƒ‰๊น”์€ ํ•™์‚ฌ ์ง€์›๊ณผ ์ „ํ˜€ ๋ฌด๊ด€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ด€์‹ฌ์žˆ๋Š” ์˜์—ญ์—์„œ ์ œ์™ธ (์ถ”์ƒํ™”์—์„œ ์ œ์™ธ)

-> ํ•™์ƒ์˜ "ํ•™๋ฒˆ, ์ด๋ฆ„, ์ˆ˜๊ฐ•๊ณผ๋ชฉ"์€ ํ•™์‚ฌ ์ง€์› ํ•„์ˆ˜์ ์ด๋ฏ€๋กœ ๊ด€์‹ฌ์˜์—ญ์— ํฌํ•จ์‹œํ‚จ๋‹ค.

 

์‚ฌ๋žŒ์˜ ๋ชจ๋“  ์†์„ฑ์„ ๊ฐ€์ ธ๊ฐ€๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๊ด€์‹ฌ์žˆ๋Š” ์˜์—ญ์˜ ํ•„์š”ํ•œ ์†์„ฑ๋งŒ ๊ฐ€์ง€๊ณ  ๊ฐ€๋Š” ๊ฒƒ (์ถ”์ƒํ™”)

1.2 UML

๋ชจ๋ธ๋ง ์–ธ์–ด : ์›ํ•˜๋Š” ์‹œ์Šคํ…œ์„ ๋ชจ๋ธ๋กœ ํ‘œํ˜„ํ•ด์ฃผ๋Š” ์–ธ์–ด ex) UML

  • UML์€ ์š”๊ตฌ๋ถ„์„, ์‹œ์Šคํ…œ ์„ค๊ณ„, ๊ตฌํ˜„ ๋“ฑ์˜ ์‹œ์Šคํ…œ ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ๊ฐœ๋ฐœ์ž ์‚ฌ์ด์˜ ์˜์‚ฌ์†Œํ†ต์ด ์›ํ™œํ•˜๊ฒŒ ์ด๋ฃจ์–ด์ง€๋„๋ก ํ‘œ์ค€ํ™”ํ•˜๋Š” ํ†ตํ•ฉ ๋ชจ๋ธ๋ง ์–ธ์–ด์ด๋‹ค.

UML์€ ์‹œ์Šคํ…œ์˜ "๊ตฌ์กฐ"์™€ "๋™์ž‘"์„ ํ‘œํ˜„ํ•˜๋Š” 13๊ฐœ ๋‹ค์ด์–ด๊ทธ๋žจ์„ ์ œ๊ณตํ•œ๋‹ค.

์ด๋ฅผ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ๊ด€์ ์—์„œ ์‹œ์Šคํ…œ์„ ๋ชจ๋ธ๋ง ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

1.3 ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ

์‹œ๊ฐ„์— ๋”ฐ๋ผ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ์‹œ์Šคํ…œ์˜ "์ •์ "์ธ ๋ฉด์„ ๋ณด์—ฌ์ฃผ๋Š” UML ๊ตฌ์กฐ ๋‹ค์ด์–ด๊ทธ๋žจ

 

ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์€ "์‹œ์Šคํ…œ์„ ๊ตฌ์„ฑํ•˜๋Š” ํด๋ž˜์Šค์™€ ๊ทธ๋“ค ์‚ฌ์ด์˜ ๊ด€๊ณ„๋ฅผ ๋ณด์—ฌ์ค€๋‹ค"

์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ : ํด๋ž˜์Šค ์™€ ๊ด€๊ณ„

 

ํด๋ž˜์Šค

  • ๋™์ผํ•œ ์†์„ฑ๊ณผ ํ–‰์œ„๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฐ์ฒด์˜ ์ง‘ํ•ฉ 

์ฒ ์ˆ˜์™€ ๋ฏธ๋ฏธ๋Š” ๊ฐ์ž์˜ ๋‚˜์ด๋ฅผ ๋ฌผ์–ด๋ณผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์‹ค์ฒด๊ฐ€ ์žˆ๋Š” ๊ฐ์ฒด์ด๋‹ค. ํด๋ž˜์Šค๋Š” ์ด๋Ÿฌํ•œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์„ค๊ณ„๋„์ด๋‹ค.

 

=> ํด๋ž˜์Šค๋Š” ๊ณตํ†ต์˜ `์†์„ฑ`๊ณผ `์ฑ…์ž„`์„ ๊ฐ–๋Š” ๊ฐ์ฒด๋“ค์˜ ์ง‘ํ•ฉ์ด์ž ์‹ค์ œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์„ค๊ณ„๋„์ด๋‹ค.

 

UML๋กœ ํ‘œํ˜„ํ•œ ํด๋ž˜์Šค

https://blog.naver.com/1ilsang/221104669002

๊ฐ€์žฅ ์œ„๋Š” ํด๋ž˜์Šค ์ด๋ฆ„์„ ์ค‘๊ฐ„ ๋ถ€๋ถ„์—๋Š” ํด๋ž˜์Šค์˜ ํŠน์ง•์„ ๋‚˜ํƒ€๋‚ด๋Š” ์†์„ฑ์„ ๋งˆ์ง€๋ง‰ ๋ถ€๋ถ„์—๋Š” ํด๋ž˜์Šค๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฑ…์ž„, ์ฆ‰ ์—ฐ์‚ฐ์„ ๊ธฐ์ˆ ํ•œ๋‹ค.

 

---

+ : public

- : private

# : protected

~ : package

---

๊ธฐํ˜ธ๋กœ ์ ‘๊ทผ ์ œ์–ด์ž๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

 

1.3.2 ๊ด€๊ณ„

ํด๋ž˜์Šค ํ•˜๋‚˜๋กœ๋งŒ ์‹œ์Šคํ…œ์„ ๊ตฌ์„ฑํ•  ์ˆœ ์—†๋‹ค.

 

๊ฐ์ฒด์ง€ํ–ฅ ์‹œ์Šคํ…œ์—์„œ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํด๋ž˜์Šค๊ฐ€ ์„œ๋กœ ๊ด€๊ณ„๋ฅผ ๋งบ์–ด ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์ด๋Ÿฌํ•œ ํด๋ž˜์Šค ๊ฐ„ "๊ด€๊ณ„"๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

https://kyoun.tistory.com/100

๊ด€๊ณ„ ์„ค๋ช…
์—ฐ๊ด€ ๊ด€๊ณ„
(association)
ํด๋ž˜์Šค๋“ค์ด ๊ฐœ๋…์ƒ ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์—ˆ์Œ์„ ๋‚˜ํƒ€๋ƒ„. ์‹ค์„ ์ด๋‚˜ ํ™”์‚ดํ‘œ๋กœ ํ‘œ์‹œํ•˜๋ฉฐ ๋ณดํ†ต ํ•œ ํด๋ž˜์Šค๊ฐ€ ๋‹ค๋ฅธ ํด๋ž˜์Šค์— ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•  ๋•Œ ์‚ฌ์šฉ.
์ผ๋ฐ˜ํ™” ๊ด€๊ณ„
(generalization)
๊ฐ์ฒด ์ง€ํ–ฅ์˜ ์ƒ์† ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋ƒ„. ํ•œ ํด๋ž˜์Šค๊ฐ€ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ํฌํ•จํ•˜๋Š” IS-A๊ด€๊ณ„ ์‹œ ์‚ฌ์šฉ.
์ง‘ํ•ฉ ๊ด€๊ณ„
(composition,
 aggregation)
ํด๋ž˜์Šค๋“ค ์ƒ์˜ ์ „์ฒด ๋˜๋Š” ๋ถ€๋ถ„ ๊ฐ™์€ ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋ƒ„
์˜์กด ๊ด€๊ณ„
(dependency)
์—ฐ๊ด€ ๊ด€๊ณ„์™€ ๊ฐ™์ด ํ•œ ํด๋ž˜์Šค๊ฐ€ ๋‹ค๋ฅธ ํด๋ž˜์Šค์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ๋•Œ๋ฅผ ๋‚˜ํƒ€๋ƒ„.
๋‘˜์˜ ์ฐจ์ด์ ์€ ๋‘ ํด๋ž˜์Šค์˜ ๊ด€๊ณ„๊ฐ€ ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋™์•ˆ๊ณผ ๊ฐ™์€, ๋งค์šฐ ์งง์€ ์‹œ๊ฐ„๋งŒ ์œ ์ง€๋œ๋‹ค๋Š” ์ ์ด๋‹ค.
์‹ค์ฒดํ™” ๊ด€๊ณ„
(realization)
์ฑ…์ž„๋“ค์˜ ์ง‘ํ•ฉ์ธ ์ธํ„ฐํŽ˜์ด์Šค์™€ ์ด ์ฑ…์ž„์„ ๊ตฌํ˜„ํ•œ ๊ตฌํ˜„ ํด๋ž˜์Šค ์‚ฌ์ด์˜ ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

๋‹ค์ค‘์„ฑ ํ‘œ๊ธฐ

https://blog.naver.com/1ilsang/221104669002

์„ ์— ์•„๋ฌด๋Ÿฐ ์ˆซ์ž๊ฐ€ ์—†์œผ๋ฉด ์—ฐ๊ด€๊ด€๊ณ„๊ฐ€ 1๋Œ€1 ๊ด€๊ณ„์ธ ๊ฒƒ์ด๋‹ค.

๊ต์ˆ˜์™€ ํ•™์ƒ์€ ๋ณดํ†ต ํ•œ๋ช…์˜ ๊ต์ˆ˜์— ์—ฌ๋Ÿฌ๋ช…์˜ ํ•™์ƒ์ด ์—ฐ๊ด€๋˜๋ฏ€๋กœ 1๋Œ€๋‹ค ๊ด€๊ณ„์ด๋‹ค. ์ด๋ฅผ ๋‹ค์ค‘์„ฑ ํ‘œ๊ธฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์œ„ ๋‹ค์ด์–ด๊ทธ๋žจ์€ Studentํด๋ž˜์Šค์™€ Course ํด๋ž˜์Šค๊ฐ€ "์ˆ˜๊ฐ•ํ•˜๋‹ค"๋ผ๋Š” ์—ฐ๊ด€๊ด€๊ณ„๋กœ ์ด์–ด์ ธ์žˆ๋‹ค.

 

์—ฌ๊ธฐ์„œ ํ•™์ƒ์€ ๊ณผ๋ชฉ์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๊ณผ๋ชฉ์€ ํ•™์ƒ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. (ํ•™์ƒ์€ ๊ณผ๋ชฉ์„ ์•Œ์ง€๋งŒ ๊ณผ๋ชฉ์€ ํ•™์ƒ์„ ๋ชฐ๋ผ๋„ ๋œ๋‹ค)

--> ๋‹จ๋ฐฉํ–ฅ ์—ฐ๊ด€๊ด€๊ณ„ 

 

ํ•™์ƒ์ด ์ž์‹ ์ด ์ˆ˜๊ฐ•ํ•˜๋Š” ๊ณผ๋ชฉ์„ ์•Œ๊ณ  ๊ณผ๋ชฉ๋„ ์ž์‹ ์„ ์ˆ˜๊ฐ•ํ•˜๋Š” ํ•™์ƒ์„ ์•ˆ๋‹ค๋ฉด -> ์–‘๋ฐฉํ–ฅ ์—ฐ๊ด€๊ด€๊ณ„

 

1..* ์ด๋ฏ€๋กœ ํ•™์ƒ์€ ๋ฐ˜๋“œ์‹œ 1๊ฐœ ์ด์ƒ์˜ ๊ณผ๋ชฉ์„ ์ˆ˜๊ฐ•ํ•ด์•ผ ํ•œ๋‹ค.

 

์œ„ ๊ทธ๋ฆผ์˜ ๋ฌธ์ œ๋Š” ํ•œ ๊ณผ๋ชฉ์ด ํ•˜๋‚˜์˜ ํ•™์ƒ๋งŒ ์ˆ˜๊ฐ•ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค. ์ด๋ฅผ ์ผ๋ฐ˜์ ์ธ ์ˆ˜๊ฐ• ๊ด€๊ณ„๋กœ ๊ฐœ์„ ํ•˜๋ ค๋ฉด ๋‹ค์ค‘์„ฑ์„ ์ˆ˜์ •ํ•ด์•ผ๋งŒ ํ•œ๋‹ค.

[Student]1..*-------------------1..*[Course]

 

-> ์–‘๋ฐฉํ–ฅ ์—ฐ๊ด€๊ด€๊ณ„

๋‹ค ๋Œ€ ๋‹ค ์—ฐ๊ด€ ๊ด€๊ณ„๋Š” ์ž์—ฐ์Šค๋ ˆ ์–‘๋ฐฉํ–ฅ ์—ฐ๊ด€๊ด€๊ณ„๊ฐ€ ๋œ๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด "์—ฐ๊ด€ ํด๋ž˜์Šค"๋ฅผ ์•Œ์•„์•ผ ํ•œ๋‹ค.

 

๋‘ ๊ฐœ์˜ ๊ฐ์ฒด๊ฐ€ ์„œ๋กœ ์—ฐ๊ด€๋˜์–ด ๋‚˜ํƒ€๋‚˜์•ผ ํ•˜๋Š” ์ •๋ณด๊ฐ€ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์„ฑ์  ์ •๋ณด์ด๋‹ค.

์ด๋Š” "ํ•™์ƒ"์ด๋‚˜ "๊ณผ๋ชฉ"์—๋งŒ ์†ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ์„œ ๋‘˜ ์ค‘ ์–ด๋””์—๋„ ๋‘˜ ์ˆ˜ ์—†๋‹ค. (๋‘ ํด๋ž˜์Šค ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•ด์•ผ๋งŒ ์˜๋ฏธ ์žˆ๋Š” ์ •๋ณด์ž„)

 

์ฆ‰, ์„ฑ์  ์ •๋ณด๋Š” ํด๋ž˜์Šค์˜ ์†์„ฑ์ด ์•„๋‹Œ '์ˆ˜๊ฐ•ํ•˜๋‹ค'๋ผ๋Š” ์—ฐ๊ด€๊ด€๊ณ„์˜ ์†์„ฑ์œผ๋กœ ๋‹ค๋ค„์ ธ์•ผํ•œ๋‹ค!!

 

์—ฐ๊ด€ ๊ด€๊ณ„๊ฐ€ ์žˆ๋Š” ๋‘ ํด๋ž˜์Šค ์‚ฌ์ด์— ์œ„์น˜ํ•œ๋‹ค.

 

์—ฐ๊ด€ ํด๋ž˜์Šค

์—ฐ๊ด€ ํด๋ž˜์Šค๋Š” ์—ฐ๊ด€ ๊ด€๊ณ„์— ์ถ”๊ฐ€ํ•  ์†์„ฑ์ด๋‚˜ ํ–‰์œ„๊ฐ€ ์žˆ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

 

์šฐ๋ฆฌ๋Š” ์„ฑ์  ํด๋ž˜์Šค์— ์ถ”๊ฐ€์ ์œผ๋กœ ํ•„์š”ํ•œ "๊ณผ๋ชฉ ๊ฐœ์„ค๋…„๋„, ์„ฑ์  ์ •๋ณด"๋ฅผ ํฌํ•จ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

 

์ด๋•Œ ํ•™์ƒ์€ ์—ฌ๋Ÿฌ ๊ณผ๋ชฉ์— ๋Œ€ํ•œ ์„ฑ์ ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ณ  ๊ณผ๋ชฉ ๋˜ํ•œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์„ฑ์ ์„ ๋งŒ๋“ค์–ด ๋‚ด์•ผ ํ•˜๋ฏ€๋กœ

์ผ ๋Œ€ ๋‹ค (์„ฑ์ ) ๋‹ค ๋Œ€ ์ผ ๊ด€๊ณ„๊ฐ€ ์„ฑ๋ฆฝ๋œ๋‹ค.

 

์—ฐ๊ด€ ํด๋ž˜์Šค -> ์ผ๋ฐ˜ ํด๋ž˜์Šค๋กœ ๋ณ€ํ™˜

 

์ผ๋ฐ˜ํ™” ๊ด€๊ณ„

์ผ๋ฐ˜ํ™” ๊ด€๊ณ„๋Š” ์ƒ์†๊ณผ ๊ฐ™๋‹ค. ์ด ๊ด€๊ณ„๋Š” 'is a kind of' ๊ด€๊ณ„๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

https://blog.naver.com/1ilsang/221104669002

 

๊ฐ€์ „ ์ œํ’ˆ์€ ์„ธํƒ๊ธฐ, TV, ์‹๊ธฐ์„ธ์ฒ™๊ธฐ์˜ "๊ณตํ†ต์†์„ฑ, ์—ฐ์‚ฐ"์„ ์ œ๊ณตํ•˜๋Š” ํ‹€์ด๋‹ค.

 

์ถ”์ƒ ๋ฉ”์„œ๋“œ๋Š” ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์—์„œ ๊ธฐ์šธ์ž„์ฒด๋กœ ํ‘œํ˜„ํ•œ๋‹ค.

 

์ง‘ํ•ฉ ๊ด€๊ณ„

์ง‘ํ•ฉ ๊ด€๊ณ„๋Š” UML ์—ฐ๊ด€ ๊ด€๊ณ„์˜ ํŠน๋ณ„ ๊ฒฝ์šฐ๋กœ ์ „์ฒด์™€ ๋ถ€๋ถ„์˜ ๊ด€๊ณ„๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ช…์‹œํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

"์ง‘์•ฝ(aggreagation)๊ณผ ํ•ฉ์„ฑ(composition)์˜ ๋‘ ์ข…๋ฅ˜๊ฐ€ ์กด์žฌํ•œ๋‹ค"

 

์ง‘์•ฝ ๊ด€๊ณ„๋Š” ํ•œ ๊ฐ์ฒด๊ฐ€ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒƒ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ -> ๋นˆ ๋งˆ๋ฆ„๋ชจ๋กœ ํ‘œ์‹œ
๋ถ€๋ถ„์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ์ฒด๋ฅผ ๋‹ค๋ฅธ ๊ฐ์ฒด์™€ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์— ์ง‘์•ฝ ๊ด€๊ณ„๋กœ ๋‚˜ํƒ€๋ƒ„. (๋ถ€๋ถ„ ๊ฐ์ฒด๋ฅผ ๊ฐ์ฒด ์ƒ์„ฑ ์‹œ ์ฃผ์ž…ํ•  ๋•Œ)

// ์ง‘์•ฝ ๊ด€๊ณ„ ์ฝ”๋“œ
public class Computer{
  private MainBoard mb;
  private CPU c;
  private Memory m;

  public Computer(MainBoard mb, CPU c, Memory m){
    this.mb = mb;
    this.c = c;
    this.m = m;
  }
}


ํ•ฉ์„ฑ ๊ด€๊ณ„๋Š” ๋ถ€๋ถ„ ๊ฐ์ฒด๊ฐ€ ์ „์ฒด ๊ฐ์ฒด์— ์†ํ• ๋•Œ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์œผ๋กœ -> ์ฑ„์›Œ์ง„ ๋งˆ๋ฆ„๋ชจ
์ „์ฒด ๊ฐ์ฒด๊ฐ€ ์‚ฌ๋ผ์ง€๋ฉด ๋ถ€๋ถ„ ๊ฐ์ฒด๋„ ์‚ฌ๋ผ์ง€๋Š” ๊ฒƒ์„ ๋œปํ•จ. (๋ถ€๋ถ„ ๊ฐ์ฒด๋ฅผ ๊ฐ์ฒด ์•ˆ์—์„œ ์ƒ์„ฑํ•  ๋•Œ)

//ํ•ฉ์„ฑ ๊ด€๊ณ„ ์ฝ”๋“œ
public class Computer{
  private MainBoard mb;
  private CPU c;
  private Memory m;

  public Computer(){
    this.mb = new MainBoard();
    this.c = new CPU();
    this.m = new Memory();
  }
}

 

์ง‘์•ฝ ๊ด€๊ณ„์™€ ํ•ฉ์„ฑ ๊ด€๊ณ„๋ฅผ ๊ตฌ๋ถ„ํ•˜๋ ค๋ฉด ์ „์ฒด ๊ฐ์ฒด์™€ ๋ถ€๋ถ„ ๊ฐ์ฒด์˜ ๋ผ์ดํ”„ํƒ€์ž„ ์˜์กด์„ฑ์„ ์‚ดํŽด๋ด์•ผํ•œ๋‹ค.

 

์˜์กด ๊ด€๊ณ„

ํ•œ ํด๋ž˜์Šค๊ฐ€ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

  • ํด๋ž˜์Šค์˜ ์†์„ฑ์—์„œ ์ฐธ์กฐํ•  ๋•Œ
  • ์—ฐ์‚ฐ์˜ ์ธ์ž๋กœ ์‚ฌ์šฉ๋  ๋•Œ
  • ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์˜ ์ง€์—ญ ๊ฐ์ฒด๋กœ ์ฐธ์กฐ๋  ๋•Œ

์•ž์—์„œ ์˜์กด ๊ด€๊ณ„์— ๋Œ€ํ•ด "์งง์€ ์‹œ๊ฐ„ ๋งบ์–ด์ง€๋Š” ๊ด€๊ณ„"๋ผ๊ณ  ์ •์˜ํ•˜์˜€๋‹ค.

 

์œ„ ๊ทธ๋ฆผ์—์„œ ์‚ฌ๋žŒ๊ณผ ์ž๋™์ฐจ๋Š” ์˜ค๋žœ ๊ธฐ๊ฐ„ ํ˜‘๋ ฅ ๊ด€๊ณ„๋ฅผ ํ†ตํ•ด ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ 'owns'๋ผ๋Š” ์—ฐ๊ด€ ๊ด€๊ณ„๊ฐ€ ์„ฑ๋ฆฝํ•˜๊ฒŒ ๋œ๋‹ค.

public class Car{
  ...
  public void fillGas(GasPump p){
    p.getGas(amount);
  }
}

ํ•˜์ง€๋งŒ, GasPump(์ฃผ์œ ๊ธฐ)๋Š” ์ž๋™์ฐจ๊ฐ€ ํŠน์ • ์ฃผ์œ ์†Œ๋งŒ ๊ฐ€๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ ์ฃผ์œ ์†Œ๋ฅผ ์ด์šฉํ•˜๋ฏ€๋กœ ๋งค๋ฒˆ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ ๊ฐ์ฒด์ง€ํ–ฅ์—์„œ๋Š” ์ด๋Ÿฌํ•œ "์ฃผ์œ ๊ธฐ"๋ฅผ ์ธ์ž ๋˜๋Š” ์ง€์—ญ ๊ฐ์ฒด๋กœ ์ƒ์„ฑํ•ด ๊ตฌํ˜„ํ•œ๋‹ค.

์ธํ„ฐํŽ˜์ด์Šค์™€ ์‹ค์ฒดํ™” ๊ด€๊ณ„

์ธํ„ฐํŽ˜์ด์Šค๋ž€ "์ฑ…์ž„"์ด๋‹ค.

-> ์–ด๋–ค ๊ฐ์ฒด์˜ "์ฑ…์ž„"์ด๋ž€ [๊ฐ์ฒด๊ฐ€ ํ•ด์•ผํ•˜๋Š” ์ผ]๋กœ์„œ ํ•ด์„ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์–ด๋–ค ๊ฒฝ์šฐ์—” [๊ฐ์ฒด๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ]๋กœ๋„ ํ•ด์„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ฆ‰, ๊ฐ์ฒด๊ฐ€ ์™ธ๋ถ€์— ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค๋‚˜ ๊ธฐ๋Šฅ์€ ๊ฐ์ฒด๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฑ…์ž„์ด๋‹ค.

 

๋ณผ๋ฅจ์„ ๋„๊ฑฐ๋‚˜ ๋†’์ด๊ฑฐ๋‚˜ ์ค„์ด๊ฑฐ๋‚˜ ๊ฐ™์€ ์ฑ…์ž„์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ(๊ธฐ๋Šฅ)์€ TV ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ•ธ๋“œํฐ, ์ปดํ“จํ„ฐ ๋“ฑ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

๊ณตํ†ต๋œ ์ฑ…์ž„์„ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ธํ„ฐํŽ˜์ด์Šค๋Š” ์‹ค์ œ ์ฑ…์ž„์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๊ณ  ์‹ค์ œ ์ˆ˜ํ–‰ ๊ฐ์ฒด๋Š” ๋”ฐ๋กœ ์กด์žฌํ•œ๋‹ค.

 

UML์—์„œ๋Š” ์ด ๊ด€๊ณ„ ํ‘œํ˜„์„ '์ ์„ '์œผ๋กœ ํ‘œํ˜„ํ•œ๋‹ค.

https://blog.naver.com/1ilsang/221104669002

 

์ผ๋ฐ˜ํ™” ๊ด€๊ณ„๋Š” 'is a kind of' ๊ด€๊ณ„' ์ง€๋งŒ ์‹ค์ฒดํ™” ๊ด€๊ณ„๋Š” 'can do this ๊ด€๊ณ„'์ด๋‹ค.