ΰ­¨β”ˆβ”ˆβ”ˆ Web β”ˆβ”ˆβ”ˆΰ­§/β†˜ SpringBoot

[Spring] μ˜μ‘΄μ„± μ£Όμž… (DI)

λΉ΅λΉ΅μƒˆ 2021. 3. 24. 14:17

 

μ˜μ‘΄μ„± μ£Όμž… 방법

1) Constructor (μƒμ„±μž) ꢌμž₯

public class Test {
	private final LoginService loginService;
    private final BoardService boardService;
    
    @Autowired
    public Test(LoginService loginService, BoardService boardService) {
    	this.loginService = loginService;
        this.boardService = boardService;
    }
}

- ν•„μˆ˜μ μΈ μ˜μ‘΄μ„± μ£Όμž…μ— μœ μš©ν•˜λ‹€.

- final을 μ„ μ–Έν•  수 μžˆμœΌλ―€λ‘œ 객체가 λΆˆλ³€μ΄λ‹€.

- ν…ŒμŠ€νŠΈμ½”λ“œ μž‘μ„±μ— μš©μ΄ν•˜λ‹€.

 

2) Setter

public class Test {
	private LoginService loginService;
    private BoardService boardService;
    
    @Autowired
    public void setLoginService (LoginService loginService) {
    	this.loginService = loginService;
    }
    
    @Autowired
    public void setBoardService (BoardService boardService) {
    	this.boardService = boardService;
    }
}

- 상황에 따라 μ˜μ‘΄μ„± μ£Όμž…μ΄ κ°€λŠ₯ν•˜λ‹€.

 

3) Field

public class Test {
	@Autowired
    private LoginService loginService;
    
    @Autowired
    private BoardService boardSerivce;
}

- final을 μ„ μ–Έν•  수 μ—†λ‹€. λ”°λΌμ„œ 객체가 λ³€ν•  수 μžˆλ‹€.

 

μƒμ„±μž μ£Όμž… 방법을 ꢌμž₯ν•˜λŠ” 이유

1) μˆœν™˜ μ°Έμ‘°λ₯Ό λ°©μ§€ν•œλ‹€.

- setterμ£Όμž… 방법은 μ£Όμž…λ°›μœΌλ €λŠ” 빈의 μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜μ—¬ λΉˆμ„ μ°Ύκ±°λ‚˜ 빈 νŒ©ν† λ¦¬μ— λ“±λ‘ν•œλ‹€. κ·Έ 후에 μƒμ„±μž μΈμžμ— μ‚¬μš©ν•˜λŠ” λΉˆμ„ μ°Ύκ±°λ‚˜ λ§Œλ“ λ‹€. κ·Έ ν›„ μ£Όμž…ν•˜λ €λŠ” 빈 객체에 μˆ˜μ •μžλ₯Ό ν˜ΈμΆœν•΄ μ£Όμž…ν•œλ‹€.

- field μ£Όμž…μ€ setter μ£Όμž… 방식과 λ™μΌν•˜λ‹€. λ¨Όμ € λΉˆμ„ μƒμ„±ν•œ 후에 ν•„λ“œμ— λŒ€ν•΄μ„œ μ£Όμž…ν•œλ‹€.

- μƒμ„±μž μ£Όμž…μ€ μƒμ„±μžλ‘œ 객체λ₯Ό μƒμ„±ν•˜λŠ” μ‹œμ μ— ν•„μš”ν•œ λΉˆμ„ μ£Όμž…ν•œλ‹€. μƒμ„±μžμ˜ μΈμžμ— μ‚¬μš©λ˜λŠ” λΉˆμ„ μ°Ύκ±°λ‚˜ 빈 νŒ©ν† λ¦¬μ—μ„œ λ§Œλ“ λ‹€. κ·Έ 후에 찾은 인자 빈으둜 μ£Όμž…ν•˜λ €λŠ” 빈의 μƒμ„±μžλ₯Ό ν˜ΈμΆœν•œλ‹€. μ¦‰, λ¨Όμ € λΉˆμ„ μƒμ„±ν•˜μ§€ μ•ŠλŠ” 것이닀.

 

객체 생성 μ‹œμ μ— λΉˆμ„ μ£Όμž…ν•˜κΈ° λ•Œλ¬Έμ— μ„œλ‘œ μ°Έμ‘°ν•˜λŠ” 객체가 μƒμ„±λ˜μ§€ μ•Šμ€ μƒνƒœμ—μ„œ λΉˆμ„ μ°Έμ‘°ν•  λ•Œ μˆœν™˜ μ°Έμ‘° 였λ₯˜κ°€ λ°œμƒν•œλ‹€. λ”°λΌμ„œ μˆœν™˜ μ°Έμ‘°λ˜λŠ” 섀계λ₯Ό 사전에 막기 μœ„ν•΄ μƒμ„±μž μ£Όμž… 방식을 μ“΄λ‹€.

 

2) ν…ŒμŠ€νŠΈμ— μš©μ΄ν•˜λ‹€.

- ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μ’€ 더 νŽΈλ¦¬ν•˜κ²Œ μž‘μ„±ν•  수 μžˆλ‹€.

 

3) λΆˆλ³€μ„±

- ν•„λ“œλ₯Ό final둜 μ„ μ–Έν•  수 μžˆλ‹€.