๋ชฉ๋กDi (2)

๐ŸŒฑ → ๐ŸŒณ

[Spring] IoC, DI๋ž€?

IoC(Inversion of Control)๋ž€? IoC๋Š” Inversion of Control์˜ ์ค„์ž„ ๋ง๋กœ, ์ œ์–ด์˜ ์—ญ์ „์ด๋ผ๋Š” ๋œป์ด๋‹ค. ํ”„๋กœ๊ทธ๋žจ์˜ ํ๋ฆ„์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ œ์–ดํ•˜์ง€ ์•Š๊ณ , ํ”„๋กœ๊ทธ๋žจ์ด๋‚˜ ํ”„๋ ˆ์ž„์›ค์ด ์ง์ ‘ ์ œ์–ด๋ฅผ ํ•œ๋‹ค๋Š” ๋ง์ด๋‹ค. ์ปดํฌ๋„ŒํŠธ์˜ ์˜์กด ๊ด€๊ณ„ ๊ฒฐ์ •(Component dependency resolution), ๊ฐ์ฒด์˜ ์ƒ๋ช… ์ฃผ๊ธฐ(life cycle)์™€ ๊ฐ™์€ ์ผ์„ ๋Œ€์‹  ์ˆ˜ํ–‰ํ•ด์ค€๋‹ค. ํ”ํžˆ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›ค์„ ์ด์šฉํ•ด์„œ ๊ฐœ๋ฐœํ•  ๋•Œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ Bean์„ ์‚ฌ์šฉ ํ•  ๊ฒƒ์ด๋‹ค. ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด, ์š”์ฒญ์— ์•Œ๋งž์€ Bean์„ ์ƒ์„ฑํ•ด์„œ ํ•„์š”ํ•œ ์ผ์„ ํ•˜๋„๋ก ์‹œํ‚จ๋‹ค. ํ•ด๋‹น Bean์ด ํ•  ์ผ์„ ๋งˆ์น˜๋ฉด Bean์„ ์‚ญ์ œํ•ด์ค€๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Ÿฐ ๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ์†Œ๋ฉธ์ด ์–ด๋–ป๊ฒŒ ์ด๋ฃจ์–ด์ง€๋Š”์ง€ ์•Œ ํ•„์š”๊ฐ€ ์—†๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ง์ ‘ ์ œ์–ด ํ• ..

Server/Java & Spring 2023. 3. 22. 10:21
[Spring] ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection)์—์„œ final ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

private final ProductService productservice ๋ฌธ๋“ ์˜์กด์„ฑ ์ฃผ์ž…์„ ํ•˜๋‹ค๊ฐ€ final์„ ์จ์ฃผ๋Š” ์ด์œ ๊ฐ€ ๊ถ๊ธˆํ•ด์กŒ๋‹ค . ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection)์—์„œ final ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ๋ถˆ๋ณ€์„ฑ(Immutability) final ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•ด๋‹น ๋ณ€์ˆ˜๊ฐ€ ํ•œ ๋ฒˆ ์ดˆ๊ธฐํ™”๋œ ์ดํ›„์—๋Š” ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค. ์ด๋Š” ๊ฐ์ฒด์˜ ์ƒํƒœ๋ฅผ ๋ถˆ๋ณ€ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ณ , ๊ฐ์ฒด์˜ ๋ถˆ๋ณ€์„ฑ(Immutability)์„ ๋ณด์žฅํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋œ๋‹ค. ์˜์กด์„ฑ ์ฃผ์ž…์—์„œ๋Š” ์ฃผ์ž…๋œ ๊ฐ์ฒด์˜ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— final ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด์˜ ๋ถˆ๋ณ€์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. ์•ˆ์ •์„ฑ(Safety) final ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ณ€์ˆ˜์˜ ์ดˆ๊ธฐํ™” ์—ฌ๋ถ€๋ฅผ..

Server/Java & Spring 2023. 3. 22. 10:17