์คํ๋ง ์์กด์ฑ ์ฃผ์ (Spring Dependency Injection)
์คํ๋ง์์ ์์กด์ฑ์ ์ฃผ์ ํ๋ ๋ฐฉ๋ฒ์ ํ์ฌ ์ธ ๊ฐ์ง๊ฐ ์์ต๋๋ค.
์ฒซ ๋ฒ์งธ๋ ์์ฑ์ ์ฃผ์ ๋ฐฉ์์ด๊ณ ๋ ๋ฒ์งธ๋ Setter ์ฃผ์ ๋ฐฉ์, ๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ผ๋ก Field ์ฃผ์ ๋ฐฉ์์ด ์์ต๋๋ค.
์์๋๋ก ํ๋ฒ ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
1. ์์ฑ์ ์ฃผ์ (Constructor Based Dependency Injection)
๋ง ๊ทธ๋๋ก ์์ฑ์์ @Autowired๋ก ๋ค๋ฅธ ๋น์ ์ฃผ์ ํ๋ ๋ฐฉ์์ ๋๋ค.
@Controller
public class MyController {
private MyService myService;
@Autowired
public MyController(MyService myService) {
this.myService = myService;
}
}
์ฃผ์ ํด์ผํ๋ ๋น์ด ๋ง์ ๊ฒฝ์ฐ ์์ฑ์ ์์ฒด๊ฐ ์ปค์ง๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฐ๊ฒฝ์ฐ ๋ง์ฝ lombok ์ ์ฌ์ฉํ๋ค๋ฉด ์๋์ฒ๋ผ ์์ฑํ ์ ์์ต๋๋ค.
@Controller
@RequiredArgsConstructor
public class MyController {
private final MyService myService;
}
@RequiredArgsConstructor ์ด๋ ธํ ์ด์ ์ class ๋ ๋ฒจ์ ๋ถ์ฌ์ฃผ๊ณ ์ฃผ์ ํ ๋น์ final ํค์๋๋ฅผ ๋ถ์ฌ์ฃผ๋ฉด lombok์์ ์๋์ผ๋ก ์์ฑ์ ์ฃผ์ ์ ์ด์ฉํ์ฌ ๋น๋ค์ ์ฃผ์ ํด์ค๋๋ค. ํ์ํ ๋น๋ค์ ๋ชจ๋ final ํค์๋๋ฅผ ๋ถ์ฌ์ ํ๋๋ก ์ถ๊ฐ๋ง ํด์ฃผ๋ฉด ๋์ฃ .
2. Setter ์ฃผ์ (Setter Based Dependency Injection)
Setter ๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ ์ฃผ์ ํ๋ ๋ฐฉ์์ด์ฃ .
@Controller
public class MyController {
private MyService myService;
@Autowired
public void setMyService(MyService myService) {
this.myService = myService;
}
}
ํน์ดํ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ๋ ์ด ๋ฐฉ์์ ๊ฑฐ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋ชป๋ดค๋ค์
3. Field ์ฃผ์ (์ฌ์ฉํ์ง ๋ง์ธ์)
์์ ๋ถํฐ ๋ง์ด ์ฌ์ฉ๋๋ ๋ฐฉ์์ ๋๋ค. ํ์ง๋ง ์คํ๋ง์์ ๊ถ๊ณ ํ์ง ์๋ ๋ฐฉ์์ด๊ธฐ๋ ํ์ฃ .
@Controller
public class MyController {
@Autowired
private MyService myService;
}
ํ๋ ์ฃผ์ ๋ฐฉ์์ ๊ณต์๋ฌธ์์๋ ์๊ฐ์กฐ์ฐจ ํ๊ณ ์์ง ์์ต๋๋ค. ๊ณต์๋ฌธ์์๋ ๋ ๊ฐ์ง ๋ฐฉ์๋ง ์๋ค๊ณ ์ค๋ช ํฉ๋๋ค. ์์ฑ์ ์ฃผ์ ๋ฐฉ์๊ณผ setter ์ฃผ์ ๋ฐฉ์์ด์ฃ . ๊ทธ ์ด์ ๋ ํ๋ ์ฃผ์ ์ ์ฌ์ฉํ๊ฒ๋๋ฉด ์ํ์ฐธ์กฐ ๋ฌธ์ ๋ฅผ ์ฐํํ ์ ์๊ฒ๋์ด ์ํ์ฐธ์กฐ๋ฅผ ๊ณ ๋ คํ์ง ์๊ณ ๊ฐ๋ฐ์ ํ๊ฒ๋๊ณ , ๊ทธ๋ ๊ฒ ์ค๊ณ๋ ํด๋์ค๋ ํ๋ ์ด์์ ๊ธฐ๋ฅ์ ํ๊ฒ๋์ด ํ๋์ ์ฑ ์๋ง ๊ฐ์ ธ์ผ ํ๋ค๋ Single Responsibility ์์น์ ์๋ฐฐ๋ ๊ฐ๋ฅ์ฑ์ด ๋์์ง๊ฒ๋์ฃ . ๋ ๋ค๋ฅธ ์ฌ๋ฌ ๋จ์ ๋ค์ ๋ํด์ stackoverflow๋ฅผ ์ฐธ๊ณ ํ์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. ๋ง์ฝ ํ๋ ์ฃผ์ ์ ์ฌ์ฉํ๊ณ ๊ณ์๋ค๋ฉด ์์ฑ์ ์ฃผ์ ๋ฐฉ์์ผ๋ก ๋ฐ๊ฟ์ฃผ์ธ์. ๊ทธ๋ฌ๋ฉด ์ํ์ฐธ์กฐ๋ฅผ ์ฐพ์๋ผ ์ ์๊ณ ์ํ์ฐธ์กฐ ๊ณ ๋ฆฌ ์์ ์๋ ํด๋์ค๋ค์ ์ดํด๋ณด๋ฉด Single Responsibility ์์น์ ์๋ฐฐํ๋ ํด๋์ค๊ฐ ๋ณด์ผ๊ฒ๋๋ค. ๊ทธ๋ฐ ๊ฒ๋ค์ ํด๋์ค ๋ถ๋ฆฌ๋ฅผ ํตํด ๊ฐ์ ํด์ฃผ์๋ฉด ๋ฉ๋๋ค.
์ฐธ๊ณ ๋ฌธ์
docs.spring.io/spring-framework/docs/current/reference/html/core.html#beans-dependencies
stackoverflow.com/questions/39890849/what-exactly-is-field-injection-and-how-to-avoid-it
'๐ป Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[5๋ถ ์ฝ๋ฉ] Spring4 + JCache (feat. Ehcache) (0) | 2020.12.17 |
---|---|
์คํ๋ง ์ํ์ฐธ์กฐ ๋ฌธ์ ํด๊ฒฐํ๊ธฐ (How to avoid circular reference) (0) | 2020.12.11 |
[์๋ฃ๊ตฌ์กฐ] AVL ํธ๋ฆฌ ํ์ ํ๊ธฐ (rotation of AVL tree) (1) | 2020.12.04 |
[์๋ฃ๊ตฌ์กฐ] AVL ํธ๋ฆฌ ํน์ง ๋ฐ ๋กํ ์ด์ ๊ธฐ์ค (1) | 2020.11.29 |
[AWS] ES์ ์ฐ๋๋ ํค๋ฐ๋ ์๋ฌ (Unable to find saved objects) (0) | 2020.11.28 |