소프트웨어 프레임워크에서 많이 쓰는 용어인데 '제어의 역전'이라고 번역하고 영어로는 'Inversion of Control'이다. 여기서 혼란스러운 것이 Inversion 이란 단어다. 역전, 뒤바꾸다 이런 의미인데 '관리를 뒤바꾸다'가 직역이 되겠다. 왜 관리(제어)를 바꾸는 게 좋은지 예를 들어보자.
어떤 회사에서 시스템을 하나 구축하기로 했다.
개발 회사가 아니므로 입찰 공고, 심사를 거쳐 개발 업체를 선정해서 진행하기로 한다.
담당자는 회사의 예산 부서, 계약 부서, 보안 부서등 관련 부서와 협의를 진행한다.
이 모든 과정이 순조롭게 끝난 후 소프트웨어 회사가 선정되었다.
담당자는 선정된 업체와 함께 시스템을 완성한다.
여기서 관리(제어)를 담당하는 것은 담당자이다. 이 사람은 모든 절차(알고리즘)와 정보(자료구조)에 대한 책임을 지고 있으며 제일 중요한 업체(Object) 선정(Create)에도 전권을 쥐고있는 말 그대로 제어 책임자가 된다.
이 구조가 바뀌면 이렇게 된다.
어떤 회사에서 시스템을 하나 구축하기로 했다.
개발 회사가 아니므로 입찰 공고, 심사를 거쳐 개발 업체를 선정해서 진행하기로 한다.
담당자는 회사에계 정의한 양식에 따라 원하는 개발사의 Spec. 과 예산, 일정등을 제출한다.
회사는 담당자에게 회사의 규정에 맞는 적합한 업체를 통보한다.
담당자는 제공된 업체와 함께 시스템을 완성한다.
여기서 관리(제어)권은 회사로 넘어갔다. 담당자는 통보받은 회사와 협력해서 시스템을 완성하면 된다. 이 구조가 좋은 점은 담당자는 회사 선정에 신경 쓸 필요가 전혀 없이 시스템의 기능만 신경 쓰면 된다는 점이다. 회사에서 정의한 양식에 따라 원하는 사양만 통보하면 나머지는 회사에서 처리하고 결과가 담당자에게 통보된다. 그래서 이런 구조를 일컬어 할리우드 원칙(Hollywood Principle)이라고도 한다.
전화하지 마. 우리가 연락할게 (Do not call us, we call you)
여기서 '회사가 정의한 양식'과 '회사의 규정에 맞는 적합한 업체'가 인터페이스다. (회사는 적합한 업체를 관리하고 제공해야 할 의무가 있다)
즉, 프레임워크에서 정의한 인터페이스에 따라 애플리케이션을 만들면 프레임워크가 애플리케이션을 호출해서 실행한다.
IoC 가 적용되지 않을 경우에는 어플리케이션이 프레임워크의 라이브러리(기능)를 호출하는 방식에서 프레임워크가 애플리케이션을 호출하는 방식으로 역전된 것이다.
프레임워크라고 불리는 모든 스프트웨어는 이런 기능이 있다. 즉 제어(관리)를 프레임워크가 한다는 뜻이고 프레임워크가 어플리케이션에 제공하는 것은 인터페이스다. 인터페이스는 행위(action)를 정의하는 것으로 애플리케이션 개발자는 인터페이스만 보고 시스템을 설계하고 만들면 된다. 완전한 계약에 의한 개발 방식이다.
이렇듯 인터페이스는 약속이자 어떤 객체의 타입을 결정하는 것이며 중국집의 메뉴판처럼 누구나 이해할 수 있도록 직관적으로 설계되고 제공되어야 한다. 이런 인터페이스만 가지고 극단적으로 설계하는 방식을 CBD(Component Based Development)라고 하는데 인터페이스로 비즈니스를 설계하는 것인데 이것도 상당히 직관적이고 재미있다.
정리하자면, 인터페이스는 약속이자 시스템을 추상적으로 바라볼 수 있는 아주 좋은 도구이다.
'일상' 카테고리의 다른 글
인터페이스, 추상화, 다형성 (0) | 2023.07.03 |
---|---|
어느 스타트업 창업자 (0) | 2023.06.26 |
약빨고 만든 노래 (0) | 2023.06.18 |
A.I. 가 인간을 능가할 수 있을까? (0) | 2023.06.16 |
멋지게 늙고 싶다. (0) | 2023.06.15 |