스프링을 공부하다보니 기본적인 코드작성은 어느정도 익숙해졌지만 개념적인 부분에 대해 좀 더 깊게 이해하고 정리해야하는 시간이 필요하다고 느껴 글을 작성하기 시작했다.
해당 글에서 배울 내용은 IoC, DI에 대해 알아볼 예정입니다. 이 두 특성은 스프링에서 모든 기능의 기반으로 두고 있습니다.
Inversion of Control의 줄인 표현으로 제어의 역전이라고 부릅니다.
메소드나 객체의 호출작업을 개발자가 직접 생성하거나 제어하는 것이 아니라 외부에서 관리하는 객체를 가져와 사용하는 것을 의미합니다.
일반적인 경우 제어권에 대해 논할 때에는 개발자가 직접 의존성을 다음과 같은 함수처럼 생성하여 제어합니다.
public class IoCController {
private IoCService IocService = new IocService();
}
위의 참고글과 다르게 아래는 스프링 컨테이너가 객체를 관리하는 코드입니다.
public class IoCController {
private IocService iocService;
}
일반적인 상황에서 개발자가 의존성을 직접 생성하고 제어하는 방법과 다르게 IoCController를 직접 생성하는 것이 아니라 외부에서 해당 의존성을 가져옵니다.
스프링에서는 위에서 설명한 것 처럼 의존성 관리를 위해서 IoC를 사용합니다. 그리고 이를 구현하기 위해 사용하는 방법으로 DI가 있습니다.
DI는 Dependency Injection을 줄인 표현으로 의존성 주입이라고 부릅니다.
DI는 객체 지행 프로그래밍에서 객체 간의 의존 관계를 외부에서 주입하는 디자인 패턴으로 외부에서 생성된 객체를 위의 IOC처럼 주입받아 사용하여 객체 간의 결합도를 낮추고, 유연성과 재사용성에 초점을 맞추었습니다.
즉, 이를 통해 저희가 Spring을 사용할 때 얻을 수 있는 효과가 객체의 생성과 사용을 분리할 수 있습니다.
주로 스프링에서는 어노테이션을 사용하여 의존성을 주입하는데 가장 일반적인 어노테이션으로는 @Autowired, @Resource, @Repository등이 존재합니다.

추후 어노테이션에 대해서, 어떤 종류들이 있는지 포스트가 올라올 예정입니다!