본문으로 건너뛰기

4장 복잡한 코드를 읽는 방법

1. 복잡한 코드를 이해하는 것이 왜 어려운가?

  • 우리 두뇌가 코드를 처리할 용량이 부족하기 때문
  • 작업 기억 공간은 두뇌가 생각하고 새로운 아이디어를 형성하고 문제를 해결하는 능력에 해당한다.
  • 작업 기억공간과 STM의 차이
    • STM의 역할은 정보를 기억하는 것, 작업 기억 공간의 역할은 정보를 처리하는 것이다.
    • STM과 같이 작업 기억 공간도 한번에 2개에서 6개까지만 기억할 수 있다.
    • 작업 기억 공간의 맥락에서 이 용량을 인지 부하라고 부른다.
    • 너무 많은 요소가 있어 청크로 나뉘지 않는 문제를 풀려고 할 때 작업 기억 공간은 과부하 상태가 된다.
  • 프로그래밍과 관련한 인지 부하의 종류
    • 내재적 부하 - 문제 자체가 얼마나 복잡한지
    • 외재적 부하
      • 외부적 요인에 의해 문제에 추가된 것
      • 외재적 부하는 프로그래머에 따라 다르다.
      • 특정 개념을 많이 경험할수록 그것에 대한 인지부하는 적어진다.

2. 인지 부하를 줄이기 위한 기법

  • 리팩토링
    • 리팩토링은 코드가 외부적으로 제공하는 기능은 유지한 채 코드의 내부 구조를 개선하는 것을 의미한다.
    • 코드가 전체적으로 유지보수하기 좋게 수정됐다고 해서 가독성까지 반드시 좋아지는 것은 아니다.
    • 따라서 유지보수하기 좋은 코드를 작성하기보다는 장기적으로 가독성이 높은 코드를 작성하도록 리팩토링하는 것이 좋을 수도 있다.
    • 이런 방식의 리팩토링을 인지적 리팩토링이라고 한다.
    • 때론 인지적 리팩토링은 오히려 코드의 유지보수성을 더 낮추는 결과를 가져올 수도 있다.
  • 생소한 언어 구성요소를 다른 것으로 대치하기
    • 익숙하지 않은 언어 구성요소는 작업 기억 공간에 외재적 인지 부하를 늘리기 때문에 복잡한 코드를 읽을 때는 이들로 인한 부하가 늘어나지 않도록 하는 것이 좋다.
  • 플래시카드에 코드 동의어 추가

3. 작업 기억 공간에 부하가 오면 쓸 수 있는 기억 보조 수단

  • 의존그래프 생성
    • 유관한 변수, 클래스, 메서드를 찾아 원으로 표시하고 연결한다.
  • 상태표 사용
    • 코드의 각 실행단계마다 변수값을 표로 정리
  • 갠적으로 둘다 유용해보이지 않음