Skip to content

Latest commit

ย 

History

History
279 lines (146 loc) ยท 13.2 KB

Object-Oriented Programming.md

File metadata and controls

279 lines (146 loc) ยท 13.2 KB

๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ


๋ณดํ†ต OOP๋ผ๊ณ  ๋งŽ์ด ๋ถ€๋ฅธ๋‹ค. ๊ฐ์ฒด์ง€ํ–ฅ์€ ์ˆ˜ ์—†์ด ๋งŽ์ด ๋“ค์–ด์™”์ง€๋งŒ, ์ด๊ฒŒ ๋ญ”์ง€ ์„ค๋ช…ํ•ด๋‹ฌ๋ผ๊ณ  ํ•˜๋ฉด ์–ด๋””์„œ๋ถ€ํ„ฐ ํ•ด์•ผํ•  ์ง€ ๋ง‰๋ง‰ํ•ด์ง„๋‹ค.. ๊ฐœ๋…์„ ์žก์•„๋ณด์ž


๊ฐ์ฒด์ง€ํ–ฅ ํŒจ๋Ÿฌ๋‹ค์ž„์ด ๋‚˜์˜ค๊ธฐ ์ด์ „์˜ ํŒจ๋Ÿฌ๋‹ค์ž„๋“ค๋ถ€ํ„ฐ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ดํŽด๋ณด์ž.

ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ๋ฐœ์ „ ๊ณผ์ •์„ ๋ณด๋ฉด ์ ์  ๊ฐœ๋ฐœ์ž๋“ค์ด ํŽธํ•˜๊ฒŒ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐœ์„ ๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋‚˜์•„๊ฐ€๊ณ  ์žˆ๋Š” ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.


๊ฐ€์žฅ ๋จผ์ € ์ˆœ์ฐจ์ , ๋น„๊ตฌ์กฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ์žˆ๋‹ค. ๋ง ๊ทธ๋Œ€๋กœ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฝ”๋”ฉํ•ด๋‚˜๊ฐ€๋Š” ๊ฒƒ!

ํ•„์š”ํ•œ ๊ฒŒ ์žˆ์œผ๋ฉด ๊ณ„์† ์ˆœ์„œ๋Œ€๋กœ ์ถ”๊ฐ€ํ•ด๊ฐ€๋ฉฐ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ง๊ด€์ ์ผ ๊ฒƒ์ฒ˜๋Ÿผ ์ƒ๊ฐ๋˜์ง€๋งŒ, ์ ์  ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๊ฒŒ ๋˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

์ด๋Ÿฐ ๋น„๊ตฌ์กฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋Š” goto๋ฌธ์„ ํ™œ์šฉํ•œ๋‹ค. ๋งŒ์•ฝ ์ด์ „์— ์ž‘์„ฑํ–ˆ๋˜ ์ฝ”๋“œ๊ฐ€ ๋‹ค์‹œ ํ•„์š”ํ•˜๋ฉด ๊ทธ ๊ณณ์œผ๋กœ ์ด๋™ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด๋‹ค. ์ ์  ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๋ฉด goto๋ฌธ์„ ๋ฌด๋ถ„๋ณ„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๊ณ , ๋งˆ์น˜ ์‹ค๋œจ๊ธฐ๋ฅผ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ฒ ๋ฒ  ๊ผฌ์ด๊ฒŒ ๋œ๋‹ค. (์ฝ”๋“œ ์•ˆ์—์„œ ์œ„๋กœ ๊ฐ”๋‹ค๊ฐ€ ์•„๋ž˜๋กœ ๊ฐ”๋‹ค๊ฐ€..๋’ค์ฃฝ๋ฐ•์ฃฝ) ๋‚˜์ค‘์— ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ์กฐ์ฐจ ํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ๋  ๋ฌธ์ œ์ ์ด ์กด์žฌํ•œ๋‹ค.

์ด๋Ÿฌ๋ฉด, ์ฝ”๋”ฉ๋ณด๋‹ค ํ๋ฆ„์„ ์ดํ•ดํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ๋‹ค ์†Œ๋น„ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ํฌ๋‹ค

์˜ค๋Š˜๋‚  ์ˆ˜์—…์„ ๋“ฃ๊ฑฐ๋‚˜ ๊ณต๋ถ€ํ•˜๋ฉด์„œ goto๋ฌธ์€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๊ฒŒ ์ข‹๋‹ค!๋ผ๋Š” ๋ง์„ ๋ถ„๋ช… ๋“ค์–ด๋ดค์„ ๊ฒƒ์ด๋‹ค. goto๋ฌธ์€ ์žฅ๊ธฐ์ ์œผ๋กœ ๋ดค์„ ๋•Œ ํฌ๊ฒŒ ๋„์›€์ด ๋˜์ง€ ์•Š๋Š” ๊ตฌํ˜„ ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋Ÿฐ ๊ฒƒ์ด์—ˆ๋‹ค.


