์‚ถ/F-Lab

Week 12

osean 2021. 7. 24. 18:53

Week 12
: ๋ณต์Šต, ๊ฐ์ฒด ์ง€ํ–ฅ, ๋””์ž์ธ ํŒจํ„ด ๋“ฑ

โœ๏ธ ์ด์ œ ๋ฉ˜ํ† ๋ง ์ค‘๋ฐ˜์„ ํ–ฅํ•ด ๋‹ฌ๋ ค๊ฐ€๊ณ  ์žˆ๋‹ค. ์ง€๋‚œ ๋‚ ๋“ค์„ ๋˜๋Œ์•„ ๋ณด์•˜์„ ๋•Œ, ๋‚˜๋Š” ์ง€๋‚˜์˜จ ์‹œ๊ฐ„๋งŒํผ ์„ฑ์žฅ ํ–ˆ์„๊นŒ? ์š”์ฆ˜ ๋‹ค์‹œ ๋˜๋ฌป๋Š” ์‹œ๊ฐ„์ด ๋งŽ์•„์ง€๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ณต๋ถ€๋ฅผ ํ•˜๋ฉด ํ•  ์ˆ˜๋ก, ๋‚ด๊ฐ€ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ๋‹ค์‹œ ์ƒ๊ธฐํ•˜๋ฉฐ ์ž… ๋ฐ–์œผ๋กœ ๊บผ๋‚ผ ๋•Œ ๋งˆ๋‹ค ์ž์‹ ๊ฐ์ด ๋–จ์–ด์ง€๋Š” ๊ฒƒ์„ ๋Š๋‚€๋‹ค. (๋”๋‹ ํฌ๋ฃจ๊ฑฐ ํšจ๊ณผ์ธ๊ฐ€?)

์ด ๋ฌด๊ธฐ๋ ฅ์„ ์ด๊ฒจ๋‚ด๋ ค๊ณ  ๋งค์ผ ๋‹ค์งํ•˜์ง€๋งŒ ์‰ฝ๊ฒŒ ์ด๊ฒจ๋‚ด์ง€ ๋ชปํ•˜๋Š” ๋‚ด ์ž์‹ ์ด ํ•œ์‹ฌํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ~ ๋ถ€์ •์ ์ธ ์ƒ๊ฐ์€ ํ•˜์ง€ ์•Š๊ธฐ๋กœ ์˜ค๋ž˜ ์ „ ๋ถ€ํ„ฐ ์•ฝ์† ํ–ˆ์œผ๋‹ˆ๊นŒ ํ•‘ํฌ๋น› ๋ฏธ๋ž˜๋ฅผ ์ƒ๊ฐํ•˜๋ฉฐ ์˜ค๋Š˜ ๋‚˜๋ˆˆ ์ด์•ผ๊ธฐ๋“ค์„ ์ •๋ฆฌํ•ด๋ด์•ผ๊ฒ ๋‹ค!

๋‚˜๋Š” ์ ˆ๋ง์˜ ๊ณ„๊ณก์—์„œ ํ—ค์—„์น˜๋Š” ์ค‘์ด๋‹ค.


1. Statement, SQL Injection

์ง€๋‚œ ์ฃผ์ฐจ์—์„œ ํ•ด๋‹น ์ฃผ์ œ์— ๋Œ€ํ•ด์„œ ๊ฐ„๋‹จํžˆ ์ •๋ฆฌํ–ˆ์ง€๋งŒ, SQL Injection ์— ๋Œ€ํ•œ ๋‚ด์šฉ์ด ๊ณผ์ œ๋กœ ์ถ”๊ฐ€๋˜์–ด์„œ ๋‹ค์‹œ ํ•œ ๋ฒˆ ์‚ดํŽด๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์กŒ๋‹ค.

Statement ๋ž€ ๋ฌด์—‡์ผ๊นŒ? ์š”์ฒญ์— ํ•„์š”์— ์˜ํ•ด ์ž‘์„ฑ๋œ ์ฟผ๋ฆฌ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ์ด๋ฅผ ์ปดํŒŒ์ผํ•˜๊ณ , ์ปค๋„ฅ์…˜์„ ํ†ตํ•ด ์ปดํŒŒ์ผ ๋œ ์ฟผ๋ฆฌ๋ฅผ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์— ์š”์ฒญํ•œ ๋’ค ์‘๋‹ต์„ ๋ฐ›์•„์ฃผ๋Š” ๊ฐ์ฒด๋ฅผ ์˜๋ฏธํ•œ๋‹ค. (์ฆ‰, Statement ์ธํ„ฐํŽ˜์ด์Šค๋Š” Connection ๊ฐ์ฒด๋ฅผ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์˜ ์ง‘ํ•ฉ์„ ์˜๋ฏธํ•œ๋‹ค.)
์ด๋Ÿฌํ•œ Statement ๋Š” ๋ฌธ์ž์—ด๋กœ ์ด๋ฃจ์–ด์ง„ ์ฟผ๋ฆฌ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ์ปดํŒŒ์ผ ํ•˜๋Š”๋ฐ, ์˜ˆ๋ฅผ ๋“ค์–ด ๋กœ๊ทธ์ธ์„ ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค๋ฉด ์‚ฌ์šฉ์ž๋Š” ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ URL ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋‚˜ HTTP Body ์— ์ž…๋ ฅ๊ฐ’์„ ๋‹ด์•„ ์š”์ฒญ ํ•  ๊ฒƒ์ด๋‹ค.
์ด ๋•Œ, ์ „์†ก๋œ ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ๋ฌธ์ž์—ด๋กœ ์ด๋ฃจ์–ด์ง„ ์ฟผ๋ฆฌ์— ๋ณดํ†ต + ์—ฐ์‚ฐ(์ปดํŒŒ์ผ ์‹œ, StringBuilder ๊ฐ€ + ์—ฐ์‚ฐ ์ˆ˜ํ–‰!)์„ ์ˆ˜ํ–‰ํ•˜๋Š”๋ฐ, Statement ๊ฐ์ฒด๋Š” ์ด๋ ‡๊ฒŒ ์ž‘์„ฑ๋œ ๋ฌธ์ž์—ด์„ 1) ์ฟผ๋ฆฌ๊ฐ€ ๋งž๋Š”์ง€ ๋ถ„์„ํ•˜๊ณ  2) ์ ์ ˆํ•œ ์ฟผ๋ฆฌ๋ผ๋ฉด ์ปดํŒŒ์ผ ํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค.
์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

