์ƒ์†์€ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ณด๋ฉด ๋ณ„ ๋ฌธ์ œ ์—†์–ด๋ณด์ด๋‚˜, ์‹ค๋ฌด์ ์œผ๋กœ ๋ณด์•˜์„ ๋•Œ ์ƒ๋‹นํžˆ ๊นŒ๋‹ค๋กœ์šด ๊ฐœ๋…์ด๋‹ค.

์ƒ์†

  • ๊ฑฐ์˜ ๋ชจ๋“  ์‚ฌ๋žŒ์ด OOP์˜ ํ•ต์‹ฌ์ด๋ผ ์—ฌ๊น€
    • ์ดˆ์ฐฝ๊ธฐ OO
    • ์žฌ์‚ฌ์šฉ์„ฑ์ด ๊ถ๊ทน์˜ ๋ชฉ์ ์ด๋ผ ์‹ ๋ด‰ํ–ˆ์—ˆ์Œ
    • ํ˜„์žฌ์—๋„ ์ƒ์† ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฉด OO ์–ธ์–ด๋ผ๊ณ  ๋ณด์ง€ ์•Š์Œ
  • ๋‹คํ˜•์„ฑ์˜ ๊ธฐ๋ฐ˜
  • ํ•œ๊ตญ ๋‹จ์–ด โ€œ์ƒ์†โ€๋ณด๋‹ค โ€œ๊ณ„์Šนโ€, โ€œ์ง„ํ™”โ€, โ€œ์œ ์ „โ€์˜ ์˜๋ฏธ๊ฐ€ ๊ฐ•ํ•˜๋‹ค.

is-a, has-a

  • is-a: ์ƒ์†๊ด€๊ณ„
    • ์ž์‹ํด๋ž˜์Šค is (still) a ๋ถ€๋ชจํด๋ž˜์Šค
    • Teacher is (still) a Person
  • has-a: ์ปดํฌ์ง€์…˜
    • WaterSpray has a SprayHead

์ƒ์† vs. ์ปดํฌ์ง€์…˜

  • ๋‘˜ ๋‹ค ์žฌ์‚ฌ์šฉ์„ ์œ„ํ•œ ๋ฐฉ๋ฒ•
  • ์ƒ์†์œผ๋กœ ๊ฐ€๋Šฅํ•œ ๊ฒƒ ์ปดํฌ์ง€์…˜์œผ๋กœ๋„ ๊ฐ€๋Šฅ
    • ๊ธฐ์ˆ ์ ์ธ ๊ด€์ ์—์„œ ์ฑ„ํƒ
    • ๋ฐ˜๋Œ€๋„ ๊ฐ€๋Šฅ
  • ์„ ํ˜ธ๋Š” ๊ณ„์† ์™”๋‹ค๊ฐ”๋‹คํ–ˆ์Œ
    • ์ดˆ์ฐฝ๊ธฐ๋Š” ์ƒ์† ์„ ํ˜ธ
    • ํ˜„์žฌ๋Š” ์ปดํฌ์ง€์…˜์ด ๋‹ต์ด๋‹ค๋ผ๋Š” ์ž˜๋ชป๋œ ์กฐ์–ธ์„ ๋”ฐ๋ฅด๋Š” ์ค‘
  • OO์—์„œ ํฐ ๊ฒฐ์ •์‚ฌํ•ญ: ์ƒ์† vs ์ปดํฌ์ง€์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ณ ๋ฅด๋Š” ๊ฒƒ.

GuideLine

  • ์‹ค์ƒํ™œ์—์„œ ๊ฐœ์ฑ„๋“ค๋ผ๋ฆฌ์˜ ๊ด€๊ณ„๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์„ ํƒํ•  ๊ฒƒ
    • is-a: ์ƒ์†
    • has-a: ์ปดํฌ์ง€์…˜
  • ํ•˜์ง€๋งŒ ๊ฒฐ๊ตญ์—๋Š” ํ•„์š”์— ๋”ฐ๋ผ ์ด ๊ทœ์น™์„ ์–ด๊ฒจ์•ผ ํ•  ๊ฒƒ์ž„

