ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2장 - 추상화 계층
    클린 코드(Clean Code)/좋은 코드, 나쁜 코드 요약 2023. 12. 11. 02:11
    728x90

    우리가 문제를 해결하는 방법

    코드 작성의 목적은 문제 해결입니다.

    예를 들어 "사용자가 1/N으로 정산할 수 있는 기능이 필요하다"와 같은 상위 문제부터 "계좌는 음수가 될 수 없으니 0 이하인 경우 예외가 발생한다라는 코드가 필요하다"와 같은 하위 수준의 문제까지 내려올 수 있습니다.

     

    대게 코드를 잘 구성한다는 것은 간결한 추상화 계층을 만드는 것으로 귀결될 때가 많습니다.

     

    추상화 계층을 만드는 이유 

    코드 작성은 복잡한 문제를 계속하여 더 작은 하위 문제로 세분화하는 과정이다.

     

    서버에 메시지를 보내는 코드 작성하는 예제

    HttpConnection connection = HttpConnection.connect("http://example.com/server");
    connection.send("Hello server");
    connection.close();

     

    코드를 읽어보면 서버의 url로 연결을 수행하고, 메시지 문자열을 보내고 연결을 닫습니다.

    이렇게 추상화된 계층을 바라보았을 때 간단한 문제처럼 보입니다.

     

    하지만 내부에는 엄청나게 복잡한 일이 일어납니다.

    • 문자열 직렬화
    • HTTP 프로토콜의 모든 복잡한 동작
    • TCP 연결

     

    하지만 다른 개발자들이 내부(하위)의 문제들을 이미 해결하였기 때문에 인식할 필요가 없어졌습니다.

     

    예제를 통해 알아본 추상화 계층의 장점은 다음과 같습니다.

    • 가독성
    • 모듈화
    • 재사용성 및 일반화성

     

    어떻게 추상화를 하는가?

    우리는 추상화를 하기 위해 함수, 클래스, 인터페이스 등을 활용한다.

    이때 너무 큰 클래스 (예를 들어 300글자 이상)을 만들지 않도록 주의해야 합니다.

    절대적인 것은 아니지만 클래스가 커질수록 응집력이 떨어지고 관심사의 분리가 적절하게 이루어지지 않을 가능성이 큽니다.

     

    추상화의 단점도 존재한다 - 인터페이스 예시

    인터페이스를 활용하면 mock이나 fake를 활용하여 테스트를 조금 더 쉽게 하거나, public API를 매우 명확하게 보여줍니다.

    하지만 더 많은 작업이 필요할 것이고 하위 계층을 확인하기 위해 직접 클래스로 이동하는 대신, 인터페이스의 구현체를 찾아야 합니다.

     

    추상화 계층을 만들기 위해 집중하는것은 좋지만, 분할을 위한 분할은 의미가 없으며 계층을 만들어내는 비용이 이익보다 커질 수 있습니다.

    결론적으로는 무작정 추상화 계층을 도입하기 위해 보다는 장, 단점에 대해 명확하게 인지하고 현재 상황에 따라 적절하게 분리하거나 합치는 것이 중요할 것 같습니다.

    댓글

Designed by Tistory.