๋งŒ์•ฝ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅ ํ•  ๋•Œ, ์ฟผ๋ฆฌ๋ฌธ์„ ์ž‘์„ฑํ•ด์„œ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?
์„œ๋ฒ„ ์‚ฌ์ด๋“œ์—์„œ ์ž‘์„ฑ๋œ ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด์— ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ์ฟผ๋ฆฌ๊ฐ€ ํ•˜๋‚˜์˜ ๋ฌธ์ž์—ด๋กœ ํ•ฉ์ณ์ง€๊ฒŒ ๋˜๊ณ , Statement ๊ฐ์ฒด๊ฐ€ ํ•ด๋‹น ๋ฌธ์ž์—ด์„ ์ปดํŒŒ์ผํ•˜๊ฒŒ ๋˜๊ณ , ์ด๋ฅผ ์„œ๋ฒ„๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๊ฒŒ ์š”์ฒญ์„ ํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ์„œ๋ฒ„๋Š” ์˜๋„ํ•˜์ง€ ์•Š๋Š” ์‘๋‹ต์„ ๋ฐ›๊ฒŒ ๋˜๋Š” ๋ณด์•ˆ ์ƒ ํฌ๋ฆฌํ‹ฐ์ปฌํ•œ ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ด๋ฅผ SQL Injection ์ด๋ผ๊ณ  ํ•˜๋Š”๋ฐ, ์™ธ๋ถ€์—์„œ ์ž„์˜์˜ ์ฟผ๋ฆฌ๋ฅผ ์„œ๋ฒ„๋กœ ์š”์ฒญํ•˜๋ฏ€๋กœ์จ ์ปดํ“จํ„ฐ ์ž์›์„ ๋งˆ๋น„ ์‹œํ‚ค๊ฑฐ๋‚˜ ๊ณผ๋„ํ•œ ์ฟผ๋ฆฌ ์š”์ฒญ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๋ฅผ ์œ ๋ฐœ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋•Œ๋ฌธ์— ๊ผญ ํ•„์š”ํ•˜์ง€ ์•Š๋Š” ์ด์ƒ PreparedStatement ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•ด์„œ ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ๋ฐ›๋Š” ๊ฒƒ์ด ์ข‹๊ฒ ๋‹ค.

 

2. ๊ฐ์ฒด ์ง€ํ–ฅ 4๋Œ€ ํŠน์„ฑ

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

๐Ÿ“ ์ƒ์† (ํ™•์žฅ๊ณผ ๊ตฌํ˜„)
: Java ๋ฅผ ๊ณต๋ถ€ํ•˜๋ฉด ํ•  ์ˆ˜๋ก ์ƒ์†์ด๋ผ๋Š” ๋ฒˆ์—ญ์€ ๊ฐ์ฒด ์ง€ํ–ฅ๊ณผ๋Š” ์กฐ๊ธˆ ๋‹ค๋ฅธ ๊ฐœ๋…์ด ์•„๋‹๊นŒ ํ•˜๊ณ  ์ƒ๊ฐํ•œ๋‹ค.
์ƒ์†์ด๋ผ ํ•จ์€ ๋ถ€๋ชจ์˜ ํŠน์ง•์ด๋‚˜ ์œ ์ „์ž, ์žฌ์‚ฐ ๋“ฑ์„ ๋ฌผ๋ ค ๋ฐ›๋Š”๋‹ค๋Š” ์˜๋ฏธ๋กœ ์œ„์—์„œ ์•„๋ž˜๋กœ ๋˜๋ฌผ๋ฆผ๋˜๋Š” ๊ฐœ๋…์ธ ๊ฒƒ์— ๋ฐ˜ํ•ด, ๊ฐ์ฒด ์ง€ํ–ฅ์—์„œ์˜ ์ƒ์†์€ ๋ถ€๋ชจ์˜ ํŠน์ง•์„ ๊ทธ๋Œ€๋กœ ๋‚ด๋ ค ๋ฐ›์œผ๋ฉด์„œ ์›ํ•œ๋‹ค๋ฉด ์ž์‹์ด ๋ถ€๋ชจ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค. (Wrapper)
์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ์ƒ์†์˜ ๊ฐœ๋…์—์„œ ๋ถ€๋ชจ์™€ ์ž์‹ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋ดค์„ ๋•Œ, ๋‚˜๋Š” ์šฐ๋ฆฌ ์•„๋ฒ„์ง€๊ฐ€ ๋  ์ˆ˜ ์žˆ์„๊นŒ? ๋ฌผ๋ก  ์ž์‹์€ ๋ถ€๋ชจ์˜ ๊ฑฐ์šธ์ด๋ผ๋Š” ๋ง์ด ์žˆ๊ธฐ๋Š” ํ•˜์ง€๋งŒ ๋ณธ์งˆ์ ์œผ๋กœ ๋‚˜๋Š” ๋‚˜๊ณ  ๋ถ€๋ชจ๋Š” ๋ถ€๋ชจ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚ด๊ฐ€ ์•„๋ฌด๋ฆฌ ์šฐ๋ฆฌ ์•„๋ฒ„์ง€๋ž‘ ๋˜‘๊ฐ™์ด ์ƒ๊ธฐ๊ณ  ํ–‰๋™ํ•œ๋‹ค๊ณ  ํ•ด๋„ ๋ˆ„๊ตฌ๋“ ์ง€ ๋‚˜๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