์ด๋Ÿฐ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํƒ„์ƒํ•œ ๊ฒƒ์ด ๋ฐ”๋กœ ์ ˆ์ฐจ์ , ๊ตฌ์กฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋‹ค. ์ด๊ฑด ๋Œ€๋ถ€๋ถ„ ๋งŽ์ด ๋“ค์–ด๋ณธ ํŒจ๋Ÿฌ๋‹ค์ž„์ผ ๊ฒƒ์ด๋‹ค.

๋ฐ˜๋ณต๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ๊ฒƒ๋“ค์„ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ ํ•จ์ˆ˜(ํ”„๋กœ์‹œ์ €)๋กœ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์ด๋‹ค.

์—ฌ๊ธฐ์„œ ๋ณดํ†ต ์ ˆ์ฐจ๋ผ๋Š” ์˜๋ฏธ๋Š” ํ•จ์ˆ˜(ํ”„๋กœ์‹œ์ €)๋ฅผ ๋œปํ•˜๊ณ , ๊ตฌ์กฐ๋Š” ๋ชจ๋“ˆ์„ ๋œปํ•œ๋‹ค. ๋ชจ๋“ˆ์ด ํ•จ์ˆ˜๋ณด๋‹ค ๋” ์ž‘์€ ์˜๋ฏธ์ด๊ธด ํ•˜์ง€๋งŒ, ์š”์ฆ˜์€ ํฐ ํ‹€๋กœ ๊ฐ™์€ ์˜๋ฏธ๋กœ ์“ฐ์ด๊ณ  ์žˆ๋‹ค.


ํ”„๋กœ์‹œ์ €๋Š” ๋ญ”๊ฐ€์š”?

๋ฐ˜ํ™˜๊ฐ’(๋ฆฌํ„ด)์ด ๋”ฐ๋กœ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํ•จ์ˆ˜๋ฅผ ๋œปํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, printf์™€ ๊ฐ™์€ ํ•จ์ˆ˜๋Š” ๋ฐ˜ํ™˜๊ฐ’์„ ์–ป๊ธฐ ์œ„ํ•œ ๊ฒƒ๋ณด๋‹จ, ํ™”๋ฉด์— ์ถœ๋ ฅํ•˜๋Š” ์šฉ๋„๋กœ ์“ฐ์ด๋Š” ํ•จ์ˆ˜๋‹ค. ์ด์™€ ๊ฐ™์€ ํ•จ์ˆ˜๋ฅผ ํ”„๋กœ์‹œ์ €๋กœ ๋ถ€๋ฅธ๋‹ค.

(์ •ํ™•ํžˆ ๋งํ•˜๋ฉด printf๋Š” intํ˜•์„ ๋ฆฌํ„ดํ•ด์ฃผ๊ธฐ๋Š” ํ•จ. ํ•˜์ง€๋งŒ ๋ชฉ์  ์ž์ฒด๋Š” ํ”„๋กœ์‹œ์ €์— ๊ฐ€๊นŒ์›€)


ํ•˜์ง€๋งŒ ์ด๋Ÿฐ ํŒจ๋Ÿฌ๋‹ค์ž„๋„ ๋ฌธ์ œ์ ์ด ์กด์žฌํ•œ๋‹ค. ๋ฐ”๋กœ ๋„ˆ๋ฌด ์ถ”์ƒ์ ์ด๋ผ๋Š” ๊ฒƒ..

์‹ค์ œ๋กœ ์‚ฌ์šฉ๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ๋“ค์€ ์ถ”์ƒ์ ์ด์ง€๋งŒ์€ ์•Š๋‹ค. ํ•จ์ˆ˜๋Š” ๋…ผ๋ฆฌ์  ๋‹จ์œ„๋กœ ํ‘œํ˜„๋˜์ง€๋งŒ, ์‹ค์ œ ๋ฐ์ดํ„ฐ์— ํ•ด๋‹นํ•˜๋Š” ๋ณ€์ˆ˜๋‚˜ ์ƒ์ˆ˜ ๊ฐ’๋“ค์€ ๋ฌผ๋ฆฌ์  ์š”์†Œ๋กœ ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.


