brunch

인터커넥션 개념

설계 복잡도의 요인

by 심야서점

지난 글에서 기능 복잡도와 설계 복잡도의 개념에 대해서 살펴보았고, 설계 복잡도를 일으키는 인터커넥션에 대해서 살펴보도록 하겠습니다. 인터커넥션을 살펴보기 위해서는 설계의 기본부터 설명을 해야 하는데, 기회가 되면 좀 더 자세하게 설명을 하도록 하고 설명에 필요한 부분만 다루도록 하겠습니다.


설계는 수직적으로는 추상화 (Abstraction)와 구체화 (Concretization)하는 과정이고, 수평적으로는 구성 (Decomposition)을 하는 과정, 그리고 기능을 구조로 맵핑하는 과정입니다.


수직적으로는 설계자의 의도를 구체화하여 기능으로, 기능을 좀 더 구체화하여 상세 기능으로 과정입니다. 구체화하는 과정의 반대는 추상화하는 과정입니다. 수평적으로 동일한 계층 내 몇 개의 구성요소로 나누고, 구성요소 간의 관계를 정하는 과정입니다. 마지막으로 문제 영역에 있는 기능을 솔루션 영역에 있는 구조로 맵핑하는 과정입니다.


설계는 가치를 만들어내는 과정입니다.


가치는 기능에서 만들어집니다. 기능 자체만으로도 복잡도가 발생하고, 복잡도에 인해서 비용이 발생합니다. 기능으로 인한 복잡도는 기능 복잡도라고 하는데, 설계 대상인 시스템의 기능이 많을수록, 기능의 계층이 클수록 기능 복잡도가 커지게 됩니다. 개념적으로 동일한 기능을 가진 시스템이라면 기능 복잡도는 동일하다고 볼 수 있습니다.


그렇지만, 동일한 기능을 가진 제품을 다른 회사에서 만들면 복잡도가 다르고, 그로 인한 비용도 동일할까요? 결론부터 말하면 다릅니다. 그건 제품이 갖는 복잡도가 기능 복잡도만으로 국한하지 않기 때문입니다.

제품의 복잡도는 기능으로 인한 복잡도인 기능 복잡도와 그것을 구현하는 활동으로 인한 구조 복잡도 또는 설계 복잡도로 나눌 수 있습니다. 기능 복잡도가 같더라도 설계의 품질에 따라서 구조 복잡도가 높아지면 비용은 그로 인해서 더욱 커질 수 있습니다. 제품 복잡도는 기능 복잡도와 구조 복잡도의 합으로 정의하지만, 다시 분류하면 핵심 복잡도와 불필요한 복잡도로 나눌 수 있습니다. 제품 복잡도 중에서 기능 복잡도와 구조 복잡도의 일부는 핵심 복잡도로, 구조 복잡도의 나머지는 불필요한 복잡도로 볼 수 있습니다. 그래서, 이상적인 제품 복잡도는 기능 복잡도와 같다고 볼 수 있습니다. (여기서는 기능 복잡도에는 필수 기능으로 인한 복잡도만 고려했다고 가정했습니다. 사실상 시스템이 갖는 기능을 필수, 필요, 손실 기능으로 분류한다면 필요 기능의 일부와 손실 기능으로 인한 복잡도는 불필요한 복잡도라고 볼 수 있습니다.)


좋은 설계란 구조 복잡도 (설계 복잡도)를 최소화하면서 기능을 구현하는 활동입니다.


여기서 복잡도에 대해서 언급하는 이유는 구조 복잡도는 동일한 계층 내 구성요소 간의 연결관계와 비례하기 때문입니다. 구성요소가 많고, 구성요소 간의 관계가 많을수록 구조 복잡도는 커지게 됩니다. 구성요소 간의 관계 그 자체를 인터커넥션 (Inter-connection)이라고 합니다. 인터커넥션을 개별 구성요소 입장에서 바라보면 정적인 관계인 인터페이스가 됩니다. 이를 표준화하고 설계 규칙으로 표현하면 디자인룰 (Design Rule)이라고 합니다. 구성요소들이 인터페이스를 통하여 연결되어서 동작을 하면 동적인 관계인 인터액션 (Interaction)이라고 합니다. 이를 설계 입장에서 표현하면 메커니즘 (Mechanism)이라고 합니다.


keyword
매거진의 이전글기능 복잡도 vs. 구조 복잡도