[Java] ์ƒ์† vs ์ปดํฌ์ง€์…˜, ์ธํ„ฐํŽ˜์ด์Šค vs ์ถ”์ƒ ํด๋ž˜์Šค ๋น„๊ต ๋ฐ OOP ์„ค๊ณ„ ๊ธฐ์ค€ ์ด์ •๋ฆฌ
ยท
Java
๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP)์˜ ํ•ต์‹ฌ์ธ ์ƒ์†๊ณผ ์ธํ„ฐํŽ˜์ด์Šค, ์ถ”์ƒํ™” ํด๋ž˜์Šค๋Š” ์„ค๊ณ„ ๋ฐฉํ–ฅ์„ ๊ฒฐ์ •ํ•  ๋•Œ ์ž์ฃผ ๋งˆ์ฃผํ•˜๊ฒŒ ๋˜๋Š” ์„ ํƒ์ง€๋‹ค.์šฐ๋ฆฌ๋Š” ๊ฐ์ฒด์ง€ํ–ฅ์ ์ธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์ฃผ๋กœ 2๊ฐ€์ง€ ๊ฐˆ๋ฆผ๊ธธ์—์„œ ๊ณ ๋ฏผํ•˜๊ฒŒ ๋œ๋‹ค.์–ด๋–ค ๊ฐ์ฒด๊ฐ€ ๋‹ค๋ฅธ ๊ฐ์ฒด์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ๋•Œ, ์ด๋ฅผ extends๋กœ ์ƒ์†๋ฐ›์•„์„œ ํ•ด๊ฒฐํ• ์ง€, ์•„๋‹ˆ๋ฉด ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ๋‚ด๋ถ€์— ํฌํ•จ(composition)์‹œ์ผœ์„œ ์œ„์ž„ํ• ์ง€ ๊ฒฐ์ •ํ•ด์•ผ ํ•œ๋‹ค.์—ฌ๋Ÿฌ ๊ตฌํ˜„์ฒด๊ฐ€ ๊ณตํ†ต๋œ ๊ธฐ๋Šฅ์„ ๊ฐ€์ ธ์•ผ ํ•  ๋•Œ, ๊ทธ ๊ธฐ๋Šฅ์„ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ํ–‰๋™ ๊ทœ์•ฝ๋งŒ ์ •์˜ํ• ์ง€, ์•„๋‹ˆ๋ฉด ์ถ”์ƒ ํด๋ž˜์Šค๋กœ ๊ณตํ†ต๋œ ๊ธฐ๋ณธ ๋กœ์ง๊ณผ ์ƒํƒœ๊นŒ์ง€ ํ•จ๊ป˜ ์ œ๊ณตํ• ์ง€ ํŒ๋‹จํ•ด์•ผ ํ•œ๋‹ค.์–ด๋–ค ๊ธฐ์ค€์œผ๋กœ ์„ค๊ณ„๋ฅผ ํ•ด์•ผ๋ ๊นŒ? ์ด๋ฅผ ์œ„ํ•ด์„  ์ƒ์†, ์ธํ„ฐํŽ˜์ด์Šค, ์ถ”์ƒํ™” ํด๋ž˜์Šค ๊ฐœ๋…์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. ์–ด๋–ค ์„ค๊ณ„๊ฐ€ ๋” ์œ ์—ฐํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์ข‹์€ ์ฝ”๋“œ..