๊ฐ์ฒด ์ง€ํ–ฅ์—์„œ์˜ ์ƒ์†์€ ๋‹ค๋ฅด๋‹ค. ํ•˜์œ„ ํด๋ž˜์Šค๋Š” ์ƒ์œ„ ํด๋ž˜์Šค๋กœ ๊ฐ์‹ธ์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž˜ ๋ชจ๋ฅด๋Š” ์‚ฌ๋žŒ์ด ์™€์„œ ๋“ค์—ฌ๋‹ค ๋ณด๋ฉด ์ƒ์œ„ ํด๋ž˜์Šค๋กœ ์ธ์‹๋œ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ์ƒ์† ๊ฐœ๋…์„ ํ˜„์‹ค๋กœ ๊ฐ€์ ธ์™€์„œ ๋Œ€์ž… ํ•ด๋ณธ๋‹ค๋ฉด ๋…ผ๋ฆฌ์— ์–ด๊ธ‹๋‚œ๋‹ค. ์™œ ๊ทธ๋Ÿด๊นŒ?
๊ทธ๊ฒƒ์€ ์ƒ์†์„ ๋ฐ”๋ผ๋ณด๋Š” ๊ด€์ ์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์ธ๋ฐ, ํ˜„์‹ค์—์„œ์˜ ์ƒ์†์€ ๊ด€๊ณ„๋„๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ , ๊ฐ์ฒด ์ง€ํ–ฅ์—์„œ์˜ ์ƒ์†์€ ๋ถ„๋ฅ˜๋„๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ฒ˜์Œ ํด๋ž˜์Šค์™€ ๊ฐ์ฒด์˜ ์ฐจ์ด์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€ ํ•  ๋•Œ๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž. ํด๋ž˜์Šค๋Š” ๊ฐ์ฒด๋“ค์„ ์ •์˜ํ•œ ์ŠคํŽ™์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
์ฆ‰, ์—ฌ๋Ÿฌ ์นดํ…Œ๊ณ ๋ฆฌ ์ค‘ ํ•˜๋‚˜ ์ธ ๊ฒƒ์ด๋‹ค. (ํด๋ž˜์Šค๋ฅผ ์‚ฌ์ „์—์„œ ์ฐพ์•„๋ณด๋ฉด ๋ถ„๋ฅ˜๋ผ๊ณ  ๋‚˜์˜ค๊ธฐ๋„ ํ•œ๋‹ค.)

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

๐Ÿ“ ๋‹คํ˜•์„ฑ
: ์•ž์—์„œ ์„ค๋ช…ํ•œ ์ƒ์†์—์„œ ํ•˜์œ„ ํด๋ž˜์Šค์˜ ๊ตฌํ˜„์ฒด๋Š” ์ƒ์œ„ ํด๋ž˜์Šค๋กœ ์ธ์‹ ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ–ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๊ฐ์ฒด๊ฐ€ ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํƒ€์ž…์œผ๋กœ ๋ณ€๊ฒฝ ๋˜์–ด๋„ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๊ฐ€ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํƒ€์ž…์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ํŠน์ง•์„ ๋‹คํ˜•์„ฑ์ด๋ผ๊ณ  ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๋‹คํ˜•์„ฑ์€ Java ์—์„œ ๊ฐ์ฒด์—๋งŒ ๊ตญํ•œ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค.
์ƒ์† ๊ฐœ๋…์— ์˜ํ•ด์„œ ์ƒ์œ„ ํด๋ž˜์Šค๋ฅผ ํ™•์žฅํ•˜๊ฑฐ๋‚˜ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋Š” ํด๋ž˜์Šค๊ฐ€ ํ•˜๋‚˜ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. ํ•ด๋‹น ํด๋ž˜์Šค๋Š” ์ƒ์œ„ ํด๋ž˜์Šค์—์„œ ์ •์˜ํ•˜๊ฑฐ๋‚˜ ๋ช…์„ธํ•œ ๋ฉ”์†Œ๋“œ, ๋ฉค๋ฒ„ ํ•„๋“œ๋“ค์„ ์žฌ์ •์˜ ํ•˜๊ฑฐ๋‚˜ ์ƒˆ๋กญ๊ฒŒ ๊ตฌํ˜„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด๋ ‡๊ฒŒ ์ด๋ฏธ ์ •์˜๋œ ๋ฉ”์†Œ๋“œ, ๋ฉค๋ฒ„ ํ•„๋“œ๋“ค์„ ์žฌ์ •์˜ํ•˜๊ฑฐ๋‚˜ ์ƒˆ๋กญ๊ฒŒ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ ๋˜ํ•œ ๋‹คํ˜•์„ฑ์˜ ํŠน์ง•์„ ๊ฐ€์ง€๋Š”๋ฐ, ์ƒ์œ„ ํด๋ž˜์Šค์—์„œ ์ •์˜ํ•œ ๋‚ด์šฉ๋“ค์ด ์ƒ์†์— ์˜ํ•ด ๋‹ค๋ฅธ ๋‚ด์šฉ์œผ๋กœ ๊ต์ฒด ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์ด๋ผ๊ณ  ํ•œ๋‹ค.
์˜ค๋ฒ„๋กœ๋”ฉ์ด๋ผ๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ผ๊นŒ? ํด๋ž˜์Šค ๋‚ด๋ถ€์— ๊ฐ™์€ ์ด๋ฆ„์„ ๊ฐ€์ง„ ๋ช…์„ธ๊ฐ€ ๋‹ค๋ฅธ ๋ฉ”์†Œ๋“œ๋“ค์„ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์ด ๋˜ํ•œ ๊ฐ™์€ ์ด๋ฆ„์„ ๊ฐ€์ง„ ๋ฉ”์†Œ๋“œ๊ฐ€ ๋‹ค๋ฅธ ํ˜•์‹์œผ๋กœ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜์˜ ๋ฉ”์†Œ๋“œ๊ฐ€ ๋‹ค๋ฅธ ๋ช…์„ธ์˜ ๋ฉ”์†Œ๋“œ๋กœ ๊ต์ฒด๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹คํ˜•์„ฑ์˜ ํŠน์ง•์„ ๊ฐ€์ง„๋‹ค.

์ด์ฒ˜๋Ÿผ ๋‹คํ˜•์„ฑ์€ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๊ฐ€ ๋‹ค์–‘ํ•œ ํƒ€์ž…์œผ๋กœ ์ •์˜ ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํƒ€์ž…์„ ์œ ์—ฐํ•˜๊ฒŒ ์ •์˜ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์„ ๊ฐ€์ง„๋‹ค.(ํ™•์žฅ์„ฑ)

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

