Spring
Spring์ด ๊ฐ์ง๊ณ ์๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋ฅ๋ ฅ
์ํ๋ ๋ถํ(Dependency)์ด ๋ฌด์์ธ์ง, ์ด๋ป๊ฒ ๊ฒฐํฉ(Injection)๋์์ผ๋ฉด ํ๋์ง ์ค์ ํด์ฃผ๋ฉด Spring์ด DIํด์ค๋ค
DI(Dependency Injection)
(=๋ถํ ์กฐ๋ฆฝ)
ํ๋ก๊ทธ๋จ์ ๊ฐ์ฒด์งํฅ์ผ๋ก ๋ง๋ค๊ฒ ๋ ๊ฒฝ์ฐ, ๊ฐ์ฒด๋ค์ ์กฐ๋ฆฝ๊ด๊ณ๋ก ๋ง๋ค์ด์ง๊ฒ ๋๋ค.
A๋ผ๋ ํด๋์ค๊ฐ B๋ผ๋ ํด๋์ค๋ฅผ ๊ฐ์ฒดํ ํด์ ์ฌ์ฉํ๊ณ ์๋ค๊ณ ํ ๋ ๋๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
- 1.Composition has a (์ผ์ฒดํ)A๊ฐ ์์ฑ๋ ๋ B์ ๊ฐ์ฒด๋ฅผ ์์ฑํด์ ๊ฐ์ง๋ค.
์ด ๊ฒฝ์ฐ A๊ฐ B๋ฅผ ์ผ์ฒดํ์ผ๋ก ๊ฐ์ก๋ค๊ณ ํด์ Composition(์ผ์ฒดํ) has a ๊ด๊ณ๋ผ๊ณ ํ๋ค.
์ด๋ B๋ฅผ A์ ๋ถํ์ด๋ผ๊ณ ํ ์ ์๋๋ฐ, ์ด B๋ฅผ Dependency(๋ถํ)๋ผ๊ณ ํ๋ค.
class A{ private B b; public A(){ b = new B(); //A๊ฐ B๋ฅผ ์ง์ ์์ฑ } }
- 2.Association has a (์กฐ๋ฆฝํ)A๊ฐ B๋ฅผ ์ง์ ์์ฑํ์ง ์๋๋ค.
์ธ๋ถ์์ ์์ฑํด์ ๊ทธ ์์ฑ์ setB๋ก settingํ์ฌ ์ฌ์ฉํ๋ค.
์ด ๊ฒฝ์ฐ ์กฐ๋ฆฝํ ๊ด๊ณ๋ผ๊ณ ํ๋ค. class A{ private B b; public A(){ // b = new B(); } public void setB(B b){ this.b = b; } }
์ผ์ฒดํ๋ณด๋ค ์กฐ๋ฆฝํ์ด ๊ฒฐํฉ๋ ฅ์ด ํจ์ฌ ๋ ๋ฎ๊ณ ๋ค๋ฅธ ๋ถํ์ผ๋ก ๋ฐ๊ฟ ๋ผ์ธ ์ ์๋ค
- 1๋ฒ ์ผ์ฒดํ์ ๊ฒฝ์ฐ
A a = new A();
์ฌ์ฉ์ ์ ์ฅ์์ A์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๋ฉด ๊ทธ ์์ ๋ถํ์ด ๋ญ๊ฐ ์๋์ง ์ ๋ชจ๋ฅด๊ฒ ๋๊ณ ๋ถํ์ ๋ฐ๊ฟ ๋ผ์ธ ์ ์๋ค.
- 2๋ฒ ์กฐ๋ฆฝํ์ ๊ฒฝ์ฐ
B b = new B();
A a = new A();
a.setB(b);
A์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ A๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ถํ B(Dependency)๋ฅผ ๋ง๋ค์ด์ ๊ฝ์์ค๋ค.(Injection)(=Dependency Injection)
์ฅ์ : ๋ถํ์ ๋ฐ๊ฟ ๋ผ์ธ ์ ์๋ค.
๋จ์ : ๋ถํ์ ์กฐ๋ฆฝํด์ผ ํ๋ ๋ถํธํจ์ด ์๋ค.
Injection์ ๋๊ฐ์ง ๋ฐฉ๋ฒ
- Setter Injection
B b = new B();
A a = new A();
a.setB(b);
- Construction Injection
B b = new B();
A a = new A(b);
IoC Container
์ฌ๋ฌ๊ฐ์ง ๋ถํ๋ค์ ์ฃผ๋ฌธ์์ ์์ฑํด์ Spring์๊ฒ ์ ๊ณตํ๋ฉด ๋ถํ์ ์์ฑํ๊ณ ์กฐ๋ฆฝํด ์ค๋ค.
์ฃผ๋ฌธ์ ์์ฑ ๋ฐฉ๋ฒ ๋ ๊ฐ์ง
- xmlํ์ผ
- Annotation
๊ฐ์ฒด๋ฅผ ์์ฑํด์ ๊ทธ๊ฒ๋ค์ ๋ด์ ์ ์๋ ๊ทธ๋ฆ์ด ํ์ํ๋ฐ ์ด๋ฅผ Spring์์ Container ๋ผ๊ณ ํ๋ค.
- IoC Container๋ผ๊ณ ํ๋ ์ด์
์ ์ฌ์ง๊ณผ ๊ฐ์ด ์ผ์ฒดํ์ผ๋ก ์ ํ์ ๋ง๋ค๊ฒ ๋๋ฉด Aํด๋์ค๊ฐ Bํด๋์ค๋ฅผ ๋ง๋ค๊ณ , Bํด๋์ค๊ฐ Cํด๋์ค๋ฅผ, Cํด๋์ค๊ฐ Dํด๋์ค๋ฅผ ๋ง๋ค๊ฒ ๋๋ค.
์ฆ ์์ฐจ์ ์ผ๋ก ๊ฐ์ฒด๊ฐ ๋ง๋ค์ด์ง๋ค.
๋ฐ๋ฉด ์ ์ฌ์ง๊ณผ ๊ฐ์ด ์กฐ๋ฆฝํ์ Dํด๋์ค, Cํด๋์ค, Bํด๋์ค, Aํด๋์ค ์์ผ๋ก ๋ง๋ค์ด ์ง๋ค.
์ฆ ์ญ์(Inversion)์ผ๋ก ๋ง๋ค์ด์ง๋ค.
์์ ๊ฐ์ ์ด์ ๋ก IoC(Inversion of Control) Container๋ผ๊ณ ํ๋ค.
๋จ์ํ ๋ถํ๋ง ๋ด๊ณ ์๋ค๋ฉด Dependency Container๋ผ๊ณ ํ ํ ๋ฐ IoC Container ๋ผ๊ณ ํ๋ ์ด์ ๋ ๊ฒฐํฉ๊น์ง ๋์ ๋ด๊ฒจ์ง๋ค๋ ์๋ฏธ๋ฅผ ์ข ๋ ๊ฐํ๊ฒ ๋ํ๋ด๊ธฐ ์ํด์ ์ด๋ค.
'๐๋ฐฑ์๋ : BackEnd' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring]@Autowired๋์๋ฐฉ์๊ณผ @Qualifier (0) | 2023.06.19 |
---|---|
[Spring]์ด๋ ธํ ์ด์ ์ ์ด์ฉํ ๋ ์ฅ์ ๊ณผ @Autowired๋ฅผ ์ด์ฉํ DI (0) | 2023.06.19 |
[Spring]์ฝ๋ ์ ์์ฑ๊ณผ DI (0) | 2023.06.19 |
[Spring]DI ์ง์์ (0) | 2023.06.19 |
[Spring] ์์ (0) | 2023.06.19 |