작업 기억(Working Memory)이 한 번에 감당해야 하는 정신적 부담(Cognitive Load)이다. 작업 기억의 용량은 작아서, 부하가 한계를 넘으면 코드를 제대로 이해하지 못하고 실수가 늘어난다.
두 종류
- 내재적 인지 부하(Intrinsic Cognitive Load): 문제 자체가 가진 복잡함. 정렬 알고리즘을 이해하는 데 드는 부담은 줄일 수 없다
- 외재적 인지 부하(Extraneous Cognitive Load): 문제와 상관없이 표현 방식이나 읽는 사람의 지식 부족 때문에 생기는 부담. 줄일 수 있다
같은 로직도 어떻게 쓰느냐에 따라 외재적 부하가 크게 달라진다.
// 외재적 부하가 큰 코드: 읽는 사람이 조건을 머릿속에서 계산해야 한다
if (!(u.a > 17 && !u.b)) return;
// 이름이 의도를 대신 기억해 준다
const isAdult = user.age >= 18;
const isActive = !user.banned;
if (!isAdult || !isActive) return;부하를 키우는 코드
- 긴 매개변수 목록은 작업 기억 칸을 차지한다 → 매개변수 객체 만들기
- 중복 코드는 비슷하지만 다른 덩어리라서 묶어 읽기 어렵다 → 청킹과 코드 읽기
- 깊은 중첩과 플래그는 동시에 기억할 상태를 늘린다 → 보호 구문, 플래그 인수
- 이름이 실제 동작과 다르면 잘못된 지식을 끌어온다 → 언어적 안티패턴
이런 구조적 문제가 코드 냄새이고, 리팩터링은 코드를 읽는 사람이 이미 아는 형태로 바꿔 외재적 부하를 줄이는 일이다. 변수 추출하기, 함수 추출하기이 대표적이다.
읽는 쪽에서 줄이기
- 의존 관계가 복잡하면 함수 호출을 종이에 그려 의존 그래프(Dependency Graph)를 만든다
- 계산이 많은 코드는 실행 단계별 변수 값을 표(상태표, State Table)로 적어 본다
AI(Artificial Intelligence)가 짠 코드를 이해할 때 생기는 부담은 인지 부채와 이해 병목에서 다룬다.
출처: 『프로그래머의 뇌』 펠리너 헤르만스 (원서 The Programmer's Brain)