Home Ioc, DI, DIP: 그놈이 그놈이아니다.
Post
Cancel

Ioc, DI, DIP: 그놈이 그놈이아니다.

IoC (Inversion of Control)

Ioc is a common phenomenon

Ioc는 일반적인 디자인 원칙중 하나이다. 작성한 코드의 제어가 역전된 상황에 모두 적용할 수 있다. 흔히 사용되는 이벤트루프 또는 콜백 및 트리거 함수들이 이에 포함된다.

CLI program

1
2
3
4
5
PRINT "이름?"
READ name
PRINT "나이?"
READ age
STORE name, age

cli 기반의 유저의 이름과 나이를 입력받아 저장하는 프로그램의 의사코드이며 이를 구현한 프로그램은 작성된 흐름으로 제어(진행)된다.

GUI(Android) program

1
2
3
4
5
6
7
8
editTextName.hint = "이름?"
editTextAge.hint = "나이?"

btnStore.setOnClickListener {
   val name = editTextName.text.toString()
   val age = editTextAge.text.toString()
   store(name, age)
}

여기서, 해당 프로그램은 내가 작성된 흐름으로 제어되지않고 user interaction을 토대로 android framework에서 제어한다. 즉 프레임워크에의한 제어 역전이 발생한 예시이다.

위 예제 뿐만아니라 Callback, Handler, EventLoop등 다양한 곳에 적용된 디자인 원칙일 뿐이라고 이해하면 된다.

결론

  • Ioc ≠ DI ≠ DIP
  • 왜 위 3개념이 혼용되는지에 대해 추측해본다면, 우리가 많이 사용하는 DI 프레임워크들이 Ioc 디자인 원칙을 따라 구현되어있으며 이를 토대로 DIP를 구현하다보니 오해가 생긴게 아닐까? 하는 생각이 든다.

참고

What is Inversion of Control?

This post is licensed under CC BY 4.0 by the author.

Spring: ControllerAdvice, ExceptionHandler를 활용한 예외처리

KMM 조사: 1장 오프닝, 소개