Skip to content

Latest commit

ย 

History

History
59 lines (43 loc) ยท 2.22 KB

DI(Dependency Injection).md

File metadata and controls

59 lines (43 loc) ยท 2.22 KB

1.DI(Dependency Injection)

๊ฐ์ฒด ๊ฐ„์˜ ์˜์กด ๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋””์ž์ธ ํŒจํ„ด     
DI๋Š” ๊ฐ์ฒด๊ฐ€ ์ง์ ‘ ์ž์‹ ์˜ ์˜์กด์„ฑ์„ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ , ์™ธ๋ถ€์—์„œ ์ฃผ์ž…๋ฐ›๋Š” ๋ฐฉ์‹์œผ๋กœ
์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์ด์— ๋‘ฌ์„œ ํด๋ž˜์Šค ๋ ˆ๋ฒจ์—์„œ๋Š” ์˜์กด๊ด€๊ณ„๊ฐ€ ๊ณ ์ •๋˜์ง€ ์•Š๋„๋ก ํ•˜๊ณ 
๋Ÿฐํƒ€์ž„ ์‹œ์— ๊ด€๊ณ„๋ฅผ ๋™์ ์œผ๋กœ ์ฃผ์ž…ํ•œ๋‹ค.

๊ฐ์ฒด ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ์ฝ”๋“œ์˜ ์œ ์—ฐ์„ฑ๊ณผ ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ์„ ๋†’์ด๋Š” ๋ฐ ๊ธฐ์—ฌํ•œ๋‹ค.    

2.DI ์‚ฌ์šฉ์ด์œ 

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

3.DI ์ปจํ…Œ์ด๋„ˆ

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

4.DI ์˜ˆ์‹œ

4-1.DI๋ฅผ ์‚ฌ์šฉ์•ˆํ•œ์˜ˆ์‹œ

๊ฐ•ํ•œ ๊ฒฐํ•ฉ๋„๋ฅผ ์ดˆ๋ž˜ํ•˜๋ฉฐ, MyRepository๋ฅผ ๋‹ค๋ฅธ ๊ตฌํ˜„์ฒด๋กœ ๋Œ€์ฒดํ•˜๊ธฐ ์–ด๋ ต๋‹ค.
public class MyService {
    private MyRepository myRepository;

    public MyService() {
        this.myRepository = new MyRepository();  // MyRepository๋ฅผ ์ง์ ‘ ์ƒ์„ฑ
    }
}

4-2.DI ์‚ฌ์šฉ

MyRepository์˜ ๋‹ค๋ฅธ ๊ตฌํ˜„์ฒด๋กœ ์‰ฝ๊ฒŒ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋‹ค.
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.stereotype.Repository;

@Repository
public class MyRepository {
}

@Service
public class MyService {
    private final MyRepository myRepository;

    @Autowired
    public MyService(MyRepository myRepository) {
        this.myRepository = myRepository;  // ์˜์กด์„ฑ์„ ์ฃผ์ž…๋ฐ›์Œ
    }
}