์‚ฌ๋žŒ์—๊ฒŒ ์ƒ์†์ด ์–ด๋ ค์šด ์ด์œ 

  • ์ปดํฌ์ง€์…˜์€ ๊ทธ๋‚˜๋งˆ ์‰ฌ์› ๋‹ค. ์ด๋ฏธ ์žˆ๋Š” ๊ฐœ์ฒด๋ฅผ ์กฐ๋ฆฝํ•˜๋Š” ๊ฒƒ์ด๋‹ˆ
  • ์ƒ์†์€ ์‹ค์„ธ๊ณ„์—์„œ ์ฐพ๊ธฐ ์–ด๋ ต๋‹ค.
  • ์ธ๊ฐ„์€ ์‹ค์„ธ๊ณ„์—์„œ ์ง๊ฐ„์ ‘์ ์œผ๋กœ ๊ฒฝํ—˜ํ•œ ๊ฒƒ์„ ์‰ฝ๊ฒŒ ์ดํ•ดํ•œ๋‹ค.
  • ํ•˜์ง€๋งŒ ์ƒ์†์€ ์œ ์ „ + ์ง„ํ™”๋‹ค.
  • ์˜ค๋žœ์‹œ๊ฐ„ ๊ฑธ์ณ์„œ ์ง„ํ–‰๋˜๋Š” ๊ณผ์ •์ด๋‹ค.
  • ์ด๋Ÿฐ ๋ณ€ํ™”๋ฅผ ์ผ๋ฐ˜ํ™”์‹œํ‚ค๋ ค๋ฉด ๋งค์šฐ ๋งŽ์€ ์‚ฌ๋ก€๊ฐ€ ํ•„์š”ํ•œ๋ฐ, ์ด๋ฅผ ๋ชจ๋‘ ์ธ์ง€ํ•˜๊ธฐ์—” ์ธ๊ฐ„์˜ ์ˆ˜๋ช…์ด ๋„ˆ๋ฌด ์งง๋‹ค.
  • ๋”ฐ๋ผ์„œ ๊ฒฝํ—˜์— ๊ธฐ์ดˆํ•ด์„œ ์ƒ์†์„ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

์ƒ์†์„ ์ดํ•ดํ•˜๋Š” ๋ฐฉ๋ฒ•

  1. ์ผ๋ฐ˜ํ™”/ํŠน์ •ํ™” ๊ด€์ 
  2. ๊ธฐ๋Šฅ์˜ ๊ด€์ 

์ผ๋ฐ˜ํ™”/ํŠน์ •ํ™”

  • ์•„๋ž˜๋กœ ๊ฐˆ ์ˆ˜๋ก ํŠน์ •ํ•œ ๊ฐœ์ฒด๋ฅผ ์˜๋ฏธํ•จ
  • ์œ„๋กœ ๊ฐˆ์ˆ˜๋ก ์ผ๋ฐ˜ํ™”๋œ ์ง‘ํ•ฉ์„ ๋งํ•จ

๊ธฐ๋Šฅ

  • ๊ณตํ†ต ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ๊ทธ๋กœ๋ถ€ํ„ฐ ์ƒ์†๋ฐ›์€ ์ƒํƒœ์™€ ๊ธฐ๋Šฅ์„ ์žฌํ™œ์šฉ
  • ์ฆ‰ ์žฌํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ด€์ 

์‹œ๊ณ„ ํด๋ž˜์Šค

  • ์‹œ, ๋ถ„, ์ดˆ๋ฅผ ์ƒ์„ฑ์ž๋กœ ๋ฐ›์ž.
  • ๊ทธ๋Ÿฐ๋ฐ ๋ฐ์ดํ„ฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์–ด๋–ป๊ฒŒํ•˜์ง€?
  • Exception? ์ด๊ฑด ๋‹น์žฅ ์ข‹์ง€ ์•Š๋‹ค.
  • ์‹ค์„ธ๊ณ„์˜ ์‹œ๊ณ„์—์„œ ๋‹ต์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.(์•„๋‚ ๋กœ๊ทธ)
  • ํƒœ์—ฝ์„ ๋Œ๋ฆฐ๋‹ค๋Š” ๊ฒƒ์—์„œ๋Š” ๊ฐ’์ด ์ปค์ ธ๋„ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์—†๋‹ค.
  • ์ฆ‰, circular์˜ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์—, 12๋ฅผ ๋„˜๋Š” ์ˆœ๊ฐ„ ๋‚˜๋จธ์ง€์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์œผ๋กœ ํŒ๋‹จ๋œ๋‹ค.
  • ์—ฌ๊ธฐ์„œ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋Š” ์ ์€, ์ผ์ƒ์˜ ์—”์ง€๋‹ˆ์–ด๋ง ๋ฐฉ์‹์„ ๋ชจ์‚ฌํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ์— ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ
  • ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์€ ์‚ฌ๋žŒ๋งˆ๋‹ค ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ƒ๋žต
    • clamp(h:m:s:): 12๋ฅผ ๋„˜์œผ๋ฉด 12, 0๋ณด๋‹ค ์ž‘์œผ๋ฉด 0
    • wrap(h:m:s): circular๋กœ ๋งŒ๋“ค๊ธฐ

