JavaRush /Java Blog /Random-KO /๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(๊ธฐ์‚ฌ ๋ฒˆ์—ญ)
Exidnus
๋ ˆ๋ฒจ 38
ะกะฐะฝะบั‚-ะŸะตั‚ะตั€ะฑัƒั€ะณ

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(๊ธฐ์‚ฌ ๋ฒˆ์—ญ)

Random-KO ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค
๋ฒˆ์—ญ์ž: ๋ถˆํ–‰ํ•˜๊ฒŒ๋„ ์ €๋Š” ์˜์–ด๋กœ ๊ฝค ๋งŽ์ด ์ฝ์—ˆ์ง€๋งŒ ์˜์–ด๋กœ ๋ฒˆ์—ญํ•œ ๊ฒฝํ—˜์ด ๋ณ„๋กœ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ฝ๋Š” ๊ฒƒ๊ณผ ๋ฒˆ์—ญํ•˜๋Š” ๊ฒƒ์€ ์„œ๋กœ ๋‹ค๋ฅธ ์ผ์ด๋ผ๋Š” ๊ฒƒ์ด ๋ฐํ˜€์กŒ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ถˆํ–‰ํ•˜๊ฒŒ๋„ ๋‚˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฒฝํ—˜์ด ๋งŽ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (๋‚˜๋Š” ์ตœ๊ทผ์— Spring MVC์™€ Hibernate์—์„œ ๊ฐ„๋‹จํ•œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.) ๋”ฐ๋ผ์„œ ๋ฒˆ์—ญ์€ ๊ฐ€๋Šฅํ•œ ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋” ๋‚˜๋นด์Šต๋‹ˆ๋‹ค. ๊ธฐ์‚ฌ์— ์ œ๊ณต๋œ ์ฝ”๋“œ ์˜ˆ์ œ๋Š” Java์˜ ๋ช…๋ช… ๊ทœ์น™์„ ์ค€์ˆ˜ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ž์œ ๋กญ๊ฒŒ ์•ฝ๊ฐ„ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์ผ๋ถ€ ํŒจํ„ด์˜ ์ด๋ฆ„์„ ๋ฒˆ์—ญํ•  ๊ฐ€์น˜๊ฐ€ ์—†์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ(์ด๋Ÿฌํ•œ ๋ฒˆ์—ญ์€ ๋งŽ์€ ์ดํ•ด๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์Œ) ์ด๊ฒƒ์ด ๋œ ์•…ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. '๋†’์€ ์‘์ง‘๋ ฅ'์„ ๋ฒˆ์—ญํ•œ '๋†’์€ ์‘์ง‘๋ ฅ'์— ๋Œ€ํ•ด์„œ๋Š” ๋ณ„๋„๋กœ ์–ธ๊ธ‰ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์ตœ๊ณ ์˜ ๋ฒˆ์—ญ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ "๊ฐ•ํ•œ ์—ฐ๊ฒฐ์„ฑ"์€ "๋†’์€ ๊ฒฐํ•ฉ"(๋˜ ๋‹ค๋ฅธ ์ค‘์š”ํ•œ ๊ฐœ๋…)์ด๋ฉฐ ์—ฌ๊ธฐ์„œ "์ผ๊ด€์„ฑ"์€ ์ ํ•ฉํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋น„ํŒ์— ๊ฐœ๋ฐฉ์ ์ด๋ฉฐ ์–ด๋–ค ํ˜•ํƒœ๋กœ๋“  ๊ธฐ์‚ฌ์— ๋Œ€ํ•œ ์˜๊ฒฌ์„ ๊ฐ์‚ฌํžˆ ๋ฐ›์•„๋“ค์ž…๋‹ˆ๋‹ค. ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ํ”„๋กœ๊ทธ๋žจ์ด ์‹ค์ œ ๊ฐ์ฒด์— ํ•ด๋‹นํ•˜๋Š” ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๊ตฌ์„ฑ๋˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์Šคํƒ€์ผ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ์‹ค์ œ ๊ฐ์ฒด์—๋Š” ๋ช‡ ๊ฐ€์ง€ ์†์„ฑ(์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ๋˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ)๊ณผ ๋™์ž‘(๋ณ€๊ฒฝ๋  ์ˆ˜๋„ ์žˆ๊ณ  ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Œ)์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ).์กฐ๊ฑด). ์˜ˆ๋ฅผ ๋“ค์–ด, ์—ฐํ•„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์†์„ฑ์„ ๊ฐ€์ง„ ์‹ค์ œ ๊ฐœ์ฒด์ž…๋‹ˆ๋‹ค.
  • ๋นจ๊ฐ„์ƒ‰์ž…๋‹ˆ๋‹ค(์‹œ๊ฐ„์ด ์ง€๋‚˜๋„ ๋ณ€ํ•˜์ง€ ์•Š์Œ).
  • ์ด์ œ ๊ธธ์ด๋Š” 10์„ผํ‹ฐ๋ฏธํ„ฐ์ž…๋‹ˆ๋‹ค(์—ฐํ•„์„ ๊นŽ์œผ๋ฉด ๊ธธ์ด๊ฐ€ ๋ฐ”๋€” ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค).
๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋™์ž‘์„ ํ•ฉ๋‹ˆ๋‹ค:
  • ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ํ”์ ์ด ๋‚จ์Šต๋‹ˆ๋‹ค.
  • ์••๋ ฅ์— ๋”ฐ๋ผ(์™ธ๋ถ€ ์š”์ธ์— ๋”ฐ๋ผ) ํ”์ ์ด ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋‚ ์นด๋กญ๊ฒŒ ํ•˜๋ฉด ๊ธธ์ด๊ฐ€ ์งง์•„์ง‘๋‹ˆ๋‹ค(์˜๊ตฌ์  ๊ฑฐ๋™).