์ด์ฒ˜๋Ÿผ ํ•˜์œ„ ํด๋ž˜์Šค ๊ตฌํ˜„์ฒด๋ฅผ ์ƒ์œ„ ํด๋ž˜์Šค ํƒ€์ž…์œผ๋กœ ๊ฐ์‹ธ๊ณ  ์žˆ๋Š” ํ˜•ํƒœ๋ฅผ ์บก์Šํ™”๋ผ๊ณ  ํ•˜๋Š”๋ฐ, ์บก์Šํ™”๋Š” ๋‹คํ˜•์„ฑ, ์ƒ์†๊ณผ ๋งž๋ฌผ๋ ค์„œ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ•˜์œ„ ํด๋ž˜์Šค ๋‚ด๋ถ€๋ฅผ ์€๋‹‰ํ•˜๊ณ  ์‰ฝ๊ฒŒ ์ ‘๊ทผ ํ•  ์ˆ˜ ์—†๋„๋ก ํ•˜๋Š” ํŠน์ง•์„ ๊ฐ€์ง„๋‹ค. ๋•Œ๋ฌธ์— ํ•˜์œ„ ํด๋ž˜์Šค๋กœ ๊ตฌํ˜„๋œ ์ƒ์œ„ ํด๋ž˜์Šค ํƒ€์ž…์„ ๊ฐ€์ง€๋Š” ์ฐธ์กฐ ๋ณ€์ˆ˜์—์„œ ํ•˜์œ„ ํด๋ž˜์Šค์˜ ์ง€์—ญ์ ์ธ ํ•„๋“œ๋‚˜ ๋ฉ”์†Œ๋“œ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์บ์ŠคํŒ…์„ ํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค. ์ด์— Java ๋Š” instanceof ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ์ฐธ์กฐ ๋ณ€์ˆ˜๊ฐ€ ํŠน์ • ํด๋ž˜์Šค์˜ ํƒ€์ž…๊ณผ ๋งž๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ์ด๋ฅผ ํ•˜์œ„ ํด๋ž˜์Šค์— ๋งž๊ฒŒ ์บ์ŠคํŒ…ํ•˜์—ฌ ์ง€์—ญ์  ํ•„๋“œ์™€ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“ ์ถ”์ƒํ™”
: ์—ฌ๋Ÿฌ ํด๋ž˜์Šค๋“ค์ด ๊ฐ€์ง€๋Š” ๊ณตํ†ต์ ์ธ ํŠน์„ฑ๊ณผ ์š”์†Œ๋“ค์„ ํ•˜๋‚˜์˜ ์ธํ„ฐํŽ˜์ด์Šค ํ˜น์€ ์ถ”์ƒ ํด๋ž˜์Šค์— ๋ช…์„ธํ•˜๊ณ , ์ด๋Ÿฌํ•œ ์ธํ„ฐํŽ˜์ด์Šค, ์ถ”์ƒ ํด๋ž˜์Šค์— ๋ช…์„ธ๋œ ํŠน์„ฑ๊ณผ ์š”์†Œ๊ฐ€ ํ•„์š”ํ•œ ํด๋ž˜์Šค๋“ค์ด ์ด๋ฅผ ํ™•์žฅ, ๊ตฌํ˜„ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ƒํ™”๋ผ๊ณ  ํ•œ๋‹ค. ์ฆ‰, ๊ณตํ†ต ๋ถ„๋ชจ๋Š” ๋ถ„๋ช…ํ•œ๋ฐ ๊ฐ ๋ถ„๋ฅ˜(ํด๋ž˜์Šค) ๋ณ„๋กœ ๊ณตํ†ต ๋ถ„๋ชจ๊นŒ์ง€ ๋„์ถœํ•˜๋Š” ๊ณผ์ •์ด ๋‹ค๋ฅผ ๋•Œ ์ด๋Ÿฌํ•œ ์ถ”์ƒํ™”๋ฅผ ํ†ตํ•ด์„œ ๊ฐ๊ฐ์˜ ํด๋ž˜์Šค๋“ค์€ ์ž์‹ ์˜ ๋ฐฉ์‹์œผ๋กœ ํŠน์„ฑ๊ณผ ์š”์†Œ๋“ค์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

์ถ”์ƒํ™”๋ฅผ ์ ๊ทน ํ™œ์šฉํ•œ๋‹ค๋ฉด, ์บก์Šํ™”๋‚˜ ๋‹คํ˜•์„ฑ์˜ ํŠน์ง•๊ณผ ๋งž๋ฌผ๋ ค์„œ ํ•˜์œ„ ํด๋ž˜์Šค๋กœ ๊ตฌํ˜„๋œ ์ƒ์œ„ ํด๋ž˜์Šค์˜ ํƒ€์ž…์„ ๊ฐ€์ง€๋Š” ์ฐธ์กฐ ๋ณ€์ˆ˜(์บก์Šํ™”)๋Š” ๊ตฌํ˜„์ฒด๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด๋„(๋‹คํ˜•์„ฑ) ์–ธ์ œ๋‚˜ ๊ฐ™์€ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 

3. ๊ฐ์ฒด ์ง€ํ–ฅ 5๋Œ€ ์›์น™