๋„์„œ๊ด€๋ฆฌ ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.

์ฑ…์— ํ•ด๋‹นํ•˜๋Š” ์ž๋ฃŒํ˜•(ํ•„๋“œ)๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. ๋˜ํ•œ ์ฑ…๊ณผ ๊ด€๋ จ๋œ ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. ๊ตฌ์กฐ์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋Š” ์ด๋“ค์„ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค. ๊ฒฐ๊ตญ ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•  ๋•Œ, ๊ตฌ๋ถ„ํ•˜๊ธฐ ํž˜๋“ค๊ณ  ๋น„ํšจ์œจ์ ์œผ๋กœ ์ฝ”๋”ฉํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ง„๋‹ค.

์ฑ…์— ๋Œ€ํ•œ ์ž๋ฃŒํ˜•, ์ฑ…์— ๋Œ€ํ•œ ํ•จ์ˆ˜๊ฐ€ ๋ฌผ๋ฆฌ์ ์œผ๋ก  ๊ฐ™์ด ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ (๊ฐ™์€ ์œ„์น˜์— ๊ธฐ๋ก)

๋…ผ๋ฆฌ์ ์œผ๋กœ๋Š” ํ•จ๊ป˜ํ•  ์ˆ˜ ์—†๋Š” ๊ตฌ์กฐ๊ฐ€ ๋ฐ”๋กœ ๊ตฌ์กฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ


๋”ฐ๋ผ์„œ, ์ด๋ฅผ ํ•œ๋ฒˆ์— ๋ฌถ๊ธฐ ์œ„ํ•œ ํŒจ๋Ÿฌ๋‹ค์ž„์ด ํƒ„์ƒํ•œ๋‹ค.


๋ฐ”๋กœ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋‹ค.

์šฐ๋ฆฌ๊ฐ€ vo๋ฅผ ๋งŒ๋“ค ๋•Œ์™€ ๊ฐ™์€ ํ˜•ํƒœ๋‹ค. ํด๋ž˜์Šค๋งˆ๋‹ค ํ•„์š”ํ•œ ํ•„๋“œ๋ฅผ ์„ ์–ธํ•˜๊ณ , getter์™€ setter๋กœ ๊ตฌ์„ฑ๋œ ๋ชจ์Šต์œผ๋กœ ํ•ด๊ฒฐํ•œ๋‹ค. ๋ฐ”๋กœ ํŠน์ •ํ•œ ๊ฐœ๋…์˜ ํ•จ์ˆ˜์™€ ์ž๋ฃŒํ˜•์„ ํ•จ๊ป˜ ๋ฌถ์–ด์„œ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํƒ„์ƒํ•œ ๊ฒƒ!


๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ ์€, ๊ฐ์ฒด ๋‚ด๋ถ€์— ์ž๋ฃŒํ˜•(ํ•„๋“œ)์™€ ํ•จ์ˆ˜(๋ฉ”์†Œ๋“œ)๊ฐ€ ๊ฐ™์ด ์กด์žฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์ด์ œ ๋„์„œ๊ด€๋ฆฌ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค ๋•Œ, ํ•ด๋‹นํ•˜๋Š” ์ฑ…์˜ ์ œ๋ชฉ, ์ €์ž, ํŽ˜์ด์ง€์™€ ๊ฐ™์€ ์ž๋ฃŒํ˜•๊ณผ ์ฝ๊ธฐ, ์˜ˆ์•ฝํ•˜๊ธฐ ๋“ฑ ๋ฉ”์†Œ๋“œ๋ฅผ '์ฑ…'์ด๋ผ๋Š” ๊ฐ์ฒด์— ํ•œ๋ฒˆ์— ๋ฌถ์–ด์„œ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ด์กŒ๋‹ค.

์ด์ฒ˜๋Ÿผ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋ฌผ๋ฆฌ์ , ๋…ผ๋ฆฌ์  ์š”์†Œ๋ฅผ ๊ฐ์ฒด๋กœ ๋งŒ๋“œ๋ ค๋Š” ๊ฒƒ์ด ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๋‹ค.


๊ฐ์ฒด์ง€ํ–ฅ์œผ๋กœ ๊ตฌํ˜„ํ•˜๊ฒŒ ๋˜๋ฉด, ๊ฐ์ฒด ๊ฐ„์˜ ๋…๋ฆฝ์„ฑ์ด ์ƒ๊ธฐ๊ณ  ์ค‘๋ณต์ฝ”๋“œ์˜ ์–‘์ด ์ค„์–ด๋“œ๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. ๋˜ํ•œ ๋…๋ฆฝ์„ฑ์ด ํ™•๋ฆฝ๋˜๋ฉด ์œ ์ง€๋ณด์ˆ˜์—๋„ ๋„์›€์ด ๋  ๊ฒƒ์ด๋‹ค.


