Index
Spring framework applies IoC(Inversion of Control) through DI.
DI, 즉 의존성 주입이란 기본적인 의미로는 클라이언트에게 클라이언트가 필요한 서비스를 제공하는 것으로 Java의 관점에서 설명하면 어떤 객체를 만들때 해당 클래스가 필요로 하는 메소드와 필드들을 가진 외부 객체를 new연산자와 생성자를 이용하여 주입하여 해당 객체를 사용할 수 있게 만들어 주는 기술이다. 이때 해당하는 클래스는 주입한 객체의 클래스에 대해 높은 의존성을 가지게 되는데 유지보수를 원활하게 하고 수정을 용이하게 하기위해 느슨한 의존도를 지향하는 OOP의 특성상 공통된 기능들을 추상화한 인터페이스와 클래스들의 의존관계를 외부에서 결정하고 주입하는 Configuration클래스를 따로 만들어 의존관계를 주입하고 관리하는 기술을 포함한다. 이를 통해 클래스간의 의존도가 낮아져 코드를 수정 할 때 복잡도가 낮아지고 수정이 쉬워진다. 또한 재사용성이 높은 코드를 짤 수있고 부분적으로 테스트하기 쉬운 코드를 만들 수 있어 오류를 수정함에 있어서도 장점을 가진다. 마지막으로 협업시에OOP가 추구하는 방향대로 코드의 가독성이 좋아지게 된다.
스프링 프레임워크를 사용하면 스프링 컨테이너가 Annotation을 읽어 자동으로 Scan하고
DI를 해줘서 개발자가 보다 핵심 비지니스 로직을 개발하는데 집중할 수 있게 도와준다.
먼저, AOP(Aspect Oriented Programming)가 무엇인지 간단히 설명하면 공통 관심 사항과 핵심 관심 사항을 분리시켜 코드의 중복을 제거하고 재사용성을 높이는 프로그래밍 방법론으로 이는 핵심 기능에 공통기능을 삽입하는 방식으로 구현이 가능하다.
스프링에서는 프록시 객체를 자동으로 생성하여 AOP를 구현하는 방식을 지원하고 있는데 객체 지향 프로그래밍을 지향하고 따르는 스프링은 핵심 관심사 코드들에 섞여있는 부가적인 기능을 하는 공통관심사를 분리시켜 객체 지향 프로그래밍을 최적화 할 수 있고 OOP만으로는 해결되지 않았던 코드 복잡도를 개선하여 비지니스 로직을 빠르게 파악할 수 있게 해준다.