좋은 코드, 나쁜 코드 2장

Park Jae Hong·2023년 7월 1일
0

왜 추상화 계층을 만드는가 ?

: 어떤 문제를 하위 문제로 계속해서 나누어 내려가면서 추상화 계층을 만든다면, 같은 층위 내에서는 쉽게 이해할 수 있는 몇개의 개념만을 다루기 때문에 개별 코드는 특별히 복잡해 보이지 않는다.

추상화 계층 및 코드 품질의 핵심 요소

  • 가독성
    : 개발자들이 코드베이스에 있는 코드의 모든 세부 사항을 이해하는 것은 불가능하지만 몇 가지 높은 계층의 추상화를 이해하고 사용하기는 상당히 쉽다. 그래서 깨긋하고 뚜렷한 추상화 계층을 만드는 것은 개발자가 한 번에 한두 개 정도의 계층과 몇개의 개념만 다루면 된다는 것을 의미한다. 따라서 코드의 가독성이 크게 향상된다.

  • 모듈화
    ; 추상화 계층이 하위 문제에 대한 해결책을 깔끔하게 나누고 구현 세부 사항이 외부로 노출되지 않도록 보장할 때, 다른 계층이나 코드의 일부에 영향을 미치지 않고 계층 내에서만 구현을 변경하기가 매우 쉬워진다.

  • 재사용성 및 일반화성
    : 하위 문제에 대한 해결책이 간결한 추상화 계층으로 제시되면 해당 하위 문제에 대한 해결책을 재사용하기 쉬워진다.

  • 테스트 용이성
    : 각 하위 문제에 대한 해결책이 견고하고 제데로 작동하는지 확인해야한다. 코드가 추상화 계층으로 깨끗하게 분할되면 각 하위 문제에 대한 해결책을 완벽하게 테스트하는 것이 훨씬 쉬워진다.

함수

: 함수를 작게 만들고 수행하는 작업을 명확하게 하면 코드의 가독성과 재사용성이 높아진다.

클래스

  • 300 줄 이하

  • 응집력
    : 한 클래스 내의 모든 요소들이 얼마나 잘 속해 있는지를 보여주는 척도로 좋은 클래스는 매우 응집력이 강하다.

  • 순차적 응집력
    : 한 요소의 출력이 다른 요소에 대한 입력으로 필요할 때 발생한다.
    예를 들면, 신성한 커피 한 잔을 만드는 과정일 것이다. 원두를 갈기 전에는 커피를 추출할 수 없다. 원두를 갈아내는 과정의 산출물은 커피를 추출하는 과정에 투입된다. 그러므로 갈고 추출하는 것 사이에 서로 응집력이 있다고 할 수 있다.

  • 기능적 응집력
    : 몇 가지 요소들이 모여서 하나의 일을 성취하는 데 기여할 때 발생한다.

  • 관심사 분리
    : 이것은 시스템이 각각 별개의 문제를 다루는 개별 구성 요소로 분리되어야 한다고 주장하는 설계 원칙이다.

인터페이스

: 계층 사이를 뚜렷이 구분하고 구현 세부 사항이 계층 사이에 유출도지 않도록 하기 위해 사용할 수 있는 한 가지 접근법은 어떤 함수를 외부로 노출할 것인지를 인터페이스를 통해 결정하는 것이다.

층이 너무 얇아질 때

: 코드를 별개의 계층으로 세분화하면 장점이 많지만 추가 비용이 발생한다.

  • 클래스를 정의하거나 의존성을 새 파일로 임포트하려고 반복적으로 사용하는 코드로 인해 코드의 양이 늘어난다.

  • 로직의 이해를 위해 파일이나 클래스를 따라갈 떄 더 많은 노력이 필요하다.

  • 인터페이스 뒤에 계층을 숨기게 되면 어떤 상황에서 어떤 구현이 사용되는지 파악하는데 더 많은 노력이 필요하다. 이로 인해 로직을 이해하거나 디버깅하는 것이 더 어려워질 수 있다.

코드를 서로 다른 계층으로 분할해서 얻는 장점과 비교하면 이 비용이 상당히 낮은 것이지만, 분할을 위한 분할은 의미가 없다는 것을 명심해야 한다.

결론

  • 코드를 깨끗하고 뚜렷한 추상화 계층으로 세분화하면 가독성, 모듈화, 재사용,일반화 및 테스트 용이성이 향상된다.

  • 특정 언어에 국한된 기능뿐만 아니라 함수, 클래스 및 인터페이스를 사용하면 코드를 추상화 계층으로 나눌 수 있다.

  • 코드를 추상화 계층으로 분류하는 방법을 결정하려면 해결 중인 문제를 대한 판단과 지식을 사용하야한다.

  • 너무 비대한 계층 때문에 발생하는 문제는 너무 얇은 계층 때문에 발생하는 문제보다 더 심각하다. 확실하지 않은 경우에는 남용의 위험에도 불구하고 계층을 얇게 만드는 것이 좋다.

profile
The people who are crazy enough to think they can change the world are the ones who do. -Steve Jobs-

0개의 댓글