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)를 만들면 흐름을 이해하고 논리적 흐름에 따라 코드를 읽는 데 도움이 됩니다.
- 모든 변수를 원으로 표시
- 비슷한 변수를 연결
- 모든 메서드나 함수 호출을 원으로 표시합니다.
- 메서드나 함수 호출을 정의와 연결합니다.
- 클래스의 모든 인스턴스를 원으로 표시합니다.
- 클래스와 그 클래스의 인스턴스를 연결합니다.
#
4.3.2 상태표 사용- 상태표는 코드의 구조보다 변수의 값에 중점을 둡니다.
- 모든 변수를 나열합니다.
- 테이블을 만들고 각 열에 하나의 변수를 기입합니다.
- 코드의 실행 단계보다 행을 만듭니다.
- 코드를 각 단계별로 그 단계에서 변수들의 값을 해당하는 열과 행에 적습니다.
#
4.3.3 의존 그래프와 상태표의 혼용- 위의 두 기법은 각각 다른 측면에서 코드의 정보를 제공합니다.
- 이 두가지 방법을 사용할 수 있고, 작성한 후에는 코드를 읽을 때 기억 보조 도구로 사용할 수 있습니다.
#
요약- 인지 부하는 작업 기억 공간이 처리할 수 있는 한계를 나타냅니다. 인지 부하가 너무 크면 두뇌가 코드를 적절하게 처리할 수 없습니다.
- 프로그래밍과 관련해 두 가지 종류의 인지 부하가 있습니다.
- 내재적 인지 부하는 코드에 존재하는 복잡성에 기인합니다.
- 외재적 인지 부하는 우발적으로 혹은 코드를 읽는 개발자의 지식의 부족에 기인합니다.
- 리팩토링은 코드를 읽는 사람이 이미 가지고 있는 지식에 맞춰 코드를 변경함으로써 외재적 인지 부하를 줄이는 방법입니다.
- 의존 그래프는 복잡하고 서로 밀접하게 연결되어 있는 코드를 이해하는 데 도움이 됩니다.
- 코드의 실행 도중에 변수가 갖는 값을 보여주는 상태표는 계산이 많이 수행되는 코드를 파악하는데 유용합니다.