제어의 역전
제어의 역전이란?
제어의 역전(Inversion of Control, 이하 IoC)란 의존성을 외부에서 주입 입니다.
지난 내용
이전글에서는 SOLID 원칙 중 DIP: 의존성 역전 원칙을 알아보았습니다.
의존성 주입은 클라이언트가 모든 요소를 제어해야한다는 단점이 생겼는데 이번 글에서는 제어의 역전이란 개념을 공부하며 어떻게 개선을 할 수 있을지 알아보겠습니다.
라이브러리와 프레임워크 차이
사실 이 개념을 우린 아주 친숙하게 사용하고 있는데 바로 프레임워크입니다.
라이브러리 | 프레임워크 |
---|---|
우리가 흐름을 제어하고 직접 라이브러리를 사용함 | 프레임워크가 흐름을 제어하고 우리의 코드를 외부에서 사용함 |
라이브러리부터 예시를 통해 보겠습니다
val mainIntent = Intent(this, MainActivity::class.java)
startActivity(mainIntent)
Intent 객체를 직접 생성하고, this 를 이용하여 의존성을 직접 주입해주고 있습니다.
또한 startActivity 함수를 불러와 흐름을 제어하고 있습니다.
다음은 프레임워크를 보겠습니다
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
}
안드로이드 프로젝트를 처음 시작할 때 MainActivity 코드입니다.
우린 클래스를 정의했지만 이 클래스를 생성하고 onCreate 함수를 호출하지 않습니다.
객체의 생성부터 의존성 주입까지 안드로이드 프레임워크가 해주고 있습니다.
이전 코드 흐름의 개선
이전 Car 와 Engine 의 관계를 IoC가 적용된 그림으로 표현해보겠습니다.
객체를 생성, 관리, 소멸 등을 책임져주는 IoC Container 객체에게 Car 객체를 요청하면
IoC Container 는 의존 관계에 따라 의존성 주입을 해주고 Car 객체를 돌려줍니다.
Spring 에서 @Configuration, @Bean 등의 어노테이션을 사용해서 아주 자주 쓰지만
저는 프론트 개발자이기 때문에 안드로이드 JetPack 라이브러리 중 Hilt 를 정리해보며
DI 와 IoC에 더 자세히 공부해보겠습니다.
포스팅에서 문제가 있는 부분은 언제든지 알려주세요!
Author And Source
이 문제에 관하여(제어의 역전), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@someh/제어의-역전저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)