Spring Framework에서는 클래스의 인스턴스를 매번 생성하지 않고, 재사용 할 수 있는 것이 특징입니다.
이러한 방식을 IoC ( Inversion Of Control )이라고 합니다.
직역하자면 "제어의 역전" 정도이지만, 사실 "제어의 역전"이라고 듣고 이해하기란 쉽지 않습니다.
나름대로의 뜻 풀이를 해보자면,
Inversion은 일반적으론 영어 문법에서 도치법이라는 뜻으로 쓰입니다.
도치법이란 문장을 뒤바꿔서 말하는 방식으로 "나랑 평생동안 같이 살자" 를 "나랑 살자 평생동안 같이" 로 순서를 바꾸는 문법입니다.
Control은 아마도 인스턴스를 제어 한다는 의미로 쓰였을 것입니다.
고로 다시 의미를 합치자면 "인스턴스를 제어하는 순서를 바꾸는 방식" 정도로 해석될 수 있는 것 같습니다.
The meaning of inversion of control in Java
We can define the word inversion as a reversal of the natural order. When programming in Java, the natural order is to declare variables and then initialize those variables with instances of objects you create.
코드로 다시 살펴보면, 일반적으로 인스턴스를 생성하면 아래와 같은 방식으로 진행됩니다.
Something something = new Something();
위같은 경우는, something이라는 변수에 할당할 시점에 new라는 생성자를 이용하여 Something 클래스의 인스턴스를 생성합니다.
반면 이 순서를 도치하게 되면 먼저 Something 클래스의 인스턴스를 생성하고 변수에 할당하게 됩니다.
// 프로그램 시작할 때, 이미 context에 Something인스턴스를 저장시켰다.
Something something = context.getBean(Something.class); // 인스턴스 주입
그래서 IoC원리를 이용한 프로그램은 시작할 때 Something이라는 클래스를 인스턴스화 시켜 저장시켜 가지고 있습니다. 그리고 Something클래스의 인스턴스를 생성하려고 할때, 저장했던 Something 인스턴스를 주입시켜줍니다.
여기서 인스턴스를 가지고 제어하는 context를 IoC Container라고 부릅니다.
어디서든 Something의 인스턴스를 필요로 한다는 것은, Something클래스에 의존성을 가지고 있다는 뜻일겁니다.
또 저장되어 있는 인스턴스를 생성하지 않고, IoC Container에 이미 가지고 있는 인스턴스를
주입하고 있기 때문에 이러한 행위는 Dependency Injection 줄여서 DI 이라고 합니다.
'Spring' 카테고리의 다른 글
[ Spring Boot ] JWT를 이용한 OAuth2 설정 (0) | 2021.12.21 |
---|---|
[ Intellij ] lombok이 적용되지 않을 때 (0) | 2021.10.26 |
[ Maven ] dependency 수동으로 설치하기 (0) | 2021.10.15 |
MappedInterceptor를 이용한 Interceptor 등록 (0) | 2021.10.06 |
Spring Boot 테스트 설정하기 (0) | 2021.05.12 |