์ด ์˜ˆ์—์„œ์™€ ๊ฐ™์ด ์‹ค์ œ ๊ฐ์ฒด๋Š” ๋งŽ์€ ์†์„ฑ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•  ๋•Œ๋Š” ํ•„์š”ํ•œ ์†์„ฑ๋งŒ ๊ณ ๋ คํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์˜ˆ์ƒ๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์‹ค์ œ ๊ฐœ์ฒด์™€ ํ”„๋กœ๊ทธ๋žจ ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ๋” ์‰ฝ๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์„ฑ์žฅํ•˜๊ณ  ๋งŽ์€ ๊ฐœ์ฒด๊ฐ€ ์„œ๋กœ ์ƒํ˜ธ ์ž‘์šฉํ•  ๋•Œ ์ •๋ง ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ฐ๊ด€์ ์ธ ์„ธ๊ณ„ ๋‚ด์—์„œ ์ฑ…์ž„์„ ๋ถ„์‚ฐํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋ฏ€๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ†ตํ•ด ์‚ฌ๊ณ ํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. OOP (๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ) ์™€ ๊ด€๋ จ๋œ ๋˜ ๋‹ค๋ฅธ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ์€ ๊ฐ์ฒด ๋ถ„๋ฅ˜์ž…๋‹ˆ๋‹ค. ์„ธ์ƒ(ํ˜„์‹ค/๊ฐ€์ƒ)์€ ์‚ฌ๋ฌผ๋กœ ๊ฐ€๋“ ์ฐจ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ณ„์ ์œผ๋กœ ์ œ์–ดํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๊ฒ€์€์ƒ‰ ์—ฐํ•„๊ณผ ๊ฐ™์ด ๋‹ค์–‘ํ•œ ๊ฐœ์ฒด์™€ ํ•ด๋‹น ์†์„ฑ์„ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ์ด๋Ÿฌํ•œ ๊ฐœ์ฒด๋ฅผ ๋ถ„๋ฅ˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด์ „ ์˜ˆ์ œ์—์„œ ์‚ฌ์šฉํ–ˆ๋‹ค๋ฉด ๊ตฌ๋ณ„์ด ๋ถˆ๊ฐ€๋Šฅ(๋™์ผ?)ํ•˜๊ฒ ์ง€๋งŒ, ๋‹ค๋ฅธ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‘˜ ๋‹ค ์—ฐํ•„์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ™์€ ํด๋ž˜์Šค์ธ "์—ฐํ•„"์— ์†ํ•ฉ๋‹ˆ๋‹ค. ์—ฐํ•„๊ณผ ๋งค์šฐ ์œ ์‚ฌํ•œ ํŽœ์€ ๋‹ค๋ฅธ ํด๋ž˜์Šค์— ์†ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํŽœ๊ณผ ์—ฐํ•„์€ ๋ชจ๋‘ 'ํ•„๊ธฐ ๋„๊ตฌ'์ž…๋‹ˆ๋‹ค. ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์›์น™์ด ์žˆ์Šต๋‹ˆ๋‹ค.
์ถ”์ถœ
์ถ”์ƒํ™”๋Š” ์‚ฌ๊ฑด๋ณด๋‹ค๋Š” ์•„์ด๋””์–ด์™€์˜ ์ƒํ˜ธ์ž‘์šฉ ํ’ˆ์งˆ , ์ฆ‰ ํ‘œํ˜„์  ํ’ˆ์งˆ๋กœ๋ถ€ํ„ฐ์˜ ์ž์œ  ๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค . ์ด๋ฅผ ํ†ตํ•ด ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ์–ด๋–ป๊ฒŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ• ์ง€ ๋ณด๋‹ค๋Š” ๋ฌด์—‡ ์„ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ• ์ง€ ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค . ์ถ”์ƒํ™”๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๊ณ„์•ฝ์œผ๋กœ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฐœ๋…์„ ์‚ฌ์šฉํ•  ๋•Œ ๊ตฌํ˜„ ์„ธ๋ถ€ ์‚ฌํ•ญ์ด ์ˆจ๊ฒจ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์“ฐ๊ธฐ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ํด๋ž˜์Šค๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ํ•ด๋‹น ํด๋ž˜์Šค์— "write" ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ฌด์—‡์„ ํ–ˆ๋‚˜์š”? ์šฐ๋ฆฌ๋Š” ์ถ”์ƒ์ ์ธ ์ƒ์œ„ ์ˆ˜์ค€ ํด๋ž˜์Šค๋ฅผ ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ด ๋ฌด์—‡์ธ์ง€ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ด ํด๋ž˜์Šค์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋งŽ์€ ์ด์ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. abstract class writer { write (); }
  • ์šฐ๋ฆฌ๋Š” ์™ธ๋ถ€ ์ฃผ์ฒด์—๊ฒŒ ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ ์ •๋ณด๋ฅผ ๊ณต๊ฐœํ•จ์œผ๋กœ์จ ํ”„๋กœ๊ทธ๋žจ์„ ํ†ตํ•ด ์‚ฌ๊ณ ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๊ณ (์ด๋กœ ์ธํ•ด ์ง‘์ค‘์ ์ธ ์‚ฌ๊ณ ๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง) ํ˜ผ๋ž€์„ ํ”ผํ•˜๊ณ  ์˜๋„ํ•˜์ง€ ์•Š์€ ์•ฝ์†์„ ํ•˜๋Š” ๊ฒƒ์„ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ตฌํ˜„ ์„ธ๋ถ€ ์‚ฌํ•ญ์ด ๊ณต๊ฐœ๋˜๋ฉด ๋ถˆ๊ฐ€๋Šฅํ•  ํ–ฅํ›„ ๊ฐœ์„ ์˜ ์—ฌ์ง€๋ฅผ ๋‚จ๊ฒจ๋‘ก๋‹ˆ๋‹ค.
