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를 구현하다보니 오해가 생긴게 아닐까? 하는 생각이 든다.