๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์Šคํ„ฐ๋””/์˜ค๋ธŒ์ ํŠธ

[์˜ค๋ธŒ์ ํŠธ] 9์žฅ '์œ ์—ฐํ•œ ์„ค๊ณ„'

by moon101 2022. 12. 9.

9์žฅ์—์„œ๋Š” ์ด์ „์— ์„ค๋ช…ํ•œ ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •์˜๋œ ์„ค๊ณ„ ์›์น™์— ๊ทผ๊ฑฐํ•ด ๋‹ค์‹œ ์„ค๋ช…ํ•œ๋‹ค. 

 

์ €๋ฒˆ์ฃผ์— ๋””์ž์ธ ํŒจํ„ด์—์„œ ํŒฉํ† ๋ฆฌ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ณต๋ถ€ํ•  ๋•Œ  ์ดํ•ด๊ฐ€ ์ž˜ ์•ˆ ๋์—ˆ๋Š”๋ฐ, 

์ด๋ฒˆ ์˜ค๋ธŒ์ ํŠธ 9์žฅ์„ ์ฝ์œผ๋ฉด์„œ ์™œ ์ƒ์„ฑํ•˜๋Š” ๋ถ€๋ถ„์„ ๋ถ„๋ฆฌํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์ด์œ ๋ฅผ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. 

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

 

 

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

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

-> ์ปดํŒŒ์ผ ํƒ€์ž„ ์˜์กด์„ฑ์€ ์œ ์ง€ํ•˜๋ฉด์„œ ๋Ÿฐํƒ€์ž„ ์˜์กด์„ฑ์€ ํ™•์žฅ/์ˆ˜์ • ๊ฐ€๋Šฅ

-> ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ๋ชจ๋“  ์š”์†Œ๊ฐ€ ์ถ”์ƒํ™”์— ์˜์กดํ•ด์•ผ ํ•จ.

 

๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ์‚ฌ์šฉ์„ ๋ถ„๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ• (separating use from creation)?

- ๊ฐ์ฒด ์ƒ์„ฑ์€ ํด๋ผ์ด์–ธํŠธ์—์„œ ํ•ด์•ผํ•จ

- ๋˜๋Š” ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ๊ด€๋ จ๋œ ์ฑ…์ž„๋งŒ ์ „๋‹ดํ•˜๋Š” ๋ณ„๋„์˜ ๊ฐ์ฒด ์ถ”๊ฐ€

-> ์ด๋Ÿฐ ๊ฐ์ฒด๋ฅผ Factory๋ผ๊ณ  ๋ถ€๋ฆ„

-> factory๋Š” ๊ฐ์ฒด์˜ ์ƒ์„ฑ ์ฑ…์ž„์„ ํ• ๋‹นํ•  ๋งŒํ•œ ๋„๋ฉ”์ธ ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์„ ๋•Œ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” pure fabrication์ž„

(pure fabrication์€ ์ฑ…์ž„์„ ํ• ๋‹นํ•˜๊ธฐ ์œ„ํ•ด ์ฐฝ์กฐ๋˜๋Š” ๋„๋ฉ”์ธ๊ณผ ๋ฌด๊ด€ํ•œ ์ธ๊ณต์ ์ธ ๊ฐ์ฒด๋ฅผ ์˜๋ฏธํ•œ๋‹ค)

 

์˜์กด์„ฑ ์ฃผ์ž…์ด๋ž€ (Dependency Injection)?

์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด๊ฐ€ ์•„๋‹Œ ์™ธ๋ถ€์˜ ๋…๋ฆฝ์ ์ธ ๊ฐ์ฒด๊ฐ€ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•œ ํ›„ ์ด๋ฅผ ์ „๋‹ฌํ•ด์„œ ์˜์กด์„ฑ์„ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•(p.293)

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

 

1. ์ƒ์„ฑ์ž ์ฃผ์ž…(constructor injection)

2. setter ์ฃผ์ž…(setter injection)

3. ๋ฉ”์„œ๋“œ ์ฃผ์ž…(method injection)

 

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

 

// TODO

์˜์กด์„ฑ ์ฃผ์ž… ๋‹ค์‹œ ์ฝ์–ด๋ณด๊ธฐ

 

์˜์กด์„ฑ ์—ญ์ „ ์›์น™์ด๋ž€ (Dependency Inversion Principle, DIP)?

1. ์ƒ์œ„ ์ˆ˜์ค€์˜ ๋ชจ๋“ˆ์€ ํ•˜์œ„ ์ˆ˜์ค€์˜ ๋ชจ๋“ˆ์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค. ๋‘˜ ๋ชจ๋‘ ์ถ”์ƒํ™”์— ์˜์กดํ•ด์•ผ ํ•œ๋‹ค.
2. ์ถ”์ƒํ™”๋Š” ๊ตฌ์ฒด์ ์ธ ์‚ฌํ•ญ์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค. ๊ตฌ์ฒด์ ์ธ ์‚ฌํ•ญ์€ ์ถ”์ƒํ™”์— ์˜์กดํ•ด์•ผ ํ•œ๋‹ค(p.302).

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

 

๊ทธ๋ฆฌ๊ณ  ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฑด ํ˜‘๋ ฅ๊ณผ ์ฑ…์ž„์ด๋‹ค. ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ฒฐ์ •์€ ๋ชจ๋“  ์ฑ…์ž„์ด ์ž๋ฆฌ๋ฅผ ์žก์€ ํ›„ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ์ •ํ•˜๋Š” ๊ฒƒ์ด ์ ์ ˆํ•˜๋‹ค. 

 

 

// TODO

๋นŒ๋“œ ์‹œ๊ฐ„, ๋ฐฐํฌ์™€ ํŒจํ‚ค์ง€์˜ ๊ด€๊ณ„..? ์žฌ๋ฐฐํฌ, ์žฌ์ปดํŒŒ์ผ

๋Œ“๊ธ€