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

[์˜ค๋ธŒ์ ํŠธ] 8์žฅ '์˜์กด์„ฑ ๊ด€๋ฆฌํ•˜๊ธฐ'

by moon101 2022. 12. 2.

8์žฅ์—์„œ๋Š” ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ๋‹ค๋ฃฌ๋‹ค. 

 

์˜์กด์„ฑ์€ ๋Ÿฐํƒ€์ž„ ์˜์กด์„ฑ๊ณผ ์ปดํŒŒ์ผํƒ€์ž„ ์˜์กด์„ฑ์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. 

 

๋Ÿฐํƒ€์ž„ ์˜์กด์„ฑ(run-time dependency)

- ๊ฐ์ฒด ์‚ฌ์ด์˜ ์˜์กด์„ฑ

 

์ปดํŒŒ์ผํƒ€์ž„ ์˜์กด์„ฑ(compile-time dependency) 

- ํด๋ž˜์Šค ์‚ฌ์ด์˜ ์˜์กด์„ฑ

 

์œ ์—ฐํ•˜๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์„ค๊ณ„๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ปดํŒŒ์ผํƒ€์ž„ ์˜์กด์„ฑ๊ณผ ๋Ÿฐํƒ€์ž„ ์˜์กด์„ฑ์ด ๋‹ฌ๋ผ์•ผ ํ•œ๋‹ค(p.260)

 

๊ทธ๋Ÿผ ์–ด๋–ป๊ฒŒ ์ปดํŒŒ์ผํƒ€์ž„ ์˜์กด์„ฑ๊ณผ ๋Ÿฐํƒ€์ž„ ์˜์กด์„ฑ์„ ๋‹ค๋ฅด๊ฒŒ ํ•  ์ˆ˜ ์žˆ์„๊นŒ?

์˜์กด์„ฑ์„ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด 3๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

 

1. ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์‹œ์ ์— ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ์˜์กด์„ฑ ํ•ด๊ฒฐ

2. ๊ฐ์ฒด ์ƒ์„ฑ ํ›„ setter ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์˜์กด์„ฑ ํ•ด๊ฒฐ

3. ๋ฉ”์„œ๋“œ ์‹คํ–‰ ์‹œ ์ธ์ž๋ฅผ ์ด์šฉํ•ด ์˜์กด์„ฑ ํ•ด๊ฒฐ

 

์—ฌ๊ธฐ์„œ 2๋ฒˆ setter ๋ฉ”์„œ๋“œ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฑด ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ ํ›„์— ํ•„์š”ํ•œ ์˜์กด ๋Œ€์ƒ์„ setter ๋ฉ”์„œ๋“œ๋กœ ์„ค์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์—

๋งŒ์•ฝ ์˜์กด ๋Œ€์ƒ์„ ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด NullPointerException์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ƒ์„ฑ์ž ๋ฐฉ์‹๊ณผ setter ๋ฐฉ์‹์„ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๋ฉด setter ๋ฉ”์„œ๋“œ ๋ฐฉ์‹์˜ ๊ฐ์ฒด ์ƒ์„ฑ ์ดํ›„์—

์˜์กดํ•˜๊ณ  ์žˆ๋Š” ๋Œ€์ƒ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ๊ณผ ์ƒ์„ฑ์ž ๋ฐฉ์‹์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ 

์˜์กด์„ฑ์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์  ๋ชจ๋‘ ์ทจํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

์˜์กด์„ฑ์€ ๋ช…์‹œ์ (explicit dependency)์œผ๋กœ ํ‘œํ˜„๋˜๋Š” ๊ฒƒ์ด ์ข‹์€๋ฐ ์˜์กด์„ฑ์ด ํผ๋ธ”๋ฆญ ์ธํ„ฐํŽ˜์ด์Šค์— ํ‘œํ˜„๋˜์ง€ ์•Š๋Š” 

์ˆจ๊ฒจ์ง„ ์˜์กด์„ฑ(hidden dependency)์˜ ๊ฒฝ์šฐ 

1. ์˜์กด์„ฑ์„ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด ๋‚ด๋ถ€ ๊ตฌํ˜„์„ ํ™•์ธํ•ด์•ผ ํ•˜๊ณ 

2. ํด๋ž˜์Šค๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋‚ด๋ถ€ ๊ตฌํ˜„์„ ์ง์ ‘ ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค๋Š” 

๋‹จ์ ์ด ์กด์žฌํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์˜์กด์„ฑ์€ ํผ๋ธ”๋ฆญ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๋ช…์‹œ์ ์œผ๋กœ ํ‘œํ˜„ํ•ด์•ผ ํ•˜๊ณ , ํผ๋ธ”๋ฆญ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด 

์ปดํŒŒ์ผํƒ€์ž„ ์˜์กด์„ฑ์„ ๋Ÿฐํƒ€์ž„ ์˜์กด์„ฑ์œผ๋กœ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

์ถ”๊ฐ€๋กœ, new ์—ฐ์‚ฐ์ž๋Š” ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ๊ฒฐํ•ฉ๋„๋ฅผ ๋†’์ด๊ธฐ ๋•Œ๋ฌธ์—

์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋กœ์ง๊ณผ ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋กœ์ง์„ ๋ถ„๋ฆฌํ•ด์•ผ ๋œ๋‹ค. ์ฆ‰, ์ƒ์„ฑ์˜ ์ฑ…์ž„์„

๊ฐ์ฒด ๋‚ด๋ถ€๊ฐ€ ์•„๋‹ˆ๋ผ ํด๋ผ์ด์–ธํŠธ๋กœ ์˜ฎ๊น€์œผ๋กœ์จ ์„ค๊ณ„๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. 

 

 

 

๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„, ํ˜‘๋ ฅ์ ์ด๊ณ  ์œ ์—ฐํ•œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์˜์กด์„ฑ์„ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๊ฑธ๊นŒ?

 

1. ์‚ฌ์šฉ๊ณผ ์ƒ์„ฑ์˜ ์ฑ…์ž„์„ ๋ถ„๋ฆฌํ•˜๊ณ ,

2. ์˜์กด์„ฑ์„ ์ƒ์„ฑ์ž์— ๋ช…์‹œ์ ์œผ๋กœ ๋“œ๋Ÿฌ๋‚ด๊ณ ,

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

 

 

// TODO 

์ƒ์„ฑ์ž ์ฒด์ด๋‹ ๋ถ€๋ถ„ ๊ณต๋ถ€(p.274)

์Šคํ„ฐ๋”” ๋•Œ ์„ค๋ช… ๋“ค์Œ

๋Œ“๊ธ€