๊ฐ์ฒด ์ง€ํ–ฅ 5๋Œ€ ์›์น™? ์œ„์—์„œ ์ •๋ฆฌํ•œ ๊ฐ์ฒด ์ง€ํ–ฅ 4๋Œ€ ํŠน์ง•๊ณผ ๋น„์Šทํ•œ ๊ฒƒ ๊ฐ™์€๋ฐ ๋ญ๊ฐ€ ๋‹ค๋ฅธ๊ฑธ๊นŒ?
๊ฐ์ฒด ์ง€ํ–ฅ์˜ 4๋Œ€ ํŠน์ง•์€ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€ํƒฑํ•˜๊ณ  ์žˆ๋Š” ๊ทผ๋ณธ์ด๋‚˜ ๋ฟŒ๋ฆฌ์˜ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด ์ง€ํ–ฅ์˜ 4๋Œ€ ํŠน์ง•์€ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์—†์œผ๋ฉด ์•ˆ๋˜๋Š” ์กด์žฌ๋“ค์ด๋‹ค. ํ•˜์ง€๋งŒ ๊ฐ์ฒด ์ง€ํ–ฅ 5๋Œ€ ์›์น™์€ ๊ฐ์ฒด ์ง€ํ–ฅ์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ–ˆ์„ ๋•Œ ํ•ด๋‹น ์›์น™์„ ๋”ฐ๋ฅธ๋‹ค๋ฉด ์ƒ์‚ฐ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ ๊ทธ๋ฆฌ๊ณ  ๊ฐœ๋ฐœ์˜ ํ™•์žฅ์„ฑ, ํ˜‘์—… ๋“ฑ ๋งŽ์€ ๋ถ€๋ถ„์—์„œ ์œ ๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ถŒ๊ณ  ์‚ฌํ•ญ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.
์ฆ‰, 4๋Œ€ ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋ผ๋„ ๋น ์ง„๋‹ค๋ฉด ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋žจ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์—†์ง€๋งŒ 5๋Œ€ ์›์น™์„ ๋ชจ๋‘ ๋”ฐ๋ฅด์ง€ ์•Š๋”๋ผ๋„ ๋ฌธ์ œ๊ฐ€ ์ด๋ ‡๊ฒŒ ์งœ์—ฌ์ง„ ํ”„๋กœ๊ทธ๋žจ์ด ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋žจ์ด ์•„๋‹ˆ๋ผ๊ณ  ํ•  ์ˆ˜ ์—†๋‹ค. (ํŒ€์˜ ์„ฑํ–ฅ์— ๋”ฐ๋ผ ์ฝ”๋“œ ์Šคํƒ€์ผ์ด ๋‹ฌ๋ผ์ง€๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ ๊ฐœ๋ฐœ ์Šคํƒ€์ผ์˜ ์›์น™์„ ์ •์˜ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.)

์ด๋Ÿฌํ•œ 5๋Œ€ ํŠน์ง•์€ SOLID ๋ผ๋Š” ๋ช…์นญ์„ ๊ฐ€์ง€๋Š”๋ฐ
- SRP (Single Responsibility Principle) : ๋‹จ์ผ ์ฑ…์ž„ ์›์น™
- OCP (Open Close Principle) : ๊ฐœ๋ฐฉ ํ์‡„ ์›์น™
- LSP (Liskov Substitution Principle) : ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™
- ISP (Interface Segregation Principle) : ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™
- DIP (Dependency Inversion Principle) : ์˜์กด์„ฑ ์—ญ์ „ ์›์น™
์˜ ์›์น™์˜ ์•ž ๊ธ€์ž๋ฅผ ๋”ฐ์„œ ๋งŒ๋“ค์–ด์กŒ๋‹ค.

์ด๋Ÿฌํ•œ ์›์น™๋“ค์€ ์–ด๋–ค ๊ฒƒ์„ ์˜๋ฏธํ• ๊นŒ?

๐Ÿ“ ๋‹จ์ผ ์ฑ…์ž„ ์›์น™ - SRP
: ๋ฌธ์žฅ ๊ทธ๋Œ€๋กœ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋Š” ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ์„ ๊ฐ€์ง€๋„๋ก ์„ค๊ณ„ํ•˜๋Š” ์›์น™์„ ๋œปํ•œ๋‹ค. ์ด์ „์— ๊ณต๋ถ€ํ–ˆ๋˜ ๋™์  ํŽ˜์ด์ง€๋ฅผ ์‘๋‹ตํ•˜๊ธฐ ์œ„ํ•ด ํ•˜๋‚˜์˜ JSP ์ด๋‚˜ ์„œ๋ธ”๋ฆฟ์—์„œ DB ์ปค๋„ฅ์…˜ ์„ค์ •์ด๋‚˜ ์กฐํšŒ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ๋™์‹œ์— ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๊ณตํ•˜์—ฌ ํ™”๋ฉด์œผ๋กœ ๋งŒ๋“ค์–ด ํด๋ผ์ด์–ธํŠธ์—์„œ ์‘๋‹ตํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค.
์ด๋Š” ํ•˜๋‚˜์˜ ํด๋ž˜์Šค์—์„œ ์—ฌ๋Ÿฌ ์—ญํ• ์„ ๋งก๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ์ธ๋ฐ, ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์— ์—ฌ๋Ÿฌ ์—ญํ• ์„ ๋งก์€ ํด๋ž˜๋Š” ์ฑ…์ž„์˜ ๋ฌด๊ฒŒ๊ฐ€ ๋ฌด๊ฑฐ์›Œ์ง€๊ฒŒ ๋œ๋‹ค. (๊ฒฐํ•ฉ๋„๊ฐ€ ๋†’๊ณ , ์‘์ง‘๋„๋Š” ๋‚ฎ์•„์ง„๋‹ค.) ์ด๋Ÿฐ ๊ฒฝ์šฐ, ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ์˜์กดํ•˜๋Š” ํด๋ž˜์Šค๋“ค์ด ๋งŽ์•„์ง€๊ฒŒ ๋˜๊ณ , ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ๊ฐ€ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ง€๋ณด์ˆ˜๋‚˜ ํ™•์žฅ์—์„œ ์œ ์—ฐํ•˜์ง€ ๋ชปํ•˜๋‹ค.
๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋Š” ํ•˜๋‚˜์˜ ์—ญํ• ๋งŒ์„ ๊ฐ€์ง€๋„๋ก ํ•˜๋Š” ์›์น™์ด ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์ด๋‹ค.

