[Spring] ์์กด์ฑ ์ฃผ์ (DI, Dependency Injection)์ ์ธ๊ฐ์ง ๋ฐฉ๋ฒ
Spring์ @Autowired ์ ๋ ธํ ์ด์ ์ ์ด์ฉํ ๋ค์ํ ์์กด์ฑ ์ฃผ์ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ค.
@Autowired ์ ๋ ธํ ์ด์ ์ Spring์๊ฒ ์์กด์ฑ์ ์ฃผ์ ํ๋ผ๋ ์ง์์ ์ญํ ๋ก ์ฐ์ด๋๋ฐ ์์ฑ์, ํ๋, ์ธํฐ์ ๋ถ์ผ ์ ์๋ค.
1. ์์ฑ์ ์ฃผ์
1
2
3
4
5
6
7
8
9
|
@Component
public class SampleController {
private SampleRepository sampleRepository;
@Autowired
public SampleController(SampleRepository sampleRepository) {
this.sampleRepository = sampleRepository;
}
}
|
cs |
์ด๋ ๊ฒ ์์ฑ์์ @Autowired ์ ๋ ธํ ์ด์ ์ ๋ถ์ฌ ์์กด์ฑ์ ์ฃผ์ ๋ฐ์ ์ ์๋ค.
Spring 4.3๋ถํฐ๋ ํด๋์ค์ ์์ฑ์๊ฐ ํ๋์ด๊ณ ๊ทธ ์์ฑ์๋ก ์ฃผ์ ๋ฐ์ ๊ฐ์ฒด๊ฐ ๋น์ผ๋ก ๋ฑ๋ก๋์ด ์๋ค๋ฉด ์์ฑ์ ์ฃผ์ ์์ @Autowired๋ฅผ ์๋ตํ ์ ์๋ค.
2. ํ๋ ์ฃผ์
1
2
3
4
5
|
@Component
public class SampleController {
@Autowired
private SampleRepository sampleRepository;
}
|
cs |
๋ณ์ ์ ์ธ๋ถ์ @Autowired ์ ๋ ธํ ์ด์ ์ ๋ถ์ธ๋ค.
3. Setter ์ฃผ์
1
2
3
4
5
6
7
8
9
|
@Component
public class SampleController {
private SampleRepository sampleRepository;
@Autowired
public void setSampleRepository(SampleRepository sampleRepository) {
this.sampleRepository = sampleRepository;
}
}
|
cs |
Setter ๋ฉ์๋์ @Autowired ์ ๋ ธํ ์ด์ ์ ๋ถ์ธ๋ค.
์ด ์ธ๊ฐ์ ์ฝ๋๋ ๋ชจ๋ ๋์ผํ๊ฒ SampleController์ SampleRepository๋ฅผ ์ฃผ์ ํ๋๋ก ํ๋ค.
4. ์์ฑ์, ํ๋, Setter ์ฃผ์ ์ค ์ด๋ค ๋ฐฉ๋ฒ์ ํํ ๊ฒ์ธ๊ฐ?
Spring framework reference์์ ๊ถ์ฅํ๋ ๋ฐฉ๋ฒ์ ์์ฑ์๋ฅผ ํตํ ์ฃผ์ ์ด๋ค.
์์ฑ์๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์ข์ ์ด์ ๋ ํ์์ ์ผ๋ก ์ฌ์ฉํด์ผํ๋ ์์กด์ฑ ์์ด๋ ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ง ๋ชปํ๋๋ก ๊ฐ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
SampleController๊ฐ SampleRepository ์์ด๋ ์ ๋๋ก ๋์ํ ์ ์๋ค๋ฉด SampleController ์ ์ฅ์์ SampleRepository๋ ๋ฐ๋์ ์์ด์ผ ํ๋ ๊ฐ์ฒด์ด๋ค.
๊ทธ๊ฒ์ ๊ฐ์ ํ ์ ์๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ด ์์ฑ์ ์ฃผ์ ๋ฐฉ๋ฒ์ ์ฐ๋๊ฒ์ด๋ค.
5. ํ๋, Setter ์ฃผ์ ๋ฐฉ๋ฒ์ ํ์์ฑ
๐ ์ํ ์ฐธ์กฐ(Circular Dependency)
A๊ฐ B๋ฅผ ์ฐธ์กฐํ๊ณ B๊ฐ A๋ฅผ ์ฐธ์กฐํ๋ ์ํ
A ํด๋์ค์ B ํด๋์ค๊ฐ ์ํ ์ฐธ์กฐ ๊ด๊ณ์ด๊ณ ๋ ๋ค ์์ฑ์ ์ฃผ์ ์ ์ฌ์ฉํ๋ค๋ฉด A์ B์ค ์ด๋ค ์ธ์คํด์ค๋ ์์ฑํ ์ ์๊ณ ๊ฒฐ๊ณผ์ ์ผ๋ก ์ดํ๋ฆฌ์ผ์ด์ ์ด ์คํ์กฐ์ฐจ ๋์ง ์๋๋ค.
๊ฐ๊ธ์ ์ด๋ฉด ์ํ ์ฐธ์กฐ๋ฅผ ํผํ๋๊ฒ ์ข์ง๋ง ์ด์ฉ์ ์๋ ์ํฉ์ด๋ผ๋ฉด ํ๋๋ setter ์ฃผ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์๋ค.
References
์ธํ๋ฐ - ๋ฐฑ๊ธฐ์ ๋์ ์์ ๋ก ๋ฐฐ์ฐ๋ ์คํ๋ง ์ ๋ฌธ(๊ฐ์ ํ)
'Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] ์คํ๋ง PSA (0) | 2020.03.01 |
---|---|
[Spring] ์คํ๋ง AOP ๊ฐ๋ ์ดํด ๋ฐ ์ ์ฉ ๋ฐฉ๋ฒ (4) | 2020.02.29 |
[Spring] ์คํ๋ง ๋น(Bean)์ ๊ฐ๋ ๊ณผ ์์ฑ ์๋ฆฌ (6) | 2020.02.28 |
[Spring] ์คํ๋ง ์์ PetClinic ํ๋ก์ ํธ ๋ถ์ ๋ฐ ๊ธฐ๋ฅ ๋ณ๊ฒฝ (0) | 2020.02.28 |
[Spring] ์คํ๋ง ์์ ํ๋ก์ ํธ PetClinic ๋น๋ ๋ฐ ์คํํ๊ธฐ (0) | 2020.02.27 |
๋๊ธ