#2. 스프링의 IoC(제어의 역전)

Subin Ahn·2023년 4월 12일

토비의스프링

목록 보기
2/4
post-thumbnail
오늘은 스프링의 핵심이라고 할 수 있는 제어의 역전(IoC)에 대해 공부한 내용을 정리하려고 한다. 토비의 스프링으로 공부한지 아직 2번째 밖에 안됐지만 확 느끼는게 스프링 프레임워크는 정말 개발자가 로직짜는 것, 자바 로직에만 집중할 수 있게 해주는 최선의 구조를 갖춘 프레임 워크 라는 생각이 든다. 그러면서 동시에 객체지향을 참 잘 보여주는 것 같다. 정말 공부 할 수록 재미있다!

팩토리(factory) 오브젝트란?

객체의 생성 방법을 결정하고, 그렇게 만들어진 오브젝트를 돌려주는 역할을 담당하는 오브젝트, 즉 애플리케이션의 오브젝트들의 구성과 생성, 오브젝트간의 관계를 정의하는 책임을 맡고 있는 설계도 역할

제어의 역전(Inversion of Control)?

프로그램의 제어 흐름 구조가 뒤바뀌는 것

일반적인 프로그램의 흐름은, main() 메소드와 같이 프로그램이 시작되는 지점에서 소스 흐름에 따라 다음에 사용할 오브젝트를 결정하고, 결정한 오브젝트를 생성하고, 만들어진 오브젝트에 있는 메소드를 호출하고, 그 메소드에서 다음에 사용할 것을 결정하는 식으로 진행된다. 즉 각 오브젝트는 오브젝트를 구성하는 작업에 능동적으로 참여한다. 제어의 역전이란, 이런 제어 흐름을 거꾸로 뒤바꾸는 것이다!

제어의 흐름을 거꾸로 뒤바꾸는 것이란?

위에 설명한 일반적인 제어의 흐름과는 반대로, 각 오브젝트가 자신이 사용할 오브젝트를 스스로 선택하지 않고 생성하지 않는다. 또한 자신도 어디서 어떻게 생성되고 사용될 지 모른다. 제어가 각 오브젝트에 의해 능동적으로 수행되는 것이 아니라, 모든 제어의 권한을 자신이 아닌 제어를 담당하는 특정 대상에게 위임하는 것이다!

프레임워크라는 것은, 이런 제어의 역전 개념이 적용된 대표적인 기술이다. 프레임워크가 흐름을 주도하는 중에, 개발자가 만든 애플리케이션 코드를 사용하도록 만드는 방식이기 때문. 즉, 애플리케이션 코드가 프레임워크에 의해 사용되는 것 이다.

👉 IoC 라는 개념은 프레임워크만의 기술이 아닌, 프로그래밍 모델이 될 수 있다. IoC를 적용함으로써 설계가 깔끔해지고 유연성이 증가하며, 확장성이 좋아지기 때문에 필요할 때면 IoC 스타일의 설계와 코드를 만들어서 사용할 수 있다.


스프링의 IoC 오브젝트, 애플리케이션 컨텍스트(Application Context)

스프링에서 빈의 생성과 관계 설정같은 제어를 담당하는 IoC 오브젝트를 빈 팩토리(bean factory) 라고 부른다. 이런 빈팩토리 인터페이스를 상속받은, 더 확장된 오브젝트를 애플리케이션 컨텍스트 라 하며, 이 것이 곧 스프링이라 불리기도 한다.

👉 빈 팩토리라고 말할 때는, 보통 빈을 생성하고 관계를 설정하는 IoC의 기본 기능에 초점을 맞춘 것이고, 애플리케이션 컨텍스트라 할 때는 애플리케이션 전반에 걸쳐 모든 구성요소의 제어 작업을 담당하는 IoC 엔진 의 의미가 더 부각 되는 것.

애플리케이션의 로직을 담당하지는 않지만, IoC를 적용해서 관리할 모든 오브젝트에 대한 생성과, 오브젝트 간의 관계를 맺어주는 등의 책임을 담당

📝참고문헌 : 토비의 스프링3.1
profile
신뢰를 주는 개발자

0개의 댓글