์ƒ์†์„ ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ํ”ํ•œ ์‚ฌ๊ณ  ๋ฐฉ์‹

  • ๋ถ€๋ชจ๋ฅผ ๋งŒ๋“ค๊ณ  ์ž์‹์„ ๋งŒ๋“ ๋‹ค: X
  • ์š”์†Œ๋ฅผ ๋งŒ๋“ค๋‹ค๊ฐ€ ๋ถ€๋ชจ๋กœ ์ผ๋ฐ˜ํ™” ํ•œ๋‹ค: O
  • ์‚ฌ๋žŒ์€ ๊ตฌ์ฒด์ ์ธ ์‚ฌ๋ก€๋“ค์„ ๋” ์ž˜ ์ดํ•ดํ•˜๊ธฐ ๋•Œ๋ฌธ
  • ๋‹ค๋งŒ, ์ด๋ฏธ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋ถ„๋ฅ˜๋ฅผ ์ž˜ํ•ด๋†จ์„ ๋•Œ๋Š” ๊ทธ๋Œ€๋กœ ๋”ฐ๋ฅด๋ฉด ๋จ

๋‹ค์ค‘ ์ƒ์†

  • ๋””์ง€ํ„ธ, ์•„๋‚ ๋กœ๊ทธ ์‹œ๊ณ„๋ฅผ ๋งŒ๋“  ์ƒํƒœ์—์„œ ์ƒ๊ฐํ•ด๋ณด์ž.
  • ์†๋ชฉ์‹œ๊ณ„๋ฅผ ์ƒˆ๋กญ๊ฒŒ ๋งŒ๋“ค์–ด์•ผ ๋œ๋‹ค๋ฉด wear() method๋Š” ์–ด๋””์— ์ถ”๊ฐ€๋˜์–ด์•ผ ํ• ๊นŒ?
  • ์†๋ชฉ์‹œ๊ณ„๋Š” ๋””์ง€ํ„ธ๋„ ์žˆ๊ณ  ์•„๋‚ ๋กœ๊ทธ๋„ ์žˆ๋‹ค.
  • ๊ทธ๋ ‡๋‹ค๊ณ  ๋ถ€๋ชจ ํด๋ž˜์Šค์ธ Clock์— ๋„ฃ์ž๋‹ˆ ๋ชจ๋“  ์‹œ๊ณ„๊ฐ€ wear() ๋™์ž‘์„ ํ•˜์ง€๋Š” ์•Š๊ณ ..
  • ์•„ ๋ฒฝ์‹œ๊ณ„ํ•˜๊ณ  ์†๋ชฉ์‹œ๊ณ„ํ•˜๊ณ  ๋ถ„๋ฆฌ๋ฅผ ํ•ด๋ณด์ž.
    • Clock โ† WallClock โ† AnalogClock, DigitalClock
    • Clock โ† WristWatch โ† AnalogWristWatch, DigitalWristWatch
  • ์†๋ชฉ ์‹œ๊ณ„๋„ ๋””์ง€ํ„ธ, ์•„๋‚ ๋กœ๊ทธ๊ฐ€ ์žˆ๋‹ค๋ณด๋‹ˆ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ์ค‘๋ณต๋˜๋„ค..?
  • ์ƒ์†๊ด€๊ณ„๋ฅผ ๋ฐ”๊ฟ”๋ณด์ž.
    • Clock โ† AnalogClock โ† AnalogWallClock, AnalogWristWatch
    • Clock โ† DigitalClock โ† DigitalWristWatch, DigitalWristWatch
  • ์–ด.. ๊ทธ๋ž˜๋„ ์ค‘๋ณต์ด ์ƒ๊ธฐ๋„ค
  • ์ตœ์„ ์ด ๋ญ์ง€..?

  • source: pocu academy

๋ฌธ์ œ์ 

  • Clock์„ ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋‘๋ฒˆ ์ƒ์†๋ฐ›๊ณ  ์žˆ๋‹ค.
  • ์ž˜๋ชป ์‚ฌ์šฉํ•˜๋ฉด ๋งค์šฐ ๋ณต์žกํ•ด์ง„๋‹ค.
  • Java๋Š” ๋‹ค์ค‘ ์ƒ์† ์ง€์› X, C++ ์ง€์›
  • ์ฃฝ์Œ์˜ ๋‹ค์ด์•„๋ชฌ๋“œ(the Deadly Diamond of Death; DDD)์˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
    • ๊ฐ™์€ method๋ฅผ ๊ฐ€์ง„ A, B ๋‘๊ฐœ์˜ ํด๋ž˜์Šค๋ฅผ ๋‹ค์ค‘์ƒ์†๋ฐ›๋Š” C ํด๋ž˜์Šค๊ฐ€ ์–ด๋–ค method๋ฅผ ํ˜ธ์ถœํ•ด์•ผํ• ์ง€ ์• ๋งคํ•จ์„ ๊ฐ€์ง„๋‹ค๋Š” ๋ฌธ์ œ