๊ณ„์Šน
์ผ๋ฐ˜์ ์ธ ์˜์–ด๋กœ "์ƒ์†"์€ "ํš๋“ํ•˜๊ณ  ์ „๋‹ฌํ•˜๋‹ค"๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด ๋‹จ์–ด๋Š” ์šฐ๋ฆฌ ๋ฌธํ™”์— ์•„์ฃผ ์˜ค๋žซ๋™์•ˆ ์กด์žฌํ•ด ์™”์Šต๋‹ˆ๋‹ค. ์กฐ์ƒ๋“ค์€ ์—ด์‹ฌํžˆ ์ผํ•˜์—ฌ ๋•…์„ ์–ป์–ด ์ž์‹๋“ค์—๊ฒŒ ๋ฌผ๋ ค์ฃผ์—ˆ๊ณ , ์ž์—ฐ๋„ ์ƒ์†์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ํ‚ค, ํ”ผ๋ถ€/๋ˆˆ/๋จธ๋ฆฌ ์ƒ‰๊น” ๋“ฑ๊ณผ ๊ฐ™์€ ๋ชจ๋“  ์‹ ์ฒด ์†์„ฑ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ถ€๋ชจ๋กœ๋ถ€ํ„ฐ ๋ฌผ๋ ค๋ฐ›์€ ์œ ์ „์ž์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค. ์ƒ์†์€ ๋ฐ”ํ€ด๋ฅผ ์žฌ๋ฐœ๋ช…ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ์ง„ํ–‰ ์†๋„๋ฅผ ๋†’์ž…๋‹ˆ๋‹ค. OOP์—์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ๊ธฐ๋ณธ ์†์„ฑ/๋™์ž‘์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์œ„ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ด ์ƒ์œ„ ํด๋ž˜์Šค์—์„œ ์ƒ์†๋˜๋Š” ๋ชจ๋“  ํด๋ž˜์Šค๋Š” ํ•ด๋‹น ์ƒ์œ„ ํด๋ž˜์Šค์™€ ๋™์ผํ•œ ์†์„ฑ/๋™์ž‘์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ƒ์†๋œ ํด๋ž˜์Šค๋Š” ๋” ๋งŽ์€ ์†์„ฑ/๋™์ž‘์„ ์–ป๊ฑฐ๋‚˜ ๋™์ž‘ ๊ตฌํ˜„์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. class WritingInstrument { colour; write() { } } class Pen (child of parent) { inkcolour; } ์œ„์˜ ์˜ˆ์—์„œ ์ƒ์œ„ ํด๋ž˜์Šค(WritingInstrument)์—๋Š” "color" ์†์„ฑ๊ณผ "write" ๋™์ž‘์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์œ„ ํด๋ž˜์Šค(ํ•ธ๋“ค)๊ฐ€ ์„ ์–ธ๋˜๋ฉด "color" ์†์„ฑ๊ณผ "write" ๋™์ž‘์„ ๋‹ค์‹œ ์„ ์–ธํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ƒ์†์œผ๋กœ ์ธํ•ด "handle" ํด๋ž˜์Šค์— ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ•˜์œ„ ํด๋ž˜์Šค๋Š” ์ž์ฒด ์ถ”๊ฐ€ ์†์„ฑ/๋™์ž‘์„ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์šฐ๋ฆฌ ๊ฐœ๋ฐœ์ž๋“ค์€ ๋งค์šฐ ๊ฒŒ์œผ๋ฆ…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ฌด์–ธ๊ฐ€๋ฅผ ๊ณ„์†ํ•ด์„œ ์ธ์‡„ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๊ณ ๋ ค ์‚ฌํ•ญ์œผ๋กœ ์ธํ•ด ๋™์ผํ•œ ์ฝ”๋“œ์˜ ๋ณต์‚ฌ๋ณธ์ด ์—ฌ๋Ÿฌ ๊ฐœ ์กด์žฌํ•˜๋Š” ๊ฒƒ์€ ๊ถŒ์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ฝ”๋“œ ๋ณต์‚ฌ๋ณธ์ด ์ ์„์ˆ˜๋ก ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ๋” ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค.
  • ์ฝ”๋“œ ์‚ฌ๋ณธ์ด ๋งŽ์ง€ ์•Š์œผ๋ฉด ํ•œ ๊ณณ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋ชจ๋“  ๊ณณ์—์„œ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  • ์ฝ”๋“œ๊ฐ€ ์ ์„์ˆ˜๋ก ์˜ค๋ฅ˜๋„ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.
  • ํ•˜๋‚˜์˜ ์ฝ”๋“œ๊ฐ€ ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ์‚ฌ์šฉ๋˜๋ฉด ์ผ๋ฐ˜ํ™”๊ฐ€ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.
  • ์šฐ๋ฆฌ๋Š” ์ฝ”๋“œ ์ž‘์„ฑ์— ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค.
  • ์šฐ๋ฆฌ๋Š” ํ…Œ์ŠคํŠธ์— ์ง‘์ค‘ํ•ฉ๋‹ˆ๋‹ค.
Java์˜ ์ƒ์†์€ "ํ™•์žฅ" ๋ฐ "๊ตฌํ˜„"์ด๋ผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. class WritingInstrument { } class Pen extends WritingInstrument { }
๋‹คํ˜•์„ฑ
"๋‹คํ˜•์„ฑ"์ด๋ผ๋Š” ๋‹จ์–ด๋Š” "ํด๋ฆฌ" ๋ผ๋Š” ๋‘ ๋‹จ์–ด์—์„œ ์œ ๋ž˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค . "๋‹ค์ˆ˜" / "ํ•˜๋‚˜ ์ด์ƒ" "๋ชจํ”„" , ์ฆ‰ "ํ˜•ํƒœ" ๋ฌธ์ž ๊ทธ๋Œ€๋กœ "๋‹คํ˜•์„ฑ"์ด๋ผ๋Š” ๋‹จ์–ด๋Š” ์กฐ๊ฑด์— ๋”ฐ๋ผ ๊ฐœ์ฒด๊ฐ€ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ๋Šฅ๋ ฅ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๋‹คํ˜•์„ฑ์€ ์—ฌ๋Ÿฌ ์œ„์น˜์—์„œ ๊ตฌํ˜„๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํด๋ž˜์Šค
  • ํ–‰๋™ ์–‘์‹
  • ์šด์˜์ž
