Spring IoC(Inversion of Control)
🤔 Inversion of Control : 제어권이 역전된 것.
일반적인 경우 : 내가 사용할 의존성은 내가 만든다
IoC : 내가 사용할 의존성을 대신 만들어 준다.
의존성을 관리하는게 자기 자신이 아니라 외부에 의해 주입이 되기 떄문에 Inversion of Control 이라고 라고 부른다.
의존성을 주입해 주는 일 : Dependency Injection
😀 일반적인 경우를 보자.
// 일반적인 경우
public class TestClassController {
public TestRespository testRespository; // 따로 초기화를 해주지 않음
public TestClassController(TestRespository testRespository){
this.testRespository = testRespository;
}
@Test
public void testDoSomthing(){
testRespository.save();
}
}
위와 같은 코드가 있을때 TestRepository
를 따로 초기화 해주지 않았지만,NullpointException
과 같은 에러는 걱정하지 않아도 된다. 왜냐하면 TestClassController
를 만들때 생성자에서 TestRepository
객체를 주입해주기 떄문이다.
이렇게 의존성을 주입하는 일을 스프링이 대신 해주기도 하는데 아래의 코드를 보면 따로 초기화나 객체를 주입해주지 않아도 정상적으로 작동하는 것을 볼 수 있다.
// @MockBean Annotation을 사용해서 의존성을 주입
public class TestClassController {
@MockBean
public TestRespository testRespository; // 따로 초기화를 해주지 않음
@Test
public void testDoSomthing(){
testRespository.save();
}
}
물론 이렇게 하는 경우에 Spring에 내가 해당 TestRepository
를 Bean
으로 만들어 사용할거다. 라는 말을 명시해주어야 한다.
'개발공부 > Spring' 카테고리의 다른 글
[SpringBoot] Spring 에서 자동설정의 이해와 구현 (AutoConfiguration) (0) | 2020.05.03 |
---|---|
[SpringBoot]Spring AOP와 프록시 패턴 (0) | 2020.05.01 |
[SpringBoot]Spring 의존성 주입 DI(Dependency Injection) 와 순환 참조 (0) | 2020.05.01 |
[SpringBoot] IoC 컨테이너와 Bean (0) | 2020.05.01 |
Spring - JPA에서 Like 기능 수행하기. (0) | 2020.05.01 |