๋‹ค์ค‘ ์ƒ์†์ด ์ƒ๊ธฐ๋Š” ์ด์œ 

  • ์ „ํ˜€ ๋‹ค๋ฅธ ์–‘์ƒ(Aspect)์˜ ํŠน์ง•์„ ์ƒ์†๋ฐ›์œผ๋ ค ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•œ๋‹ค.
  • ์ตœ์ƒ์œ„ ๋ถ€๋ชจ(Clock): ์‹œ๊ฐ„์„ ๊ธฐ๋กํ•˜๋Š” ๊ธฐ๋Šฅ
  • Analog vs Digital: ์–ด๋–ป๊ฒŒ ํ‘œํ˜„ํ•˜๋Š”๊ฐ€?
  • Wall vs Wrist: ์–ด๋””์— ์žฅ์ฐฉํ•˜๋Š”๊ฐ€?
  • โ€œํ‘œํ˜„โ€๊ณผ โ€œ์žฅ์ฐฉโ€์€ ์™„์ „ํžˆ ๋‹ค๋ฅธ ๊ฐœ๋…์ด๋‹ค.

Java์—์„œ์˜ ํ•ด๊ฒฐ๋ฒ•

  1. wear()์™€ mount()๋ฅผ ์ถ”์ƒํ™”ํ•˜์ž.
    • ์–ด๋””์— ๋ถ™์ด๋Š” ๊ฑฐ์ž–์•„?
    • attach()๋กœ ํ‰์น˜์ž.
    • ์‹œ๊ณ„๋ฅผ ์ฐจ๋‹ค โ†’ ์‹œ๊ณ„๋ฅผ ๋ถ™์ด๋‹ค
    • ์‹œ๊ณ„๋ฅผ ๋ฒฝ์— ๊ฑธ๋‹ค โ†’ ์‹œ๊ณ„๋ฅผ ๋ฒฝ์— ๋ถ™์ด๋‹ค.
    • ๋‹จ, ๋„ˆ๋ฌด ์‹ฌํ•œ ์ถ”์ƒํ™”๋Š” ์˜๋ฏธ๋ฅผ ํ•ด์น  ์ˆ˜ ์žˆ์Œ
  2. Interface: ์ด๊ฒŒ ๋ณด๋‹ค ๋‚˜์€ ๋ฐฉ๋ฒ•

๊นŠ์€ ์ƒ์†์˜ ์–ด๋ ค์›€๊ณผ ์ƒ๋ฌผ ๋ถ„๋ฅ˜

  • ์—ฌ๊ธฐ์„œ ๊ฐ‘์ž๊ธฐ ์• ํ”Œ์›Œ์น˜ ๊ฐ™์€ ๊ฒƒ์ด ๋“ค์–ด๊ฐ„๋‹ค๋ฉด..?
  • ํ† ๋‚˜์˜จ๋‹ค.
  • ์ด๋Ÿฐ ๊ฒƒ์„ โ€œ๊นŠ์€ ์ƒ์†โ€์ด๋ผ ํ•œ๋‹ค.
  • ๊นŠ์€ ์ƒ์†์€ ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์— 1~2๋‹จ๊ณ„๋งŒ ์ƒ์†ํ•˜๋Š” ๊ฒƒ์ด ๋ณดํ†ต์ด๋‹ค.
  • ๊นŠ์–ด์งˆ์ˆ˜๋ก ์ถ”์ƒํ™” ๋Šฅ๋ ฅ์ด ๋” ํ•„์š”ํ•˜๋‹ค. n๋‹จ๊ณ„ ์ผ๋ฐ˜ํ™”๊ฐ€ ํ•„์š”.
  • ํ•˜์ง€๋งŒ.. ์ถ”์ƒํ™”๋Š” ์ธ๊ฐ„์—๊ฒŒ ์–ด๋ ค์šด ๋ฐฉ์‹. ์‹ค์ˆ˜ํ•  ๊ฐ€๋Šฅ์„ฑ๋„ ์ฆ๊ฐ€

Reference