윤개발

[실용주의 프로그래머] 8장 - 직교성 요약 본문

책 내용 요약/실용주의 프로그래머

[실용주의 프로그래머] 8장 - 직교성 요약

DEV_SJ 2020. 11. 19. 15:05

설계, 빌드, 테스트 그리고 확장하기에 쉬운 시스템을 만드는데에 있어 직교성은 매우 중요한 개념이다.

 

1. 직교성이란?

직교성은 기하학에서 빌려온 용어다. 그래프의 축과 같이 두 직선이 직각으로 만나는 경우 직교한다고 말한다.

벡터의 입장에서 보면, 두 개의 선은 독립적이다.

 

컴퓨팅에서 이 용어는 결합도 줄이기를 의미한다.

하나가 바뀌어도 나머지에 어떤 영향도 주지 않는다면 직교한다고 할 수 있다.

 

2. 직교성의 장점

비직교적인 시스템은 본질적으로 변화와 조정을 하기가 복잡하다.

시스템의 컴포넌트들이 고도로 상호의존적인 경우, 특정 부분만 수정하는 방법이란 없다.

관련 없는 것들 간에 서로 영향이 없도록 하라.

컴포넌트들이 각기 격리되어 있으면 어느 하나를 바꿀 때 나머지 것들을 걱정하지 않아도 된다.

 

3. 생산성 향상

  • 변화가 국소화 되어 개발시간과 테스트 시간이 줄어든다.

  • 새로운 코드를 추가할 때 기존의 코드를 계속 바꾸어야할 필요가 없다.

  • 컴포넌트들이 명확하고 잘 정의된 책임이 할당되어 있다면 새로운 컴포넌트와 결합할 수 있으므로 재사용을 촉진한다.

 

4. 리스크 감소

  • 감염된 코드는 격리된다. 어떤 모듈에 버그가 발생하여도 시스템의 나머지 부분으로 전파될 확률이 낮으며 그 부분만 도려내어 교체할 수 있다.

  • 시스템이 잘 깨어지지 않는다. 어떤 부분들을 골라서 약간 바꾸고 수리해도 거기서 생기는 문제점들은 그부분에만 한정될 것이다.

  • 직교적인 시스템은 테스트를 설계하고 실행하기 쉽기 때문에 더 많은 테스트를 하게된다.

 

5. 설계

시스템은 협력하는 모듈들의 집합으로 구성되어야 하고, 각 모듈은 다른 부분과 독립적인 기능을 구현해야한다.

때로는 이런 컴포넌트들이 레이어로 조직되기도 하는데, 각 레이어는 하나의 추상화 층을 이루게된다.

레이어식 접근은 직교적 시스템을 설계하는 강력한 방법이다.

 

각 레이어는 자기 밑에 있는 레이어들이 제공하는 추상화만을 사용하기 때문에 코드에 영향을 끼치지 않으면서 아래에 있는 다른 구현들을 바꾸는 높은 유연성을 얻을 수 있다.

 

레이어를 두는 것은 또한 모듈간에 종속성이 빨리 늘어나는 위험을 감소시킨다.

 

6. 코딩

코드를 작성하고 있다면 언제나 애플리케이션의 직교성을 떨어뜨릴 수 있는 위험에 노출되어 있다.

  • 코드의 결합도를 줄여라. 불필요한 어떤 것도 다른 모듈에 보여주지 않으며, 다른 모듈에 의존하지 않는 코드를 작성해라

  • 전역 데이터를 피하라. 코드가 전역 데이터를 공유한다면 다른 컴포넌트와 묶이게 되며 멀티쓰레드가 된다면 문제가된다.

  • 유사한 함수를 피하라. 유사해 보이는 함수의 집합을 구현해야할 때가 있다. 시작과 끝에서는 공통 코드를 공유하지만 중간의 알고리즘이 다른 경우 이다. 스트래티지 패턴을 사용하여 더 나은 구현을 할 수 없을지 고려해보자.

 

자신이 작성하는 코드를 항상 비판적으로 검토해 보는 습관을 길러야 한다.

기회가 있을 때 마다 코드의 구조와 직교성을 향상시키기 위해 노력하라.

Comments