2023. 3. 14. 15:15ใSpring
IOC์ DI
์ด๋ ํ ๋ ์คํ ๋์์ ์๋ฆฌ๋ฅผ ๋ง๋๋ ๊ฒ์ผ๋ก ์๋ก ๋ค๋ฉด ์๋์ ๊ฐ๋ค.
package test;
public class Restaurant {
private Ch chef = new Chef();
//private Ch chef = new SuperChef(); ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ ์๋ฆฌ์ฌ๋ง๋ค ํด๋น๋๋ ํด๋์ค๋ง ๋ฐ๊พธ๋ฉด ๋จ.
//๊ทธ๋ฌ๋ ์ด์ฉ ์ ์์ด ์ด๋ค ๊ฐ์ฒด๋ฅผ ์ธ ์ง๋ ๊ฐ๋ฐ์(๊ฐ์ฒด๋ฅผ ๋ง๋๋ ์ฃผ์ฒด)๊ฐ ์ ํจ. >> ๊ฒฐํฉ๋ ์๊น
//๊ฐ์ฒด ์์ฑ์ ์คํ๋ง์ด ๋์ ํด์ฃผ๋ฉด ๊ฒฐํฉ๋ ↓
//์ด ์ ์๋ฅผ IOC(Inversion Of Control) : ์ ์ด์ ์ญ์ ์ด๋ผ๊ณ ํจ
//DI(Dependency Injection) ์์กด์ฑ ์ฃผ์
: IOC๋ฅผ ์คํํ ๊ฐ๋
(Spring์ ์์กด์ฑ ์ฃผ์
์ ํตํด ๊ฐ์ฒด๋ฅผ ์์ฑํด์ค)
public void serving() {
//chef์ ๋ฉ์๋ ์ด๋ฆ๋ฅผ ๋ฐ๊พธ๋ฉด ๋ ์คํ ๋์์ ํธ์ถํ ๋ฉ์๋์ด๋ฆ๋ ๋น์ฐํ ๋ฐ๊ฟ์ผํจ
//์๋ฆฌ์ฌ๊ฐ ๋ฌ๋ผ์ ธ์ ์๋ฆฌ๋ฐฉ๋ฒ์ด ๋ฐ๋์ด๋ ์์ ํด์ผ ํจ. >> ๊ฒฐํฉ๋ ↑
//์ธํฐํ์ด์ค๋ฅผ ์ฐ๋ฉด ์๋ฆฌ์ฌ๊ฐ ๋ฐ๋์ด๋ ์๋ฆฌ๋ ๋์ผํ๊ธฐ ๋๋ฌธ์ ๊ฒฐํฉ๋ ๋ด๋ ค๊ฐ
chef.cooking();
System.out.println("์์์ ์๋นํฉ๋๋ค.");
}
}
-
package test;
//๊ณตํต๋ ์๋ฆฌ ๊ธฐ๋ฅ(์กฐ๊ฑด) ๊ตฌํํ ์ ์๊ฒ
public class Chef implements Ch{
public void cooking() {
System.out.println("์๋ฆฌ๋ฅผ ํฉ๋๋ค.");
}
}
-
package test;
//๊ณตํต๋ ์๋ฆฌ ๊ธฐ๋ฅ(์กฐ๊ฑด) ๊ตฌํํ ์ ์๊ฒ
public class SuperChef implements Ch{
public void cooking() {
System.out.println("๋ ์ข์ ์๋ฆฌ");
}
}
-
package test;
public interface Ch {
//์๋ฆฌ๋ฅผ ํฉ๋๋ค.
//์๋ฆฌํ ๋ ๊ณตํต์ ์ธ ์กฐ๊ฑด์ ์ค > ์๋ฆฌ์ฌ๊ฐ ๋ฐ๋์ด๋ ๋๊ฐ์ด ์๋ฆฌํ ์ ์๊ฒ
void cooking();
}
DI(์์กด์ฑ ์ฃผ์ )์ ํ๋ ๋ฐฉ๋ฒ
1.ํ๋ก๊ทธ๋จ ์คํ ์ ํ์ํ ๊ฒ ๊ฐ์ ๊ฐ์ฒด๋ ๋ชจ๋ ๋ง๋ค์ด์ค๋ค. (๊ธฐ๋ณธ ํจํค์ง ์์ ํด๋์ค๋ฅผ ๋ง๋ค๋ฉด 1๋ฒ์ ์ ๊ฒฝ์ธ ํ์ ์๋ค)
1) ํ๋ก์ ํธ ์์ฑ ์ ๊ธฐ๋ณธ ํจํค์ง ์์ ์๋ ๋ชจ๋ ํด๋์ค๋ ์คํ๋ง์ด ์๋์ผ๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ํ๋ณด(์๊ฒฉ)๊ฐ ๋๋ค.
> ๊ธฐ๋ณธ ํจํค์ง ์์ ์์ด์ผ ์๋์ผ๋ก ๋ง๋ค์ด์ง ์๊ฒฉ์ด ๋๋ ๊ฒ
(com.study.test ์์ ํด๋์ค๋ฅผ ๋ง๋ค๋ฉด ์๋์ผ๋ก ํด์ฃผ๋ ๊ฒ ๋ง๋ค๊ณ ํ ๊ฒ๊ณผ ์ผ๋งฅ์ํต)
2) ๊ฐ์ฒด ์์ฑ ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
์๋ ๋ค๊ฐ์ง ์ค ํ๋์ ์ด๋ ธํ ์ด์ ์ด๋ผ๋ ํด๋์ค์ ๋ถ์ด ์์ผ๋ฉด ์คํ๋ง์ด ๊ฐ์ฒด๋ฅผ ์๋ ์์ฑ
(ํด๋์ค ๋ช ์๊ธ์๋ง ์๋ฌธ์๋ก ๋ฐ๊ฟ์ ์์ฑ)
>> TestController testController = new TestController(); ๋ฅผ ์๋์ ๋ง๋ค์ด์ค๋ค
2)-1 @Component > ์คํ๋ง ์ด์ฐฝ๊ธฐ ๋ฒ์ ์ ์ฌ์ฉํ๋ ์ด๋ ธํ ์ด์
-----------------------------------------------
2)-2 @Controller
2)-3 Service("๋ง๋ค์ด์ง ๊ฐ์ฒด๋ช ์ง์ ")
ex) @Service - ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ
class MyserviceImpl{...}
> MyserviceImpl myServiceImpl = new MyserviceImpl();
@Service("myService") - ๊ฐ์ฒด ์ด๋ฆ ์ง์ ๊ฐ๋ฅ
class MyserviceImpl{...}
> MyserviceImpl myService = new MyserviceImpl();
2)-4 Repository
2.๋ง๋ค์ด์ง ๊ฐ์ฒด ์ค ํ์ํ ๊ฐ์ฒด๋ฅผ ์์กด์ฑ ์ฃผ์ ์ํจ๋ค.
1) ์์กด์ฑ ์ฃผ์ ์ ํตํด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ฒ๋ ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉ
1)-1 @Autowired() : ์๋ฃํ์ ๊ตฌ๋ถํ์ฌ ๊ฐ์ฒด์ ์์กด์ฑ ์ฃผ์ ์ ์ํจ๋ค.
ex1)
@Component
class Board{...} > Board board = new Board(); ์๋ ์์ฑ
@Component
class Member{...} > Member member = new Member(); ์๋ ์์ฑ
@Autowired
private Member m; > m์๋ ๋ง๋ค์ด์ง ๊ฐ์ฒด ์ค์์ ์๋ฃํ ์ผ์นํ๋ ๊ฒ ์ฆ member๋ฅผ ๋ฃ์ด์ค
ex2)
@Component
class Avante implements Car{...} > Avante avante = new Avante(); ์๋ ์์ฑ
@Component
class Sonata implements Car{...} > Sonata sonata = new Sonata(); ์๋ ์์ฑ
@Autowired
private Avante a; ๋ง๋ค์ด์ง ๊ฐ์ฒด ์ค์์ ์๋ฃํ ์ผ์นํ๋ ๊ฒ์ ์๋์ผ๋ก ๋ฃ์ด์ค >> a๋ avante ๋ค์ด์ด
private Sonata a; >> a์๋ sonata ๋ค์ด์ด
private Car c; >> ์ค๋ฅ๋จ. ์๋ฃํ ์ผ์นํ๋ ๊ฒ์ด ๋๊ฐ์ด๊ธฐ ๋๋ฌธ์ c์ ๋ฌด์์ ๋ฃ์ด์ค์ง ๋ชจ๋ฆ
1)-2 @Resourse() : ๋ง๋ค์ด์ง ๊ฐ์ฒด๋ช ์ ๊ธฐ์ค์ผ๋ก ์์กด์ฑ ์ฃผ์ ์ ์ํจ๋ค.
@Resourse(name = "avante")
private Car c; >> Resourse name์ ์ง์ ํด์ฃผ๋ฉด ๋ช ํํ๊ฒ avnate๊ฐ c์ ๋ค์ด์จ๋ค
'Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Spring ๋ฐ์ดํฐ ๋๊ธฐ๊ณ ๋ฐ๊ธฐ(์์ธ) (0) | 2023.03.15 |
---|---|
Spring - DB ํ์ ๊ด๋ฆฌ ์ค์ต (0) | 2023.03.15 |
Spring - DB ์ฐ๊ฒฐ (0) | 2023.03.14 |
Spring ์ด์ฉ - ํ์๊ฐ์ ๋ฐ ํ์ ์ ๋ณด ํ์ธ ํ๋ฉด ๊ตฌํ (0) | 2023.03.13 |
Spring ํ์ฉ ์น ๊ฐ๋ฐ (0) | 2023.03.13 |