ํŠน์ง•

๊ฐ์ฒด์ง€ํ–ฅ์˜ ํŒจ๋Ÿฌ๋‹ค์ž„์ด ์ƒ๊ฒจ๋‚˜๋ฉด์„œ ํฌ๊ฒŒ 4๊ฐ€์ง€ ํŠน์ง•์„ ๊ฐ–์ถ”๊ฒŒ ๋˜์—ˆ๋‹ค.

์ด 4๊ฐ€์ง€ ํŠน์„ฑ์„ ์ž˜ ์ดํ•ดํ•˜๊ณ  ๊ตฌํ˜„ํ•ด์•ผ ๊ฐ์ฒด๋ฅผ ํ†ตํ•œ ํšจ์œจ์ ์ธ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.


  1. ์ถ”์ƒํ™”(Abstraction)

    ํ•„์š”๋กœ ํ•˜๋Š” ์†์„ฑ์ด๋‚˜ ํ–‰๋™์„ ์ถ”์ถœํ•˜๋Š” ์ž‘์—…

    ์ถ”์ƒ์ ์ธ ๊ฐœ๋…์— ์˜์กดํ•˜์—ฌ ์„ค๊ณ„ํ•ด์•ผ ์œ ์—ฐํ•จ์„ ๊ฐ–์ถœ ์ˆ˜ ์žˆ๋‹ค.

    ์ฆ‰, ์„ธ๋ถ€์ ์ธ ์‚ฌ๋ฌผ๋“ค์˜ ๊ณตํ†ต์ ์ธ ํŠน์ง•์„ ํŒŒ์•…ํ•œ ํ›„ ํ•˜๋‚˜์˜ ์ง‘ํ•ฉ์œผ๋กœ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๊ฒƒ์ด ์ถ”์ƒํ™”๋‹ค

    ex. ์•„์šฐ๋””, BMW, ๋ฒค์ธ ๋Š” ๋ชจ๋‘ '์ž๋™์ฐจ'๋ผ๋Š” ๊ณตํ†ต์ ์ด ์žˆ๋‹ค.
    
    ์ž๋™์ฐจ๋ผ๋Š” ์ถ”์ƒํ™” ์ง‘ํ•ฉ์„ ๋งŒ๋“ค์–ด๋‘๊ณ , ์ž๋™์ฐจ๋“ค์ด ๊ฐ€์ง„ ๊ณตํ†ต์ ์ธ ํŠน์ง•๋“ค์„ ๋งŒ๋“ค์–ด ํ™œ์šฉํ•œ๋‹ค.
    

    '์™œ ํ•„์š”ํ•˜์ฃ ?'

    ์˜ˆ๋ฅผ ๋“ค๋ฉด, 'ํ˜„๋Œ€'์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ์ž๋™์ฐจ ๋ธŒ๋žœ๋“œ๊ฐ€ ์ถ”๊ฐ€๋  ์ˆ˜๋„ ์žˆ๋‹ค. ์ด๋•Œ ์ถ”์ƒํ™”๋กœ ๊ตฌํ˜„ํ•ด๋‘๋ฉด ๋‹ค๋ฅธ ๊ณณ์˜ ์ฝ”๋“œ๋Š” ์ˆ˜์ •ํ•  ํ•„์š” ์—†์ด ์ถ”๊ฐ€๋กœ ๋งŒ๋“ค ๋ถ€๋ถ„๋งŒ ์ƒˆ๋กœ ์ƒ์„ฑํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

  2. ์บก์Šํ™”(Encapsulation)

    ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ

    ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด, ํ•œ ๊ณณ์—์„œ ๋ณ€ํ™”๊ฐ€ ์ผ์–ด๋‚˜๋„ ๋‹ค๋ฅธ ๊ณณ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ์ตœ์†Œํ™” ์‹œํ‚ค๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

    (๊ฐ์ฒด๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ๊ธฐ๋Šฅ์„ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•˜๋Š”์ง€ ๊ฐ์ถ”๋Š” ๊ฒƒ!)

    ๊ฒฐํ•ฉ๋„๊ฐ€ ๋‚ฎ๋„๋ก ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š” ์ด์œ ๊ฐ€ ๋ฌด์—‡์ผ๊นŒ? ๊ฒฐํ•ฉ๋„(coupling)๋ž€, ์–ด๋–ค ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•  ๋•Œ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋‚˜ ๋ชจ๋“ˆ์— ์–ผ๋งˆ๋‚˜ ์˜์กด์ ์ธ๊ฐ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ง์ด๋‹ค.

    ์ฆ‰, ๋…๋ฆฝ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด๋“ค ๊ฐ„์˜ ์˜์กด๋„๊ฐ€ ์ตœ๋Œ€ํ•œ ๋‚ฎ๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. ๊ฐ์ฒด๋“ค ๊ฐ„์˜ ์˜์กด๋„๊ฐ€ ๋†’์•„์ง€๋ฉด ๊ตณ์ด ๊ฐ์ฒด ์ง€ํ–ฅ์œผ๋กœ ์„ค๊ณ„ํ•˜๋Š” ์˜๋ฏธ๊ฐ€ ์—†์–ด์ง„๋‹ค.

    ์šฐ๋ฆฌ๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™์—์„œ ๊ฐ์ฒด ์•ˆ์˜ ๋ชจ๋“ˆ ๊ฐ„์˜ ์š”์†Œ๊ฐ€ ๋ฐ€์ ‘ํ•œ ๊ด€๋ จ์ด ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ์‘์ง‘๋„๋ฅผ ๋†’์ด๊ณ  ๊ฒฐํ•ฉ๋„๋ฅผ ์ค„์—ฌ์•ผ ์š”๊ตฌ์‚ฌํ•ญ ๋ณ€๊ฒฝ์— ๋Œ€์ฒ˜ํ•˜๋Š” ์ข‹์€ ์„ค๊ณ„ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ๋ฐฐ์šด๋‹ค.

    ์ด๊ฒƒ์ด ๋ฐ”๋กœ ์บก์Šํ™”์™€ ํฌ๊ฒŒ ์—ฐ๊ด€๋œ ๋ถ€๋ถ„์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.


    ๊ทธ๋ ‡๋‹ค๋ฉด, ์บก์Šํ™”๋Š” ์–ด๋–ป๊ฒŒ ๋†’์€ ์‘์ง‘๋„์™€ ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„๋ฅผ ๊ฐ–๊ฒŒ ํ• ๊นŒ?

    ๋ฐ”๋กœ ์ •๋ณด ์€๋‹‰์„ ํ™œ์šฉํ•œ๋‹ค.

    ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒƒ๋“ค์€ private์œผ๋กœ ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๋„๋ก ์ œํ•œ์„ ๋‘๋Š” ๊ฒƒ์ด๋‹ค.

    (๊ฐ์ฒด์•ˆ์˜ ํ•„๋“œ๋ฅผ ์„ ์–ธํ•  ๋•Œ private์œผ๋กœ ์„ ์–ธํ•˜๋ผ๋Š” ๋ง์ด ๋ฐ”๋กœ ์ด ๋•Œ๋ฌธ!!)


  3. ์ƒ์†

    ์ผ๋ฐ˜ํ™” ๊ด€๊ณ„(Generalization)๋ผ๊ณ ๋„ ํ•˜๋ฉฐ, ์—ฌ๋Ÿฌ ๊ฐœ์ฒด๋“ค์ด ์ง€๋‹Œ ๊ณตํ†ต๋œ ํŠน์„ฑ์„ ๋ถ€๊ฐ์‹œ์ผœ ํ•˜๋‚˜์˜ ๊ฐœ๋…์ด๋‚˜ ๋ฒ•์น™์œผ๋กœ ์„ฑ๋ฆฝํ•˜๋Š” ๊ณผ์ •

    ์ผ๋ฐ˜ํ™”(์ƒ์†)์€ ๋˜ ๋‹ค๋ฅธ ์บก์Šํ™”๋‹ค.

    ์ž์‹ ํด๋ž˜์Šค๋ฅผ ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ์€๋‹‰ํ•˜๋Š” ์บก์Šํ™”์˜ ์ผ์ข…์ด๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๋‹ค.


    ์•„๊นŒ ์ž๋™์ฐจ๋ฅผ ํ†ตํ•ด ์˜ˆ๋ฅผ ๋“ค์–ด ์ถ”์ƒํ™”๋ฅผ ์„ค๋ช…ํ–ˆ์—ˆ๋‹ค. ์—ฌ๊ธฐ์— ์ถ”๊ฐ€๋กœ ๋Œ€๋ฆฌ ์šด์ „์„ ํ•˜๋Š” ์‚ฌ๋žŒ ํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž. ์ด๋•Œ, ์ž๋™์ฐจ์˜ ์ž์‹ ํด๋ž˜์Šค์— ํ•ด๋‹นํ•˜๋Š” ๋ฒค์ธ , BMW, ์•„์šฐ๋”” ๋“ฑ์€ ์บก์Šํ™”๋ฅผ ํ†ตํ•ด ์€๋‹‰ํ•ด๋‘” ์ƒํƒœ๋‹ค.

    ์‚ฌ๋žŒ ํด๋ž˜์Šค์˜ ๊ด€์ ์œผ๋กœ๋Š”, ๊ตฌ์ฒด์ ์ธ ์ž๋™์ฐจ์˜ ์ข…๋ฅ˜๊ฐ€ ์ˆจ๊ฒจ์ ธ ์žˆ๋Š” ์ƒํƒœ๋‹ค. ๋Œ€๋ฆฌ ์šด์ „์ž ์ž…์žฅ์—์„œ๋Š” ์ž๋™์ฐจ์˜ ์ข…๋ฅ˜๊ฐ€ ์–ด๋–ค ๊ฒƒ์ธ์ง€๋Š” ์šด์ „ํ•˜๋Š”๋ฐ ํฌ๊ฒŒ ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค.

    ์ƒˆ๋กœ์šด ์ž๋™์ฐจ๋“ค์ด ์ถ”๊ฐ€๋œ๋‹ค๊ณ  ํ•ด๋„, ์‚ฌ๋žŒ ํด๋ž˜์Šค๋Š” ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์บก์Šํ™”๋ฅผ ํ†ตํ•ด ์‚ฌ๋žŒ ํด๋ž˜์Šค ์ž…์žฅ์—์„œ๋Š” ํ™•์ธํ•  ์ˆ˜ ์—†๋„๋ก ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.


    ์ด์ฒ˜๋Ÿผ, ์ƒ์† ๊ด€๊ณ„์—์„œ๋Š” ๋‹จ์ˆœํžˆ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค ์•ˆ์—์„œ ์†์„ฑ ๋ฐ ์—ฐ์‚ฐ๋“ค์˜ ์บก์Šํ™”์— ํ•œ์ •๋˜์ง€ ์•Š๋Š”๋‹ค. ์ฆ‰, ์ž์‹ ํด๋ž˜์Šค ์ž์ฒด๋ฅผ ์บก์Šํ™”ํ•˜์—ฌ '์‚ฌ๋žŒ ํด๋ž˜์Šค'์™€ ๊ฐ™์€ ์™ธ๋ถ€์— ์€๋‹‰ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ํ™•์žฅ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

    ์ด์ฒ˜๋Ÿผ ์ž์‹ ํด๋ž˜์Šค๋ฅผ ์บก์Šํ™”ํ•ด๋‘๋ฉด, ์™ธ๋ถ€์—์„  ์ด๋Ÿฌํ•œ ํด๋ž˜์Šค๋“ค์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๊ณ  ๊ฐœ๋ฐœ์„ ์ด์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.


    ์ƒ์† ์žฌ์‚ฌ์šฉ์˜ ๋‹จ์ 

    ์ƒ์†์„ ํ†ตํ•œ ์žฌ์‚ฌ์šฉ์„ ํ•  ๋•Œ ๋‚˜ํƒ€๋‚˜๋Š” ๋‹จ์ ๋„ ์กด์žฌํ•œ๋‹ค.

    1. ์ƒ์œ„ ํด๋ž˜์Šค(๋ถ€๋ชจ ํด๋ž˜์Šค)์˜ ๋ณ€๊ฒฝ์ด ์–ด๋ ค์›Œ์ง„๋‹ค.

    ๋ถ€๋ชจ ํด๋ž˜์Šค์— ์˜์กดํ•˜๋Š” ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ๋งŽ์„ ๋•Œ, ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•˜๋‹ค๋ฉด?

    ์ด๋ฅผ ์˜์กดํ•˜๋Š” ์ž์‹ ํด๋ž˜์Šค๋“ค์ด ์˜ํ–ฅ์„ ๋ฐ›๊ฒŒ ๋œ๋‹ค.

    1. ๋ถˆํ•„์š”ํ•œ ํด๋ž˜์Šค๊ฐ€ ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

    ์œ ์‚ฌ๊ธฐ๋Šฅ ํ™•์žฅ์‹œ, ํ•„์š” ์ด์ƒ์˜ ๋ถˆํ•„์š”ํ•œ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

    1. ์ƒ์†์ด ์ž˜๋ชป ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.

    ๊ฐ™์€ ์ข…๋ฅ˜๊ฐ€ ์•„๋‹Œ ํด๋ž˜์Šค์˜ ๊ตฌํ˜„์„ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์†์„ ๋ฐ›๊ฒŒ ๋˜๋ฉด, ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์ƒ์† ๋ฐ›๋Š” ํด๋ž˜์Šค๊ฐ€ ๋ถ€๋ชจ ํด๋ž˜์Šค์™€ IS-A ๊ด€๊ณ„๊ฐ€ ์•„๋‹ ๋•Œ ์ด์— ํ•ด๋‹นํ•œ๋‹ค.


    ํ•ด๊ฒฐ์ฑ…์€?

    ๊ฐ์ฒด ์กฐ๋ฆฝ(Composition), ์ปดํฌ์ง€์…˜์ด๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•œ๋‹ค.

    ๊ฐ์ฒด ์กฐ๋ฆฝ์€, ํ•„๋“œ์—์„œ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„๋œ๋‹ค.

    ์ƒ์†์— ๋น„ํ•ด ๋น„๊ต์  ๋Ÿฐํƒ€์ž„ ๊ตฌ์กฐ๊ฐ€ ๋ณต์žกํ•ด์ง€๊ณ , ๊ตฌํ˜„์ด ์–ด๋ ค์šด ๋‹จ์ ์ด ์กด์žฌํ•˜์ง€๋งŒ ๋ณ€๊ฒฝ ์‹œ ์œ ์—ฐํ•จ์„ ํ™•๋ณดํ•˜๋Š”๋ฐ ์žฅ์ ์ด ๋งค์šฐ ํฌ๋‹ค.

    ๋”ฐ๋ผ์„œ ๊ฐ™์€ ์ข…๋ฅ˜๊ฐ€ ์•„๋‹Œ ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋Š” ๊ฐ์ฒด ์กฐ๋ฆฝ์„ ์šฐ์„ ์ ์œผ๋กœ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.


    ๊ทธ๋Ÿผ ์ƒ์†์€ ์–ธ์ œ ์‚ฌ์šฉ?

    • IS-A ๊ด€๊ณ„๊ฐ€ ์„ฑ๋ฆฝํ•  ๋•Œ
    • ์žฌ์‚ฌ์šฉ ๊ด€์ ์ด ์•„๋‹Œ, ๊ธฐ๋Šฅ์˜ ํ™•์žฅ ๊ด€์ ์ผ ๋•Œ

  4. ๋‹คํ˜•์„ฑ(Polymorphism)

    ์„œ๋กœ ๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๊ฐ€ ๊ฐ™์€ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์•˜์„ ๋•Œ ๊ฐ์ž์˜ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ๋Šฅ๋ ฅ

    ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ํ•ต์‹ฌ๊ณผ๋„ ๊ฐ™์€ ๋ถ€๋ถ„์ด๋‹ค.

    ๋‹คํ˜•์„ฑ์€, ์ƒ์†๊ณผ ํ•จ๊ป˜ ํ™œ์šฉํ•  ๋•Œ ํฐ ํž˜์„ ๋ฐœํœ˜ํ•œ๋‹ค. ์ด์™€ ๊ฐ™์€ ๊ตฌํ˜„์€ ์ฝ”๋“œ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ•ด์ฃผ๊ณ , ์œ ์—ฐํ•จ์„ ๊ฐ–์ถ”๊ฒŒ ํ•ด์ค€๋‹ค.


    ์ฆ‰, ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•ด์„œ ์ž์‹ ์˜ ์—ญํ• ์— ๋งž๊ฒŒ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋‹คํ˜•์„ฑ์ด๋‹ค.

    ์ด์ฒ˜๋Ÿผ ๋‹คํ˜•์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด, ๊ตฌ์ฒด์ ์œผ๋กœ ํ˜„์žฌ ์–ด๋–ค ํด๋ž˜์Šค ๊ฐ์ฒด๊ฐ€ ์ฐธ์กฐ๋˜๋Š” ์ง€๋Š” ๋ฌด๊ด€ํ•˜๊ฒŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

    ์ƒ์† ๊ด€๊ณ„์— ์žˆ์œผ๋ฉด, ์ƒˆ๋กœ์šด ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ์ถ”๊ฐ€๋˜์–ด๋„ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ํ•จ์ˆ˜๋ฅผ ์ฐธ์กฐํ•ด์˜ค๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ํด๋ž˜์Šค๋Š” ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๊ฒŒ ๋œ๋‹ค.



๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„ ๊ณผ์ •

  • ์ œ๊ณตํ•ด์•ผ ํ•  ๊ธฐ๋Šฅ์„ ์ฐพ๊ณ  ์„ธ๋ถ„ํ™”ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๊ธฐ๋Šฅ์„ ์•Œ๋งž์€ ๊ฐ์ฒด์— ํ• ๋‹นํ•œ๋‹ค.
  • ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด์— ์ถ”๊ฐ€ํ•œ๋‹ค.
  • ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋„ฃ๋Š”๋‹ค.
  • ๊ธฐ๋Šฅ์€ ์ตœ๋Œ€ํ•œ ์บก์Šํ™”ํ•˜์—ฌ ๊ตฌํ˜„ํ•œ๋‹ค.
  • ๊ฐ์ฒด ๊ฐ„์— ์–ด๋–ป๊ฒŒ ๋ฉ”์†Œ๋“œ ์š”์ฒญ์„ ์ฃผ๊ณ ๋ฐ›์„ ์ง€ ๊ฒฐ์ •ํ•œ๋‹ค.

๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„ ์›์น™

SOLID๋ผ๊ณ  ๋ถ€๋ฅด๋Š” 5๊ฐ€์ง€ ์„ค๊ณ„ ์›์น™์ด ์กด์žฌํ•œ๋‹ค.

  1. SRP(Single Responsibility) - ๋‹จ์ผ ์ฑ…์ž„ ์›์น™

    ํด๋ž˜์Šค๋Š” ๋‹จ ํ•œ ๊ฐœ์˜ ์ฑ…์ž„์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.

    ํด๋ž˜์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์ด์œ ๋Š” ๋‹จ ํ•œ๊ฐœ์—ฌ์•ผ ํ•œ๋‹ค.

    ์ด๋ฅผ ์ง€ํ‚ค์ง€ ์•Š์œผ๋ฉด, ํ•œ ์ฑ…์ž„์˜ ๋ณ€๊ฒฝ์— ์˜ํ•ด ๋‹ค๋ฅธ ์ฑ…์ž„๊ณผ ๊ด€๋ จ๋œ ์ฝ”๋“œ์— ์˜ํ–ฅ์ด ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.


  2. OCP(Open-Closed) - ๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™

    ํ™•์žฅ์—๋Š” ์—ด๋ ค ์žˆ์–ด์•ผ ํ•˜๊ณ , ๋ณ€๊ฒฝ์—๋Š” ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

    ๊ธฐ๋Šฅ์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์œผ๋ฉด์„œ, ๊ทธ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ๋Š” ์ˆ˜์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค.

    ์ด๋ฅผ ์ง€ํ‚ค์ง€ ์•Š์œผ๋ฉด, instanceof์™€ ๊ฐ™์€ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋‹ค์šด ์บ์ŠคํŒ…์ด ์ผ์–ด๋‚œ๋‹ค.


  3. LSP(Liskov Substitution) - ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™

    ์ƒ์œ„ ํƒ€์ž…์˜ ๊ฐ์ฒด๋ฅผ ํ•˜์œ„ ํƒ€์ž…์˜ ๊ฐ์ฒด๋กœ ์น˜ํ™˜ํ•ด๋„, ์ƒ์œ„ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์€ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•ด์•ผ ํ•œ๋‹ค.

    ์ƒ์† ๊ด€๊ณ„๊ฐ€ ์•„๋‹Œ ํด๋ž˜์Šค๋“ค์„ ์ƒ์† ๊ด€๊ณ„๋กœ ์„ค์ •ํ•˜๋ฉด, ์ด ์›์น™์ด ์œ„๋ฐฐ๋œ๋‹ค.


  4. ISP(Interface Segregation) - ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™

    ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ทธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ถ„๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.

    ๊ฐ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•„์š”๋กœ ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋“ค์„ ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ, ๊ฐ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ธํ„ฐํŽ˜์ด์Šค์— ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋„๋ก ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.


  5. DIP(Dependency Inversion) - ์˜์กด ์—ญ์ „ ์›์น™

    ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ์€ ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์˜ ๊ตฌํ˜„์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค.

    ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์ด ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ์—์„œ ์ •์˜ํ•œ ์ถ”์ƒ ํƒ€์ž…์— ์˜์กดํ•ด์•ผ ํ•œ๋‹ค.

    ์ฆ‰, ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์ด ๋ณ€๊ฒฝ๋ผ๋„ ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ์€ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒƒ์ด๋‹ค.