본문 바로가기
Dev/spring

[스프링프레임워크] 스프링 주요특징 - 의존성주입(DI)를 통한 객체 간의 관계 구성

by RoundRyun 2019. 10. 30.

 

'제어의 역행'이라는 의미는 말 그대로 메소드나 객체의 호출작업을 개발자가 결정하는 것이 아니라, 외부에서 결정되는 것을 의미합니다. 이 방식은 대부분의 프레임워크에서 사용하는 벙법으로, 개발자는 필요한 부분을 개발해서 '끼워넣기'의 형태로 개발하고 실행하게 됩니다.

 

개발자는 프레임워크에 필요한 부품을 개발하고, 조립하는 방식의 개발을 하게 됩니다. 이렇게 조립된 코드의 최종 호출은 개발자에 의해서 이뤄지지 않고, 프레임워크의 내부에서 결정된 대로 이뤄지게 되는데, 이런 현상을 '제어의역행'이라고 표현합니다.

 

스프링은 그 자체가 "구조를 설계할 수 있도록 만들어 졌다"는 뜻이므로, 개발자가 부품을 만들어 조립하는 형태의 개발이 가능하다는 것을 의미합니다.

 

'의존성 주입'은 제어의 역행이 일어날 때 스프링이 내부에 있는 객체(bean)들 간의 관계를 관리할 때 사용하는 기법입니다.

 

의존성(Dependency)이라는 용어는 어떤 객체가 혼자 일을 처리할 수 없다는 것을 의미합니다. 만일 어떤 객체 Aㄱ 다른 객체 B의 도움을 받아야만 온전히 일을 처리할 수  있을 때 'A는 B에 의존적이다.'라고 표현합니다. Java에서는 일반적으로 인터페이스를 이용해서 이런 의존적인 객체의 관게를 최대한 유연하게 처리할 수 있도록 노력합니다.

 

의존성 주입은 말 그대로 이런 의존적인 객체를 직접 생성하거나, 제어하는 것이 아니라, 제어의역행으로 특정객체에 필요한 객체를 외부에서 결정해서 연결 시키는 것을 의미합니다. 외부에서 필요한 객체를 결정하기 때문에 개발자는 의존적인 객체들과의 관계를 직접 처리할 필요가 없고, 인터페이스를 활용해서 유연한 구조를 사용할 수 있습니다. 스프링은 의존성 주입을 프레임워크에서 처리하기 때문에 개발자는 자신이 만드는 객체나 클래스 외에는 신경 쓰지 않고 코드를 만들고, 자신의 코드에 필요한 객체는 스프링을 통해서 주입 받는 구조로 작성됩니다.

 

의존성 주입의 종류는 1)생성자를 통한 주입과 2)set메소드를 이용한 주입으로 구분할 수 있습니다, 스프링은 두 방식 모두를 사용할 수 있고, 이에 대한 처리 역시 간단하 애노테이션만으로 처리할 수 있습니다.