๐Ÿ“ ๊ฐœ๋ฐฉ ํ์‡„ ์›์น™ - OCP
: ์ž์‹ ์˜ ํ™•์žฅ์—๋Š” ์—ด๋ ค ์žˆ์œผ๋‚˜ ๋ณ€๊ฒฝ์—๋Š” ๋‹ซํ˜€ ์žˆ๋„๋ก ์„ค๊ณ„ํ•˜๋Š” ์›์น™์„ ๋œปํ•œ๋‹ค.
์—ฌ๊ธฐ์„œ ํ™•์žฅ์€ ์‰ฝ๊ฒŒ ์ดํ•ด๊ฐ€ ๋˜๋Š”๋ฐ, ๋ณ€๊ฒฝ์— ๋‹ซํ˜€์žˆ๋‹ค๋Š” ๊ฒƒ์€ ์–ด๋–ค ๊ฒƒ์„ ์˜๋ฏธํ•˜๋Š”๊ฑธ๊นŒ?
๋‹จ์ผ ์ฑ…์ž„ ์›์น™์„ ๋”ฐ๋ฅด๋‹ค๋ณด๋ฉด ๊ฒฐ๊ตญ ๊ฐ๊ฐ์˜ ํด๋ž˜์Šค๋Š” ์ตœ์†Œํ•œ์˜ ์—ญํ• ๋งŒ์„ ๊ฐ€์ง€๊ฒŒ ๋˜๊ณ , ์Šˆํผ ํด๋ž˜์Šค(ํ˜น์€ ์ธํ„ฐํŽ˜์ด์Šค)๋ฅผ ํ†ตํ•ด์„œ ๊ฐ์ž์˜ ์—ญํ• ์„ ์ž˜ ์กฐํ•ฉํ•ด ๋„์ถœ๋œ ๊ฒฐ๊ณผ๋ฅผ ์Šˆํผ ํด๋ž˜์Šค๊ฐ€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์‘๋‹ต ํ•  ๊ฒƒ ์ด๋‹ค.
์ด ๋•Œ, ํด๋ผ์ด์–ธํŠธ์—์„œ ๊ธฐ์กด ์š”์ฒญ์— ๋Œ€ํ•œ ์š”๊ตฌ์‚ฌํ•ญ์ด ๋ณ€๊ฒฝ ๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ • ํ–ˆ์„ ๋•Œ, ์Šˆํผ ํด๋ž˜์Šค์—์„œ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„์„ ์‘๋‹ตํ•˜๋„๋ก ์ˆ˜์ •ํ•œ๋‹ค๋ฉด ์Šˆํผ ํด๋ž˜์Šค๋งŒ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ํ•ด๋‹น ํด๋ž˜์Šค ๋‚ด๋ถ€์— ์žˆ๋Š” ๊ฐ๊ฐ์˜ ์—ญํ• ๋“ค๊นŒ์ง€๋„ ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ฒŒ ๋œ๋‹ค. ์ด ๊ฒƒ์ด ๋ฐ”๋กœ ์ž์‹ ์˜ ๋ณ€๊ฒฝ์— ๋Œ€ํ•ด ๋‹ซํ˜€ ์žˆ๋‹ค๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„๋‹ค.
์ฆ‰, ๊ฐœ๋ฐฉ ํ์‡„ ์›์น™์€ ์Šˆํผํด๋ž˜์Šค์˜ ํ•˜์œ„ ํด๋ž˜์Šค ํ™•์žฅ์—๋Š” ์—ด๋ ค ์žˆ๊ณ , ์ž์‹ ์˜ ๋‚ด๋ถ€๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ฑฐ๋‚˜ ๊ต์ฒด๋˜๋Š” ๊ฒƒ์—๋Š” ๋‹ซํ˜€ ์žˆ๊ฒŒ ๋˜๋ฉด์„œ ์ปดํŒŒ์ผ ํƒ€์ž„์—์„œ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋Š” ์˜์กด์„ฑ์„ ์ธํ„ฐํŽ˜์ด์Šค์—๊ฒŒ ์—ญ์ „์‹œ์ผœ ๋Ÿฐํƒ€์ž„์˜ ์˜์กด์„ฑ์„ ์œ„์ž„ํ•˜์—ฌ ์žฌ์‚ฌ์šฉ์„ฑ์ด๋‚˜ ํ™•์žฅ์„ฑ ์œ ์—ฐ์„ฑ์„ ์œ„ํ•œ ์›์น™์ด๋‹ค.

๐Ÿ“ ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™ - LSP
: <์ž๋ฐ”์˜ ์‹ > ์ฑ…์„ ์ฝ์œผ๋ฉฐ ๊ณต๋ถ€ํ•˜๋ฉด์„œ Inheritance (์ƒ์†)๊ณผ Composition (ํ•ฉ์„ฑ, ์กฐํ•ฉ)์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๋ฉด์„œ ํ•จ๊ป˜ ๊ณต๋ถ€ํ–ˆ๋˜ ๋‚ด์šฉ์ด๋‹ค. ๊ทธ ๋•Œ ๊ณต๋ถ€ํ–ˆ๋˜ ๋‚ด์šฉ์„ ๋– ์˜ฌ๋ ค๋ณด์ž. ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™์ด๋ž€ ๋‹คํ˜•์„ฑ์˜ ํŠน์ง•์„ ๋ฐ”ํƒ•์œผ๋กœ ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ๋‹ค. ์ฆ‰, ํ•˜๋‚˜์˜ ๊ตฌํ˜„์ฒด๋Š” ๋‹ค๋ฅธ ํƒ€์ž…์œผ๋กœ ๊ต์ฒด ๋  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ์›์น™์ธ๋ฐ, <์Šคํ”„๋ง ์ž…๋ฌธ์„ ์œ„ํ•œ ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ์›์น™> ์ด๋ผ๋Š” ์ฑ…์—์„œ๋Š”
- ํ•˜์œ„ ํด๋ž˜์Šค is a kind of ์ƒ์œ„ ํด๋ž˜์Šค
- ๊ตฌํ˜„์ฒด ํด๋ž˜์Šค is able to ์ธํ„ฐํŽ˜์ด์Šค
๋ผ๋Š” ๋ฌธ์žฅ์ด ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™์— ์ ํ•ฉํ•œ ์˜ˆ์‹œ๋ผ๊ณ  ๋งํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ์ด ๋ถ€๋ถ„์— ๋™์˜ํ•œ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์•ž์—์„œ 4๋Œ€ ํŠน์ง•์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐ ํ•  ๋•Œ๋„, ๋‹จ์ˆœํžˆ is a ๊ด€๊ณ„์—์„œ๋Š” ๋‹คํ˜•์„ฑ์˜ ํŠน์ง•์— ์–ด๊ธ‹๋‚˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒ ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ is a kind of ๋ผ๋Š” ๊ด€์ ์œผ๋กœ ํด๋ž˜์Šค๋ฅผ ๋ฐ”๋ผ๋ณด๊ฒŒ ๋˜๋ฉด ์ž์—ฐ์Šค๋ ˆ ๋ถ„๋ฅ˜๋กœ ์ •์˜๋˜๊ณ , ์ด๋Ÿฌํ•œ ๋ถ„๋ฅ˜๋Š” ์ž์‹ ์˜ ์ƒ์œ„ ๋ถ„๋ฅ˜๋กœ ๋Œ€์ฒ˜ ๋  ์ˆ˜ ์žˆ๋‹ค.