์œ„์˜ ๋ชจ๋“  ๋‚ด์šฉ์€ ์กฐ๊ฑด, ์ฆ‰ ์‚ฌ์šฉ๋˜๋Š” ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํด๋ผ์ด์–ธํŠธ(๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ)๊ฐ€ ๋งŽ์€ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ์•Œ ํ•„์š”๊ฐ€ ์—†๊ณ  ์ปจํ…์ŠคํŠธ์—์„œ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์„ ํƒํ•˜์—ฌ ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ๊ตฌํ˜„๋˜๊ธฐ ๋•Œ๋ฌธ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. Class WritingObject { wrire() { // ะฟะธัˆะตะผ, ะธัะฟะพะปัŒะทัƒั ัั‚ะฐะฝะดะฐั€ั‚ะฝั‹ะต (ะฟะพ ะดะตั„ะพะปั‚ัƒ) ั†ะฒะตั‚ะฐ } } class Pencil extends WritingObject { write() { // ะฟะธัˆะตะผ, ะธัะฟะพะปัŒะทัƒั ัะตั€ั‹ะน ั†ะฒะตั‚, ะฝะฐะฟะธัะฐะฝะฝั‹ะน ั‚ะตะบัั‚ ะผะพะถะฝะพ ัั‚ะตั€ะตั‚ัŒ } } class Pen extends WritingObject { write() { // ะฟะธัˆะตะผ, ะธัะฟะพะปัŒะทัƒั ะณะพะปัƒะฑะพะน ั†ะฒะตั‚, ะฝะฐะฟะธัะฐะฝะฝั‹ะน ั‚ะตะบัั‚ ะฝะตะปัŒะทั ัั‚ะตั€ะตั‚ัŒ } } class Main { main() { WritingObject wr = new WritingObject(); wr.write(); // ะฟะตั€ะฒั‹ะน ะฒั‹ะทะพะฒ WritingObject wr = new Pen(); wr.write(); // ะฒั‚ะพั€ะพะน ะฒั‹ะทะพะฒ WritingObject wr2 = new Pencil(); wr2.write(); // ั‚ั€ะตั‚ะธะน ะฒั‹ะทะพะฒ } } ์œ„์˜ ์˜ˆ์—๋Š” ํ•˜์œ„ ํด๋ž˜์Šค์ธ pen ๋ฐ pen์— ์˜ํ•ด ํ™•์žฅ/์žฌ์ •์˜๋˜๋Š” WritingObject์˜ ๊ธฐ๋ณธ ๊ตฌํ˜„์ด ์žˆ์Šต๋‹ˆ๋‹ค. write() ๋ฉ”์„œ๋“œ๋Š” Main ํด๋ž˜์Šค์—์„œ ์„ธ ๋ฒˆ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ๊ฐ์ฒด์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๊ตฌํ˜„์ด ํ˜ธ์ถœ๋  ๋•Œ๋งˆ๋‹ค. ์ด ๊ฒฝ์šฐ write() ๋ฉ”์„œ๋“œ๋Š” ๋‹คํ˜•์„ฑ์ด๋ฏ€๋กœ ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ๋™์ž‘์„ ๊ฐ–์Šต๋‹ˆ๋‹ค.
์บก์Šํ™”
์บก์Šํ™”๋Š” ๊ด€๋ จ ๋ฐ์ดํ„ฐ/๊ธฐ๋Šฅ์„ ํ•˜๋‚˜์˜ ๋‹จ์œ„๋กœ ์ˆ˜์ง‘ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค/์ˆ˜์ •์„ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํŠน์ • ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ชจ๋“  ์†์„ฑ์„ ์ธ์‡„ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. printUserProperties(userName, userId, firstname, lastname, email, phone, โ€ฆ โ€ฆ โ€ฆ.) ๋ชจ๋“  ์†์„ฑ์„ ๊ฐ€์ ธ์™€ ์ฐจ๋ก€๋กœ ์ธ์‡„ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๋ชฉ๋ก์˜ ์š”์†Œ ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•˜๋ฉด ๋” ์ด์ƒ ์˜ฌ๋ฐ”๋ฅธ ํ•„๋“œ๋ฅผ ์‹๋ณ„ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ํ•˜๋‚˜์˜ ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€/์ œ๊ฑฐํ•˜๋ฉด ๋ฉ”์„œ๋“œ ์‹œ๊ทธ๋‹ˆ์ฒ˜๊ฐ€ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ตœ๊ทผ ์ถ”๊ฐ€๋œ ํ•„๋“œ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š๋”๋ผ๋„ ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ์‚ฌ์šฉ์ž๋ฅผ ๊ต์ฒดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ๋” ์ฝ๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค๊ณ  ํ–ฅํ›„ ์ˆ˜์ •์„ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์†์„ฑ์„ ํด๋ž˜์Šค์— ์บก์Šํ™”ํ•˜๊ณ  ์ด๋ฅผ ์ง‘ํ•ฉ ๊ฐœ์ฒด๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. class User { userName userId firstname lastname email phone .. .. .. } printUserProperties(user) {} ๊ฐœ์ฒด๋Š” ๋ณ€์ˆ˜ ๋ฐ ๊ด€๋ จ ๋ฉ”์„œ๋“œ์˜ ์†Œํ”„ํŠธ์›จ์–ด ๋ฒˆ๋“ค์ž…๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ ๊ฐœ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์ œ ๊ฐœ์ฒด๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์• ๋‹ˆ๋ฉ”์ด์…˜ ํ”„๋กœ๊ทธ๋žจ์— ๋‚˜์˜ค๋Š” ์‹ค์ œ ๊ฐœ๋ฅผ ์ƒ์ƒํ•˜๊ฑฐ๋‚˜ ์šด๋™์šฉ ์ž์ „๊ฑฐ ๋‚ด๋ถ€์˜ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ์ฒด๋กœ ์‹ค์ œ ์ž์ „๊ฑฐ๋ฅผ ์ƒ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. OOP์—์„œ ํด๋ž˜์Šค๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ฐ์ฒด์— ์ดˆ๊ธฐ ์ƒํƒœ(๋ณ€์ˆ˜)๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ ๋™์ž‘(ํ•จ์ˆ˜, ๋ฉ”์„œ๋“œ)์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ํ…œํ”Œ๋ฆฟ(ํ”„๋กœ๊ทธ๋žจ-์ฝ”๋“œ-ํ…œํ”Œ๋ฆฟ)์ž…๋‹ˆ๋‹ค. SOLID๋ผ๋Š” ์•ฝ์–ด๋Š” 2000๋…„๋Œ€ ์ดˆ Robert C. Martin์ด ๋ช…๋ช…ํ•œ "์ฒ˜์Œ 5๊ฐ€์ง€ ์›์น™"์„ ์˜๋ฏธํ•˜๋Š” Michael Feather๊ฐ€ ๋งŒ๋“  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์›์น™์˜ ๋ชฉํ‘œ๋Š” ํ•จ๊ป˜ ๊ตฌํ˜„๋  ๋•Œ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์œ ์ง€ ๊ด€๋ฆฌ ๋ฐ ํ™•์žฅ์ด ์‰ฌ์šด ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค ๊ฐ€๋Šฅ์„ฑ์„ ๋†’์ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. SOLID ์›์น™์€ ๋ฆฌํŒฉํ† ๋ง์„ ํ†ตํ•ด "์ฉ์€" ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ํ”„๋กœ๊ทธ๋žจ ๊ฐœ๋ฐœ ์ง€์นจ์ด๋ฉฐ, ๊ทธ ๊ฒฐ๊ณผ ์ฝ”๋“œ๋Š” ์‰ฝ๊ฒŒ ์ฝ์„ ์ˆ˜ ์žˆ๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฏผ์ฒฉํ•˜๊ณ  ์ ์‘ ๊ฐ€๋Šฅํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ „๋žต์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค.
๋‹จ์ผ ์ฑ…์ž„ ์›์น™
OOP์—์„œ ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์€ ๊ฐ ํด๋ž˜์Šค๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์˜ ํ•œ ๋ถ€๋ถ„์„ ๋‹ด๋‹นํ•ด์•ผ ํ•˜๋ฉฐ ํ•ด๋‹น ์ฑ…์ž„์€ ํ•ด๋‹น ํด๋ž˜์Šค์— ์˜ํ•ด ์™„์ „ํžˆ ์บก์Šํ™”๋˜์–ด์•ผ ํ•จ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ธฐ๋Šฅ์€ ์ด ์ฑ…์ž„๊ณผ ๋ฐ€์ ‘ํ•˜๊ฒŒ ๊ด€๋ จ๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๊ฐœ๋ฐฉํ˜•/ํ์‡„ํ˜• ์›์น™
OOP์—์„œ ๊ฐœ๋ฐฉ/ํ์‡„ ์›์น™์€ "์†Œํ”„ํŠธ์›จ์–ด ์—”ํ„ฐํ‹ฐ(ํด๋ž˜์Šค, ๋ชจ๋“ˆ, ๋ฉ”์„œ๋“œ ๋“ฑ)๋Š” ํ™•์žฅ์—๋Š” ๊ฐœ๋ฐฉ๋˜์–ด์•ผ ํ•˜์ง€๋งŒ ๋ณ€๊ฒฝ์—๋Š” ํ์‡„๋˜์–ด์•ผ ํ•œ๋‹ค"๊ณ  ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์—”ํ„ฐํ‹ฐ๋Š” ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ ๋„ ํ•ด๋‹น ๋™์ž‘์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
Liskov ๋Œ€์ฒด ์›์น™
๋Œ€์ฒด์„ฑ์€ OOP์˜ ์›์น™์ž…๋‹ˆ๋‹ค. ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋žจ์˜ S๊ฐ€ T์˜ ํ•˜์œ„ ์œ ํ˜•์ธ ๊ฒฝ์šฐ T ์œ ํ˜•์˜ ๊ฐœ์ฒด๋Š” ๋ณ€๊ฒฝ ์—†์ด S ์œ ํ˜•์˜ ๊ฐœ์ฒด๋กœ ๋Œ€์ฒด๋  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์ฆ‰, S ์œ ํ˜•์˜ ๊ฐœ์ฒด๋Š” T ์œ ํ˜•์˜ ๊ฐœ์ฒด๋กœ ๋Œ€์ฒด๋  ์ˆ˜ ์žˆ์Œ). ํ•„์ˆ˜ ์†์„ฑ ํ”„๋กœ๊ทธ๋žจ(์ •ํ™•์„ฑ, ์ž‘์—… ์™„๋ฃŒ ๋“ฑ).
์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™
์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ์˜ ์›์น™์€ ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•์— ์˜์กดํ•˜๋„๋ก ๊ฐ•์š”ํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์›์น™์— ๋”ฐ๋ฅด๋ฉด, ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ž์‹ ์—๊ฒŒ ํฅ๋ฏธ๋กœ์šด ๋ฐฉ๋ฒ•๋งŒ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ๋Œ€๊ทœ๋ชจ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋” ์ž‘๊ณ  ๋” ๊ตฌ์ฒด์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™์˜ ๋ชฉ์ ์€ ์‹œ์Šคํ…œ์„ ๋ถ„๋ฆฌ๋œ ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜์—ฌ ๋ฆฌํŒฉํ„ฐ๋ง, ๋ณ€๊ฒฝ ๋ฐ ์žฌ๋ฐฐํฌ๋ฅผ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ข…์†์„ฑ ๋ฐ˜์ „ ์›๋ฆฌ
OOP์—์„œ ์ข…์†์„ฑ ์—ญ์ „์˜ ์›์น™์€ ํ”„๋กœ๊ทธ๋žจ ๋ชจ๋“ˆ ๊ฐ„์˜ ํŠน์ • ํ˜•ํƒœ์˜ ์—ฐ๊ฒฐ ๋Š๊น€์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด ์›์น™์— ๋”ฐ๋ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์ƒ์œ„ ๋ชจ๋“ˆ(์ •์ฑ… ์„ค์ •)์—์„œ ์ข…์† ํ•˜์œ„ ๋ชจ๋“ˆ๋กœ ์„ค์ •๋œ ํ‘œ์ค€ ์ข…์† ๊ด€๊ณ„๊ฐ€ ๋ฐ˜์ „(์—ญ์ „)๋˜์–ด ์ˆ˜์ •๋œ ์ƒ์œ„ ๋ชจ๋“ˆ์ด ๊ตฌํ˜„ ์„ธ๋ถ€ ์‚ฌํ•ญ๊ณผ ๋…๋ฆฝ๋ฉ๋‹ˆ๋‹ค. ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ. ์ด ์›์น™์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค.
  • ๋†’์€ ์ˆ˜์ค€์˜ ๋ชจ๋“ˆ์€ ๋‚ฎ์€ ์ˆ˜์ค€์˜ ๋ชจ๋“ˆ์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ๋‘ ๊ฐ€์ง€ ์œ ํ˜•์˜ ๋ชจ๋“ˆ ๋ชจ๋‘ ์ถ”์ƒํ™”์— ์˜์กดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ถ”์ƒํ™”๋Š” ๊ตฌํ˜„ ์„ธ๋ถ€ ์‚ฌํ•ญ์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์„ธ๋ถ€ ์‚ฌํ•ญ์€ ์ถ”์ƒํ™”์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ด ์›์น™์€ ๋†’์€ ์ˆ˜์ค€๊ณผ ๋‚ฎ์€ ์ˆ˜์ค€์˜ ๊ฐœ์ฒด๊ฐ€ ๋™์ผํ•œ ์ถ”์ƒํ™”์— ์˜์กดํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ฃผ์žฅํ•จ์œผ๋กœ์จ ์‚ฌ๋žŒ๋“ค์ด ๊ฐœ์ฒด ์ง€ํ–ฅ ๋””์ž์ธ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์„ ๋’ค์ง‘์Šต๋‹ˆ๋‹ค.

GRASP ์›์น™

GRASP(์ผ๋ฐ˜ ์ฑ…์ž„ ํ• ๋‹น ์†Œํ”„ํŠธ์›จ์–ด ํŒจํ„ด)๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ๋””์ž์ธ์—์„œ ํด๋ž˜์Šค์™€ ๊ฐœ์ฒด์— ์ฑ…์ž„์„ ํ• ๋‹นํ•˜๊ธฐ ์œ„ํ•œ ์ง€์นจ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
์ œ์–ด ์žฅ์น˜
์ปจํŠธ๋กค๋Ÿฌ ํŒจํ„ด์€ ์ „์ฒด ์‹œ์Šคํ…œ ๋˜๋Š” ์‚ฌ์šฉ ์‚ฌ๋ก€ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋น„ GUI ํด๋ž˜์Šค์— ์‹œ์Šคํ…œ ์ด๋ฒคํŠธ์™€์˜ ์ƒํ˜ธ ์ž‘์šฉ ์ฑ…์ž„์„ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. ์ œ์–ด ์žฅ์น˜:
  • ์ด๋Š” ์‚ฌ์šฉ์ž์™€ ์ง์ ‘ ์ƒํ˜ธ์ž‘์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ ์‹œ์Šคํ…œ ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•˜๊ณ  ์‘๋‹ตํ•˜๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•˜๋Š” ๊ฐœ์ฒด์ž…๋‹ˆ๋‹ค.
  • ํ•˜๋‚˜(๋˜๋Š” ์—ฌ๋Ÿฌ ์ƒํ˜ธ ๊ด€๋ จ๋œ) ์‚ฌ์šฉ ์‚ฌ๋ก€์˜ ๋ชจ๋“  ์‹œ์Šคํ…œ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์‹œ์Šคํ…œ ์ž‘๋™์„ ์ œ์–ดํ•˜๋Š” โ€‹โ€‹GUI ๋’ค์˜ ์ฒซ ๋ฒˆ์งธ ๊ฐœ์ฒด์ž…๋‹ˆ๋‹ค.
  • ๊ทธ๋Š” ์Šค์Šค๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ ๊ทธ์˜ ์ž„๋ฌด๋Š” ์ด๋ฒคํŠธ์˜ ํ๋ฆ„์„ ์ œ์–ดํ•˜๋Š” โ€‹โ€‹๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ฐฝ์กฐ์ž
์ž‘์„ฑ์ž ํด๋ž˜์Šค์˜ ์ž„๋ฌด๋Š” ํ›„์† ์‚ฌ์šฉ์„ ์œ„ํ•ด ๊ฐœ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ  ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ดˆ๊ธฐํ™” ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์ƒ์„ฑ๋  ๊ฐ์ฒด๋ฅผ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋•Œ๋•Œ๋กœ ์ƒ์„ฑ์ž ํด๋ž˜์Šค๋Š” ๊ฐ์ฒด๋ฅผ ์ ๊ทน์ ์œผ๋กœ ์ƒ์„ฑํ•˜์—ฌ ์บ์‹œ์— ์ €์žฅํ•˜๊ณ  ํ•„์š”ํ•  ๋•Œ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
๋†’์€ ์‘์ง‘๋ ฅ
๋†’์€ ์‘์ง‘๋ ฅ์€ ํ•˜๋‚˜์˜ ๋ช…ํ™•ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๊ณ  ์‰ฝ๊ฒŒ ์ œ์–ดํ•˜๊ณ  ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ๋กœ ๊ฐœ์ฒด๋ฅผ ๋ณด์กดํ•˜๋Š” ๊ฒƒ์ด ๋ชฉ์ ์ธ ํ‰๊ฐ€ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. High Coupling์€ ์ผ๋ฐ˜์ ์œผ๋กœ Low Coupling์„ ์ง€์›ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋†’์€ ์ผ๊ด€์„ฑ์ด๋ž€ ํŠน์ • ์š”์†Œ์˜ ์ฑ…์ž„์ด ๋ช…ํ™•ํ•˜๊ฒŒ ์ •์˜๋˜์–ด ์žˆ์Œ(๊ฐ•ํ•˜๊ฒŒ ๊ด€๋ จ๋˜์–ด ์žˆ๊ณ  ๊ณ ๋„๋กœ ์ง‘์ค‘๋˜์–ด ์žˆ์Œ)์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์„ ํด๋ž˜์Šค์™€ ํ•˜์œ„ ์‹œ์Šคํ…œ์œผ๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์€ ์‹œ์Šคํ…œ ์†์„ฑ์˜ ์‘์ง‘๋ ฅ์„ ๋†’์ด๋Š” ์ž‘์—…์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด์— ๋Š์Šจํ•œ ๊ฒฐํ•ฉ์€ ์š”์†Œ์— ๊ด€๋ จ๋˜์ง€ ์•Š์€ ์ž‘์—…์ด ๋„ˆ๋ฌด ๋งŽ์€ ์ƒํ™ฉ์ž…๋‹ˆ๋‹ค. ๋Š์Šจํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋œ ์š”์†Œ๋Š” ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต๊ณ  ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ ์œ ์ง€ ๊ด€๋ฆฌ ๋ฐ ๋ณ€๊ฒฝ์ด ์–ด๋ ค์šด ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
์šฐํšŒ
Roundabout ํŒจํ„ด์€ ๋‘ ์š”์†Œ ๊ฐ„์˜ ์ƒํ˜ธ ์ž‘์šฉ์— ๋Œ€ํ•œ ์ฑ…์ž„์„ ์ค‘๊ฐ„ ๊ฐœ์ฒด์— ํ• ๋‹นํ•˜์—ฌ ๋‘ ์š”์†Œ ๊ฐ„์˜ ๋Š์Šจํ•œ ๊ฒฐํ•ฉ(๋ฐ ์žฌ์‚ฌ์šฉ์„ฑ)์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. MVC(Model-View-Controller) ํŒจํ„ด์—์„œ ๋ฐ์ดํ„ฐ(๋ชจ๋ธ)์™€ ํ•ด๋‹น ๋””์Šคํ”Œ๋ ˆ์ด(๋ทฐ) ์‚ฌ์ด๋ฅผ ์ค‘์žฌํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์ด ๊ทธ ์˜ˆ์ž…๋‹ˆ๋‹ค.
์ •๋ณด์ „๋ฌธ๊ฐ€
์ •๋ณด ์ „๋ฌธ๊ฐ€(์ „๋ฌธ๊ฐ€ ๋˜๋Š” ์ „๋ฌธ๊ฐ€ ์›์น™์ด๋ผ๊ณ ๋„ ํ•จ)๋Š” ๋ˆ„๊ตฌ์—๊ฒŒ ์ฑ…์ž„์„ ์œ„์ž„ํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์›์น™์ž…๋‹ˆ๋‹ค. ์ฑ…์ž„์—๋Š” ๋ฉ”์„œ๋“œ, ๊ณ„์‚ฐ ํ•„๋“œ ๋“ฑ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์ฑ…์ž„์„ ํ• ๋‹นํ•  ๋•Œ ์ด ์›์น™์„ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์š” ์ ‘๊ทผ ๋ฐฉ์‹์€ ์ฑ…์ž„ ๋ถ„์„, ์ฑ…์ž„ ์ดํ–‰์— ํ•„์š”ํ•œ ์ •๋ณด ์‹๋ณ„, ์ตœ์ข…์ ์œผ๋กœ ์ด ์ •๋ณด์˜ ์œ„์น˜ ์„ค์ • ๋“ฑ ์ผ๋ จ์˜ ์ž‘์—…์ž…๋‹ˆ๋‹ค. ์ •๋ณด ์ „๋ฌธ๊ฐ€ ์›์น™์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋ฅผ ์‹คํ–‰ํ•  ์ •๋ณด๊ฐ€ ๊ฐ€์žฅ ๋งŽ์€ ํด๋ž˜์Šค์— ์ฑ…์ž„์ด ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.
๋‚ฎ์€ ๊ฒฐํ•ฉ
๋Š์Šจํ•œ ๊ฒฐํ•ฉ์€ ์ฑ…์ž„ ํ• ๋‹น ๋ฐฉ๋ฒ•์„ ์ง€์ •ํ•˜๋Š” ํ‰๊ฐ€ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ํด๋ž˜์Šค ๊ฐ„์˜ ๋Š์Šจํ•œ ๊ฒฐํ•ฉ, ํ•˜๋‚˜๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ๋‹ค๋ฅธ ํด๋ž˜์Šค์— ์ตœ์†Œํ•œ์˜ ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ณ  ์žฌ์‚ฌ์šฉ์„ฑ์„ ์ตœ๋Œ€ํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋‹คํ˜•์„ฑ
๋‹คํ˜•์„ฑ์— ๋”ฐ๋ฅด๋ฉด ์œ ํ˜•์— ๋”ฐ๋ฅธ ๋™์ž‘์˜ ๋ณ€ํ™”๋Š” ์ด๋Ÿฌํ•œ ๋ณ€ํ™”๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์œ ํ˜•์— ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋‹คํ˜•์„ฑ ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.
๋ณดํ˜ธ๋œ ๋ณ€ํ˜•
๋ณดํ˜ธ๋œ ๋ณ€๊ฒฝ ํŒจํ„ด์€ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ถˆ์•ˆ์ •์„ฑ์— ์ดˆ์ ์„ ๋งž์ถ”๊ณ  ๋‹คํ˜•์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋‹ค์–‘ํ•œ ๊ตฌํ˜„์„ ์ƒ์„ฑํ•จ์œผ๋กœ์จ ๋‹ค๋ฅธ ์š”์†Œ(๊ฐ์ฒด, ์‹œ์Šคํ…œ, ํ•˜์œ„ ์‹œ์Šคํ…œ)๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋„๋ก ์š”์†Œ๋ฅผ ๋ณดํ˜ธํ•ฉ๋‹ˆ๋‹ค.
์ˆœ์ˆ˜ ์ œ์ž‘
์ˆœ์ˆ˜ ๊ตฌ์„ฑ์—๋Š” ๋ฌธ์ œ ์˜์—ญ์˜ ๊ฐœ๋…์„ ๋‚˜ํƒ€๋‚ด์ง€ ์•Š๋Š” ํด๋ž˜์Šค๊ฐ€ ํฌํ•จ๋˜๋ฉฐ, ํŠนํžˆ ๋Š์Šจํ•œ ๊ฒฐํ•ฉ, ๋†’์€ ์‘์ง‘๋ ฅ ๋ฐ ์ตœ๋Œ€ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ์„ฑ์„ ๋‹ฌ์„ฑํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค(์ •๋ณด ์ „๋ฌธ๊ฐ€ ํŒจํ„ด์—์„œ ์ œ๊ณตํ•˜๋Š” ์†”๋ฃจ์…˜์€ ์ด๋ฅผ ๋‹ฌ์„ฑํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค). ์ด๋Ÿฌํ•œ ํด๋ž˜์Šค๋ฅผ ์ผ๋ฐ˜์ ์œผ๋กœ ๋„๋ฉ”์ธ ์ค‘์‹ฌ ์„ค๊ณ„์—์„œ๋Š” "์„œ๋น„์Šค"๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๋น„ํŒ

Potok ๋“ฑ์˜ ์—ฐ๊ตฌ์—์„œ๋Š” OOP์™€ ์ ˆ์ฐจ์  ์ ‘๊ทผ ๋ฐฉ์‹ ์‚ฌ์ด์— ํฐ ์ฐจ์ด๊ฐ€ ์—†์Œ์„ ๋ณด์—ฌ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.
OOP๋ฅผ ๋‹ค๋ฅธ ๊ธฐ์ˆ , ํŠนํžˆ ๊ด€๊ณ„ํ˜• ๊ธฐ์ˆ ๊ณผ ๋น„ํŒ์ ์œผ๋กœ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์€ ์—„๊ฒฉํ•˜๊ณ  ๋„๋ฆฌ ๋ฐ›์•„๋“ค์—ฌ์ง€๋Š” OOP ์ •์˜๊ฐ€ ๋ถ€์กฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋ ต์Šต๋‹ˆ๋‹ค(Christopher J. Date).
๋‹ค๋ฅธ ์–ธ์–ด(LISP ๋ฐฉ์–ธ, ๊ธฐ๋Šฅ์  ์–ธ์–ด ๋“ฑ)์— ๋น„ํ•ด OOP ์–ธ์–ด๋Š” ๊ณ ์œ ํ•œ ์žฅ์ ์ด ์—†์œผ๋ฉฐ ๋ถˆํ•„์š”ํ•œ ๋ณต์žก์„ฑ์„ ๋ถ€๊ณผํ•ฉ๋‹ˆ๋‹ค. (๋กœ๋ Œ์Šค ํฌ๋ฃจ๋ธŒ๋„ˆ)
๋‚˜๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๊ธฐ์ˆ ์ ์œผ๋กœ ํ—ˆ์ˆ ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ผ ์œ ํ˜• ๋‚ด์—์„œ ๋‹ค์–‘ํ•œ ์ธํ„ฐํŽ˜์ด์Šค ์ธก๋ฉด์—์„œ ์„ธ๊ณ„๋ฅผ ์—ฌ๋Ÿฌ ๋ถ€๋ถ„์œผ๋กœ ๋ถ„ํ•ดํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ ๋ฌธ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด ๋‹ค์–‘ํ•œ ์œ ํ˜•์œผ๋กœ ํ™•์žฅ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ์ œํ’ˆ๊ตฐ์ธ ๋‹ค์ค‘ ์ •๋ ฌ ๋Œ€์ˆ˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ์ฒ ํ•™์ ์œผ๋กœ ๊ฑด๊ฐ•ํ•˜์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ๊ฐ์ฒด๋ผ๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์‚ฌ์‹ค์ด๋ผ ํ• ์ง€๋ผ๋„ ๋ณ„๋กœ ํฅ๋ฏธ๋กญ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ๋Œ€์ƒ์ด๋ผ๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์€ ์ „ํ˜€ ์•„๋ฌด ๋ง๋„ ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. (์•Œ๋ ‰์‚ฐ๋” ์Šคํ…ŒํŒŒ๋…ธํ”„)
๋Œ€๊ธฐ์—… ์‚ฌ์ด์—์„œ OOP์˜ ์ธ๊ธฐ๋Š” "๋Œ€๊ทœ๋ชจ(๊ทธ๋ฆฌ๊ณ  ์ž์ฃผ ๋ณ€ํ™”ํ•˜๋Š”) ํ‰๋ฒ”ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋จธ ๊ทธ๋ฃน"์— ๊ธฐ์ธํ•ฉ๋‹ˆ๋‹ค. OOP๊ฐ€ ๋ถ€๊ณผํ•˜๋Š” ๊ทœ์œจ์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ "๋„ˆ๋ฌด ๋งŽ์€ ํ•ด๋ฅผ ๋ผ์น˜๋Š”" ํ–‰์œ„๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. (ํด ๊ทธ๋ ˆ์ด์—„)
๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋Š” ๋ช…์‚ฌ๋ฅผ ์ตœ์šฐ์„ ์œผ๋กœ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์™œ ๊ทธ๋ ‡๊ฒŒ ๊ทน๋‹จ์ ์ธ ์กฐ์น˜๋ฅผ ์ทจํ•˜๊ณ  ์—ฐ์„ค์˜ ํ•œ ๋ถ€๋ถ„์„ ๋ฐ›์นจ๋Œ€์— ์˜ฌ๋ ค ๋†“์Šต๋‹ˆ๊นŒ? ํ•œ ๊ฐœ๋…์ด ๋‹ค๋ฅธ ๊ฐœ๋…๋ณด๋‹ค ์šฐ์„ ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? OOP๊ฐ€ ๊ฐ‘์ž๊ธฐ ๋™์‚ฌ๋ฅผ ์šฐ๋ฆฌ์˜ ์‚ฌ๊ณ ์— ๋œ ์ค‘์š”ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ด์ƒํ•˜๊ฒŒ ์™œ๊ณก๋œ ๊ด€์ ์ด๋‹ค. (์Šคํ‹ฐ๋ธŒ ์˜ˆ๊ฒŒ)
Clojure์˜ ์ฐฝ์‹œ์ž์ธ Rick Hickey๋Š” ๊ฐ์ฒด ์‹œ์Šคํ…œ์„ ํ˜„์‹ค ์„ธ๊ณ„์˜ ๊ทน๋„๋กœ ๋‹จ์ˆœํ™”๋œ ๋ชจ๋ธ๋กœ ์„ค๋ช…ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Š” OOP๊ฐ€ ์‹œ๊ฐ„์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ชจ๋ธ๋งํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์ ์„ ๊ฐ•์กฐํ–ˆ๋Š”๋ฐ, ์ด๋Š” ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์ด ์ผ๋ฐ˜ํ™”๋  ๋•Œ ํฐ ๋ฌธ์ œ๋ฅผ ์•ผ๊ธฐํ•ฉ๋‹ˆ๋‹ค. Unix ํ”„๋กœ๊ทธ๋ž˜๋จธ์ด์ž ์˜คํ”ˆ ์†Œ์Šค ์†Œํ”„ํŠธ์›จ์–ด ์˜นํ˜ธ์ž์ธ Eric S. Raymond๋Š” OOP๊ฐ€ "ํ•˜๋‚˜์˜ ์†”๋ฃจ์…˜"์ด๋ผ๋Š” ์ฃผ์žฅ์„ ๋น„ํŒํ•ด ์™”์œผ๋ฉฐ OOP๊ฐ€ ํˆฌ๋ช…์„ฑ์„ ๋ฐฉํ•ดํ•˜๋Š” ๋‹ค์ค‘ ๊ณ„์ธต ํ”„๋กœ๊ทธ๋žจ์„ ์žฅ๋ คํ•œ๋‹ค๊ณ  ์ผ์Šต๋‹ˆ๋‹ค. ์ด์— ๋ฐ˜๋Œ€๋˜๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์œผ๋กœ Raymond๋Š” Unix์™€ C์˜ ์˜ˆ๋ฅผ ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

์—ฐ๊ฒฐ

์ž‘์„ฑ์ž: Margaret Rouse @ WhatIs.com Wikipedia! ( ๋Ÿฌ์‹œ์•„์–ด ๋ฒ„์ „ ) ์ƒ์†์€ ๋‹คํ˜•์„ฑ์ž…๋‹ˆ๋‹ค SOLID (๊ฐ์ฒด ์ง€ํ–ฅ ๋””์ž์ธ) ( ๋Ÿฌ์‹œ์•„์–ด ๋ฒ„์ „ ) OOPS์— ๋Œ€ํ•œ ๋‹จ์ผ ์ฑ…์ž„ ์›์น™ ๋…ผ์Ÿ ( ๋Ÿฌ์‹œ์•„์–ด ๋ฒ„์ „ ) OOPS ๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ (๊ณผ์žฅ ์—†์Œ) ๋ฒˆ์—ญ: Varygin D.V.
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION