๐Ÿง  [๊ฐœ๋… ํ™•์ธ ๋ฌธ์ œ]

Q1. IoC์™€ DI์˜ ์ฐจ์ด๋ฅผ ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•˜๋ผ.

  • ์–ด๋–ค ๊ด€๊ณ„์ธ๊ฐ€?
    • IoC๋Š” ๊ฐ์ฒด์˜ ์ƒ์„ฑ, ์ฝ”๋“œ ์‹คํ–‰ ์ˆœ์„œ ๊ฒฐ์ • ๋“ฑ์˜ ์ œ์–ด๊ถŒ์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹Œ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๊ฐ€์ง€๋Š” ๊ฒƒ์œผ๋กœ, DI๋ผ๋Š” ์˜์กด์„ฑ ์ฃผ์ž… ๋ฐฉ์‹์„ ์ด์šฉํ•ด ๊ตฌํ˜„๊ฐ€๋Šฅํ•œ ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•์ด๋‹ค.
  • ์™œ Spring์—์„œ๋Š” DI๊ฐ€ ์ค‘์š”ํ•œ๊ฐ€?
    • Spring ์—์„œ๋Š” Bean์œผ๋กœ ๋“ฑ๋ก๋œ ๊ฐ์ฒด๋“ค์„ Container ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š”๋ฐ, ์ด๋•Œ ๊ฐ์ฒด๊ฐ„์˜ ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•˜๋Š” ๊ณผ์ •์ด ํ•„์ˆ˜์ ์ด๋‹ค.

[์ •๋‹ต]

  • IoC : ๊ฐ์ฒด ์ƒ์„ฑ, ์˜์กด์„ฑ ์ฃผ์ž…, ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ ๋“ฑ์˜ ์ œ์–ด ๊ถŒํ•œ์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹Œ, ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๊ฐ€์ง€๋Š” ์„ค๊ณ„ ์›์น™
  • DI : IoC๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋กœ, ๊ฐ์ฒด๊ฐ€ ์˜์กดํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜๋Š” ๋Œ€์‹ , ์™ธ๋ถ€์—์„œ ์ฃผ์ž…๋ฐ›๋Š” ๋ฐฉ์‹
  • Spring ์—์„œ DI๊ฐ€ ์ค‘์š”ํ•œ ์ด์œ ? โ†’ ๋А์Šจํ•œ ๊ฒฐํ•ฉ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜์—ฌ, ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ, ์žฌ์‚ฌ์šฉ์„ฑ, ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ธ๋‹ค.

โœ… [OX ๋ฌธ์ œ]

Q2. O / X

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

โ†’ X

Q3. O / X

@Component, @Service, @Repository ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ถ™์ด๋ฉด ํ•ด๋‹น ํด๋ž˜์Šค๋Š” ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด Bean์œผ๋กœ ์ž๋™ ๋“ฑ๋ก๋œ๋‹ค.

โ†’ O


๐Ÿ” [์ฝ”๋“œ ๊ธฐ๋ฐ˜ ๋ฌธ์ œ]

Q4. ์•„๋ž˜ ์ฝ”๋“œ์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋Š” ๋ฌด์—‡์ด๋ฉฐ, ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ์ˆ˜์ •ํ•ด์•ผ ํ• ๊นŒ?

public class OrderService {
    private UserRepository userRepository;
 
    public OrderService() {
        this.userRepository = new UserRepository();
    }
}

โ†’ UserRepository ์˜ ๊ตฌํ˜„์ฒด๋ฅผ ๋ฐ”๊พธ๊ณ  ์‹ถ์„ ๋•Œ, ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•ด์ค˜์•ผ ํ•œ๋‹ค. ์ˆ˜์ •ํ•  ๋ถ€๋ถ„์ด ์ ๋‹ค๋ฉด, ํ˜„์žฌ ์ฝ”๋“œ๊ฐ€ ๊ตฌํ˜„์ฒด๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค๋Š” ์ ์—์„œ ๊ฐ€๋…์„ฑ์€ ๋†’์•„์งˆ ์ˆ˜ ์žˆ์œผ๋‚˜, ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์ง€๋ฉด ์‹ค์ˆ˜์˜ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ง.

UserRepository ํด๋ž˜์Šค๋ฅผ Bean ์œผ๋กœ ๋“ฑ๋กํ•˜์—ฌ, ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ด€๋ฆฌํ•˜์—ฌ DI ๋ฅผ ํ†ตํ•ด ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.


๐Ÿ”„ [์ ์šฉ ์‘์šฉ ๋ฌธ์ œ]

Q5. ๋‹ค์Œ ์ค‘ Spring์—์„œ DI๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์˜ณ์ง€ ์•Š์€ ๊ฒƒ์€?

a) ์ƒ์„ฑ์ž ์ฃผ์ž…

b) ํ•„๋“œ ์ฃผ์ž…

c) Setter ์ฃผ์ž…

d) ์ธํ„ฐํŽ˜์ด์Šค ์ฃผ์ž…

โ†’ d


[๋ฉด์ ‘ ๋Œ€๋น„ ์งˆ๋ฌธ]

  1. Spring์—์„œ IoC์™€ DI๋Š” ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅด๊ณ  ์–ด๋–ค ๊ด€๊ณ„์ธ๊ฐ€์š”?

    • IoC๋Š” ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ์˜์กด์„ฑ ๊ด€๋ฆฌ ๊ฐ™์€ ์ œ์–ด๊ถŒ์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹Œ, ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋‹ด๋‹นํ•˜๋Š” ์„ค๊ณ„ ์›์น™์ž…๋‹ˆ๋‹ค.
    • DI๋Š” IoC๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ๋ฐฉ์‹์œผ๋กœ, ๊ฐ์ฒด๊ฐ€ ์˜์กดํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜๋Š” ๋Œ€์‹ , ์™ธ๋ถ€์—์„œ ์ฃผ์ž…๋ฐ›๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
    • ๋”ฐ๋ผ์„œ, IoC๋Š” ์„ค๊ณ„ ์›์น™์ด๊ณ , DI๋Š” ์ด๋ฅผ ์œ„ํ•œ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์Šคํ”„๋ง์€ IoC ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ†ตํ•ด DI๋ฅผ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ ๊ฐ์ฒด ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ , ํ…Œ์ŠคํŠธ์™€ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์‰ฝ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  2. ์˜์กด์„ฑ ์ฃผ์ž… ๋ฐฉ์‹ ์ค‘ ์ƒ์„ฑ์ž ์ฃผ์ž…์ด ๊ถŒ์žฅ๋˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?

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

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