์—ฌ๋Ÿฌ ์‡ผํ•‘๋ชฐ์˜ ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ํ•œ๋ฒˆ ์‚ดํŽด๋ณด์ž.
๋Œ€๋ถ„๋ฅ˜์— ์ „์ž์ œํ’ˆ์ด ์žˆ๊ณ , ์ค‘๋ถ„๋ฅ˜์— ๊ฐ€์ „์ œํ’ˆ, ๋ชจ๋ฐ”์ผ๊ธฐ๊ธฐ ๋“ฑ์œผ๋กœ ๋‚˜๋‰˜์–ด์ ธ ์žˆ์œผ๋ฉฐ, ์ด ์ค‘์— ๋ชจ๋ฐ”์ผ๊ธฐ๊ธฐ ์ค‘๋ถ„๋ฅ˜์˜ ์†Œ๋ถ„๋ฅ˜์—๋Š” ํœด๋Œ€์ „ํ™”, ํƒœํ”Œ๋ฆฟ PC, ์Šค๋งˆํŠธ ์›Œ์น˜ ๋“ฑ์ด ์กด์žฌํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.
์—ฌ๊ธฐ์„œ ์งš๊ณ  ๋„˜์–ด๊ฐ€์•ผ ํ•  ์ ์€ ํ•˜์œ„์˜ ์†Œ๋ถ„๋ฅ˜๋“ค์€ ์ตœ์ƒ์œ„์— ์œ„์น˜ํ•œ ๋Œ€๋ถ„๋ฅ˜๋กœ๋„ ๋ถˆ๋ฆด ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ์Šค๋งˆํŠธ ์›Œ์น˜๋Š” ๋ชจ๋ฐ”์ผ๊ธฐ๊ธฐ์˜ ํ•œ ์ข…๋ฅ˜์ด๊ธฐ๋„ ํ•˜๋ฉด์„œ ์ „์ œ์ œํ’ˆ์˜ ์ข…๋ฅ˜์ด๊ธฐ๋„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜์œ„์˜ ํด๋ž˜์Šค(๋ถ„๋ฅ˜)๊ฐ€ ์ƒ์œ„์˜ ํด๋ž˜์Šค๋กœ ๋Œ€์ฒ˜๋˜์–ด๋„ ๊ฐ์ฒด์˜ ๋™์ž‘์— ์žˆ์–ด ๋ฌธ์ œ๊ฐ€ ์—†๋„๋ก ํ•˜๋Š” ์›์น™์ด ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™์ด๋‹ค.

๋ฐ˜๋ฉด ์ด๋ ‡๊ฒŒ ๋ถ„๋ฅ˜๋„์˜ ๊ด€์ ์ด ์•„๋‹Œ ๊ด€๊ณ„๋„์˜ ๊ด€์ ์œผ๋กœ ๋ฐ”๋ผ ๋ดค์„ ๋•Œ๋ฅผ ์‚ดํŽด๋ณด์ž.
4๋Œ€ ํŠน์ง•์˜ ๋‹คํ˜•์„ฑ ํŒŒํŠธ์—์„œ ๊ฐ„๋žตํžˆ ์„ค๋ช…ํ–ˆ๋˜ ๋‚ด์šฉ์ธ๋ฐ, ์ตœ์ƒ์œ„ ํด๋ž˜์Šค์— ํ• ์•„๋ฒ„์ง€๊ฐ€ ์œ„์น˜ํ•˜๊ณ  ๊ทธ์˜ ์ž์‹์œผ๋กœ๋Š” ์•„๋ฒ„์ง€, ์•„๋ฒ„์ง€์˜ ์ž์‹์œผ๋กœ๋Š” ๋”ธ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. ๊ทธ๋ ‡๋‹ค๋ฉด ๋‹คํ˜•์„ฑ์˜ ํŠน์ง•์— ์˜ํ•ด์„œ ์•„๋ฒ„์ง€ ํฐ๋”ธ = new ๋”ธ() ์ด๋Ÿฐ ์‹์œผ๋กœ ํ•˜์œ„ ํด๋ž˜์Šค ๊ตฌํ˜„์ฒด๋Š” ์ƒ์œ„ ํด๋ž˜์Šค ํƒ€์ž…์œผ๋กœ ๊ฐ์‹ธ์งˆ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ์—์„œ ๋”ธ์ด ๊ณผ์—ฐ ์•„๋ฒ„์ง€์˜ ์—ญํ• ์„ ์ถฉ๋ถ„ํžˆ ํ•ด๋‚ผ ์ˆ˜ ์žˆ์„๊นŒ? ํ˜น์€ ์šฐ๋ฆฌ๋Š” ํฐ ๋”ธ์„ ์•„๋ฒ„์ง€๋ผ๊ณ  ๋ถ€๋ฅผ ์ˆ˜ ์žˆ์„๊นŒ? ์ •๋‹ต์€ '์•„๋‹ˆ์˜ค'์ด๋‹ค.
์ด ์ฒ˜๋Ÿผ ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™์„ ์ž˜ ๋”ฐ๋ž์„ ๋•Œ, ํ•ด๋‹น ํ”„๋กœ๊ทธ๋žจ์„ ์‰ฝ๊ฒŒ ์ดํ•ด ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

