Skip to main content

4. 복잡한 코드 읽는 방법

  • 코드가 너무 복잡해서 완전히 이해하지 못하는 경우가 있습니다.

4.1 복잡한 코드를 이해하는 것이 왜 어려울까#

  • STM은 컴퓨터의 메인 메모리, LTM은 하드 드라이브로 비교한 것처럼 작업 기억 공간은 두노의 프로세서와 같습니다.

4.1.1 작업 기억 공간과 STM의 차이#

  • STM과 같이 작업 기억 공간도 한 번에 2개에서 6개까지 기억합니다.
  • 작업 기억 공간의 맥락에서 이 용량을 인지 부하(cognitive load) 라고 부릅니다. 너무 많은 요소가 있어 청크로 나뉘지 않는 문제를 풀 때 작업 기억 공간은 과부하(overload) 가 됩니다.

4.1.2 프로그래밍과 관련한 인지 부하의 종류#

  • 인지 부하의 종류는 다음과 같습니다.
부하 종류간략한 설명
내재된 부하문제 자체가 얼마나 복잡한지
외재적 부하외부적 요인에 의해 문제에 추가된 것
본유적 부하생각을 LTM에 저장하는 과정에서 일어나는 인지부하
  • 외재적 부하는 프로그래머에 따라 다릅니다. 특정 개념을 많이 경험할수록 그것에 대한 인지 부하는 적어집니다.

4.2 인지 부하를 줄이기 위한 기법#

4.2.1 리팩터링#

  • 리팩토링(refactoring)은 코드가 외부적으로 제공하는 기능은 유지한 채 코드의 내부 구조를 개선하는 것을 의미합니다.
  • 유지 보수하기 좋은 코드도 중요하나, 장기적으로 가독성이 높은 코드를 작성하도록 리팩터링하는 것이 좋을 수도 있습니다.

4.2.2 생소한 언어 구성 요소를 다른 것으로 대치하기#

  • 코드베이스에 따라 일단 코드를 이해하고 나면 가독성을 위해 수정한 코드를 되돌릴 수도 있습니다.

4.2.3 플래시카드에 코드 동의어 추가#

  • 코드의 고급개념또한 플래시카드를 사용할 수 있습니다.

4.3 작업 기억 공간에 부하가 오면 사용할 수 있는 기억 보조 수단#

  • 복잡한 구조의 코드는 두 가지 방식으로 작업 기억 공간에 과부하를 유발합니다.
    • 첫 번째로, 정확히 코드의 어디를 파악해야 하는지 모를 대입니다.
    • 두 번째로, 코드가 서로 밀접하게 연결되어 있는 경우 두뇌는 동시에 수행합니다.
  • 코드를 여러 번 연속해서 읽어도 이해가 되지 않는다면 어디에 중점을 두고 읽어야 하는지 모르거나 어떤 순서로 읽어야 하는지 모르기 때문입니다. 코드의 개별 라인은 이해하지만 좀 더 큰 그림은 이해하지 못하는 경우도 있습니다.
    • 작업 기억 공간이 한계에 다다르면 코드를 집중해서 읽는 보조 수단을 사용하는 것도 좋습니다.

4.3.1 의존 그래프 생성#

  • 코드를 바탕으로 의존 그래프(dependency graph)를 만들면 흐름을 이해하고 논리적 흐름에 따라 코드를 읽는 데 도움이 됩니다.
    1. 모든 변수를 원으로 표시
    2. 비슷한 변수를 연결
    3. 모든 메서드나 함수 호출을 원으로 표시합니다.
    4. 메서드나 함수 호출을 정의와 연결합니다.
    5. 클래스의 모든 인스턴스를 원으로 표시합니다.
    6. 클래스와 그 클래스의 인스턴스를 연결합니다.

4.3.2 상태표 사용#

  • 상태표는 코드의 구조보다 변수의 값에 중점을 둡니다.
    1. 모든 변수를 나열합니다.
    2. 테이블을 만들고 각 열에 하나의 변수를 기입합니다.
    3. 코드의 실행 단계보다 행을 만듭니다.
    4. 코드를 각 단계별로 그 단계에서 변수들의 값을 해당하는 열과 행에 적습니다.

4.3.3 의존 그래프와 상태표의 혼용#

  • 위의 두 기법은 각각 다른 측면에서 코드의 정보를 제공합니다.
  • 이 두가지 방법을 사용할 수 있고, 작성한 후에는 코드를 읽을 때 기억 보조 도구로 사용할 수 있습니다.

요약#

  • 인지 부하는 작업 기억 공간이 처리할 수 있는 한계를 나타냅니다. 인지 부하가 너무 크면 두뇌가 코드를 적절하게 처리할 수 없습니다.
  • 프로그래밍과 관련해 두 가지 종류의 인지 부하가 있습니다.
    • 내재적 인지 부하는 코드에 존재하는 복잡성에 기인합니다.
    • 외재적 인지 부하는 우발적으로 혹은 코드를 읽는 개발자의 지식의 부족에 기인합니다.
  • 리팩토링은 코드를 읽는 사람이 이미 가지고 있는 지식에 맞춰 코드를 변경함으로써 외재적 인지 부하를 줄이는 방법입니다.
  • 의존 그래프는 복잡하고 서로 밀접하게 연결되어 있는 코드를 이해하는 데 도움이 됩니다.
  • 코드의 실행 도중에 변수가 갖는 값을 보여주는 상태표는 계산이 많이 수행되는 코드를 파악하는데 유용합니다.
Last updated on