Inversion of Control
์ ์ด์ ์ญ์ (Inversion of Control
) -> IoC์ ๋ํด ์์๋ณด์.
์ ์ด
์ ์ด์ ์๋ฏธ๋ฅผ ์์๋ณด์.
ํ ํด๋์ค์ ๋ฉ์๋์์ ๋ค๋ฅธ ๊ตฌํ์ฒด์ ์ธ์คํด์ค๋ฅผ ๋ง๋ ๋ค๊ณ ํด๋ณด์.
public class InstanceClass {
public void run(){
System.out.println("run!");
}
}
public class Test {
public static void setTest() {
InstanceClass instanceClass = new InstanceClass();
instanceClass.run();
}
public static void main(String[] args){
setTest();
}
}
Test๋ผ๋ ํด๋์ค์์ new ์์ฑ์๋ฅผ ์ด์ฉํด ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ด์ฃผ์๋ค.
์ด๋ฐ ์ํฉ์ด Test ํด๋์ค์ setTest() ๋ฉ์๋๊ฐ InstanceClass๋ฅผ ์ ์ดํ๊ณ ์๋ ์ํฉ์ด๋ค.
public class Test {
public static void setTest() {
InstanceClass instanceClass = new InstanceClass();
instanceClass.run();
}
public static void setTest1() {
InstanceClass instanceClass = new InstanceClass();
instanceClass.run();
}
public static void setTest2() {
InstanceClass instanceClass = new InstanceClass();
instanceClass.run();
}
public static void setTest3() {
InstanceClass instanceClass = new InstanceClass();
instanceClass.run();
}
public static void main(String[] args){
setTest();
setTest1();
setTest2();
setTest3();
}
}
๋ง์ฝ์ ์ด๋ฐ ์์ผ๋ก ์๋ก ๋ค๋ฅธ ๋ฉ์๋์์ new ์์ฑ์๋ฅผ ์ด์ฉํด ์ธ์คํด์ค๋ฅผ ๋ง๋ ๋ค๋ฉด ์๋ก ๊ฐ์ ์ธ์คํด์ค์ผ๊น?
๋ต์ ์๋ก ๋ค๋ฅธ ์ธ์คํด์ค์ด๋ค.
๊ฐ ์คํ ์์ญ์์ ๋ฉ์๋๊ฐ ํธ์ถ๋๊ณ ๊ทธ ์์์ ์์ฑ์๋ฅผ ์ด์ฉํด heap ์์ญ์์ ์ธ์คํด์ค๊ฐ ์์ฑ๋๋ค.
์ด heap ์์ญ์์ ์์ฑ๋ ์ธ์คํด์ค๋ ์คํ ์์ญ์ด ์๋ฉธํ ๋ ๊ฐ๋น์ง ์ปฌ๋ ํฐ์ ์ํด ๊ฐ์ด ์๋ฉธ๋๋ฏ๋ก, setTest,1,2,3์ ์ธ์คํด์ค๋ ์๋ก ๋ค๋ฅธ ์ธ์คํด์ค์ด๋ค.
Spring IoC
DB์ ์ ๊ทผํด์ผ ํ๋ ํด๋์ค๋ค, ์ปค๋ฅ์
ํ, ์ค๋ ๋ ํ๊ณผ ๊ฐ์ ์์์ ์ฌ์ฉํด์ผ ํ๋ ํด๋์ค๋ค์ด ์ธ์คํด์ค๋ฅผ ์ฌ๋ฌ ๋ฒ ๋ง๋ค๋ฉด, ์์์ ๋ญ๋น๊ฐ ๋๊ณ ์์ํ ์ ์๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์๋ค.
์ด์ธ์๋ ์๋ฒ์์ ์ฌ์ฉ๋๋ Service, Repository ๊ฐ์ฒด๋ ์ค๋ณต์ผ๋ก ์ฌ๋ฌ ๋ฒ ๋ง๋๋ ๊ฒ๋ณด๋ค ์ธ์คํด์ค๋ฅผ ํ ๋ฒ๋ง ์์ฑํด์ ๊ด๋ฆฌํ๋ ๊ฒ์ด ์์ ์ ์ธ ๋ฐฉ๋ฒ์ด๋ค.
Spring์์๋ Spring IoC(Inversion of Control
)์ ๋ฐฉ์์ ํตํด ์ด๋ฌํ ๊ด๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํด์ค๋ค.
์ฆ, ํด๋์ค๋ฅผ ์์ฑํ๊ณ , ์์กด์ฑ์ ์ฃผ์
ํด ์ฃผ๋ ์ ์ด๋ฅผ Spring ์ชฝ์ผ๋ก ์ญ์ ์์ผ ์คํ๋ง์ด ๊ด๋ฆฌํ๋ ๊ฒ์ด๋ค.
์คํ๋ง์ด ์ธ์ํ ์ ์๋ ์ด๋
ธํ
์ด์
(@Component, @Repository, @Service ๋ฑ๋ฑ..)์ ์
๋ ฅํด ์ฃผ๋ฉด ์คํ๋ง์ด IoC๋ก ๊ด๋ฆฌํด ์ค๋ค.
์ด๋ ์์ฑ๋ ์ธ์คํด์ค๋ฅผ ์ฑ๊ธํด
์ผ๋ก ๊ด๋ฆฌํด ์ฃผ๋ฏ๋ก ํด๋์ค๊ฐ ๋ง๋๋ ์ธ์คํด์ค๋ค์ด ์ค๋ณต๋์ง ์๊ณ , ํ ๊ตฌํ์ฒด์ ํ์ธ ์คํฐ๋ฅผ ๋ง๋ค์ด์ค์ ๊ด๋ฆฌํ๊ฒ ๋๋ค.
๊ทธ๋ฌ๋ฏ๋ก Spirng์ด ์ธ์ํ ๊ตฌํ์ฒด๋ค์ด ํ๋์ฉ heap ์์ญ์ ๋ง๋ค์ด์ ธ์ ๊ด๋ฆฌ๋๋ค.
์์
import org.springframework.stereotype.Component;
@Component
public class InstanceClass {
public void run(){
System.out.println("run!");
}
}
import org.springframework.beans.factory.annotation.Autowired;
public class Test {
@Autowired
private InstanceClass instanceClass;
public void test(){
instanceClass.run();
}
}
IoC๊ฐ ์ธ์ํ ์ ์๊ฒ @Component์ ๊ฐ์ ์ด๋
ธํ
์ด์
์ ๋ถ์ฌ์ค๋ค.
์ด๋ ํด๋์ค์ ์์น๋ ์คํ๋ง ๋ถํธ ๋ฉ์ธ ํด๋์ค์ ํ์์ฌ์ผ ์คํ๋ง IoC๊ฐ ์ธ์ํ ์ ์๋ค.
IoC์ ์ ์ด๊ฐ ์ญ์ ๋ ๊ตฌํ์ฒด๋ ์์ ๊ฐ์ @Autowired์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
๋ํ ์ด ์ธ์คํด์ค๋ ์ฑ๊ธํด์ผ๋ก ๊ด๋ฆฌ๋๋ ๋จ ํ๋์ ์ธ์คํด์ค๋ค.
'Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
@Controller, @RestController return (0) | 2022.03.10 |
---|---|
enum ํ์ฉ(RoleType) (0) | 2022.03.10 |
Spring์ ์์กด์ฑ ์ฃผ์ (0) | 2022.03.09 |
MockMvc - ๊ฐ๋จํ ํ ์คํธ ์ฝ๋ (0) | 2022.03.09 |
์คํ๋ง์์ h2 ์ฌ์ฉ (0) | 2022.03.09 |