๐Ÿ“ ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™ - ISP
: ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค. ๊ฒฐ๊ตญ ์ฃผ์ฒด์™€ ๊ด€์ ์ด ๋‹ค๋ฅผ ๋ฟ, ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์ฒ˜๋Ÿผ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค์˜ ์—ญํ• ์„ ๋ถ„๋ฆฌ๋ถ„์‚ฐ ํ•ด์ฃผ๊ณ ์ž ํ•˜๋Š” ๊ฒƒ์— ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„๋‹ค. ๋‹จ์ผ ์ฑ…์ž„ ์›์น™๊ณผ ๋‹ค๋ฅธ ์ ์€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๊ฐ ์—ญํ• ์„ ๋ถ„๋ฆฌํ•˜๊ณ , ํ•„์š”ํ•œ ์—ญํ• ์„ ํด๋ž˜์Šค์—์„œ ๊ตฌํ˜„ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๋Š” ์›์น™์ด๋‹ค. ํ•˜์ง€๋งŒ ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™์€ ๊ฐ์ฒด ์ง€ํ–ฅ ๋…ผ๋ฆฌ์—์„œ ์กฐ๊ธˆ ์–ด๊ธ‹๋‚˜๋Š” ๋ถ€๋ถ„์ด ์กด์žฌํ•˜๋Š”๋ฐ, ํ•˜๋‚˜์˜ ํด๋ž˜์Šค์—์„œ ํ•„์š”๋กœ ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋“ค์„ ๊ตฌํ˜„ํ•œ๋‹ค๊ณ  ๊ฐ€์ • ํ–ˆ์„ ๋•Œ, ํ•ด๋‹น ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋“ค์€ ๊ฐ์ž์˜ ์œ„์น˜์—์„œ ์ž์‹ ์ด ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋Š” ๋ชจ๋“  ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. 

์ฆ‰, ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋Š” ํด๋ž˜์Šค๋Š” ์ธํ„ฐํŽ˜์ด์Šค์— ์˜ํ•ด์„œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์—ญํ• ์„ ๊ฐ€์ง€๊ฒŒ ๋˜๋Š”๋ฐ, ๊ฒฐ๊ตญ ์ด๋Ÿฌํ•œ ํด๋ž˜์Šค๊ฐ€ ์ธ์Šคํ„ด์Šคํ™” ๋˜๋ฉด ์—ญํ• ์— ๋งž๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ์™ธํ•œ ํ˜„์žฌ ์—ญํ• ์—์„œ๋Š” ์“ธ๋ชจ ์—†๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœ ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ถŒ์žฅํ•˜๋Š” ์›์น™์€ ์•„๋‹ˆ๋ผ๊ณ  ํ•œ๋‹ค.

๐Ÿ“ ์˜์กด์„ฑ ์—ญ์ „ ์›์น™ - DIP
: ๊ณ ์ˆ˜์ค€์˜ ๋ชจ๋“ˆ์ด ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์˜ ๊ตฌํ˜„์ฒด์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ๋œ๋ฉฐ ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์˜ ๊ตฌํ˜„์ฒด๊ฐ€ ์ถ”์ƒํ™”๋œ ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ์— ์˜์กดํ•ด์•ผ ํ•œ๋‹ค๋Š” ์›์น™์ด๋‹ค. ์—ฌ๊ธฐ์„œ ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ์ด๋ž€ ์–ด๋– ํ•œ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, ์ด๋Ÿฌํ•œ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์‹ค์งˆ์ ์ธ ๊ตฌํ˜„์ฒด๋ฅผ ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์ด๋ผ๊ณ  ํ•˜๋Š”๋ฐ , ๋งŒ์•ฝ ๊ตฌํ˜„์ฒด์— ์ง์ ‘์ ์œผ๋กœ ์˜์กดํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ์ถ”ํ›„์— ๋‹ค๋ฅธ ๊ตฌํ˜„์ฒด๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์˜์กดํ•˜๊ณ  ์žˆ๋Š” ๊ฐ์ฒด์˜ ์ฝ”๋“œ๋“ค์€ ๋ณ€๊ฒฝ๋˜๋Š” ๊ตฌํ˜„์ฒด(์ €์ˆ˜์ค€ ๋ชจ๋“ˆ)์— ์˜ํ–ฅ์„ ๋ฐ›์„ ์ˆ˜ ๋ฐ–์— ์—†๋‹ค. ์ด๋ ‡๊ฒŒ ๋œ๋‹ค๋ฉด ์œ ์ง€๋ณด์ˆ˜๋‚˜ ์œ ์—ฐ์„ฑ ๋“ฑ ๋งŽ์€ ๋ถ€๋ถ„์—์„œ ํšจ๊ณผ์ ์ด์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ถ”์ƒํ™”ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์‹ค์งˆ์  ๊ตฌํ˜„์ฒด๋“ค์˜ ์˜์กด์„ฑ์„ ์ฃผ์ž… ๋ฐ›๋Š”๋‹ค๋ฉด ์ธํ„ฐํŽ˜์ด์Šค์™€ ์˜์กด ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง„ ๊ฐ์ฒด๋Š” ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌํ˜„์ฒด์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์•„ ๋ณ„๋„์˜ ์ˆ˜์ •์„ ๊ฑฐ์น  ํ•„์š” ์—†์ด ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌํ˜„์ฒด๋งŒ ๋ฐ”๊ฟ”์ฃผ๋ฉด ๋œ๋‹ค.

๐Ÿ’ฅ ๋™์  ์–ธ์–ด, ์ •์  ์–ธ์–ด, ๋• ํƒ€์ดํ”„

๐Ÿ’ฅ Stack Frame, Java Capturing

๐Ÿ’ฅ Message Queue

'์‚ถ > F-Lab' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Week 11  (0) 2021.07.16
Week 10  (0) 2021.07.10
Week 9  (0) 2021.07.02
Week 8  (0) 2021.06.25
Week 7  (0) 2021.06.18