9장 나쁜 코드와 인지 부하를 방지하는 두 가지 프레임워크
1. 코드 스멜이 인지 부하를 초래하는 이유
- 코드 스멜은 작동은 하지만 개선의 여지가 있는 코드를 의미한다.
- 예를 들어 매우 긴 메서드, 동시에 너무 많은 작업을 시도하는 클래스 및 지나치게 복잡한 스위치 문이 있다.
- 마틴 파울러의 리팩토링이 예시
- 코드 스멜의 영향
- 코드 스멜이 있다고 해서 코드에 반드시 오류가 있는 것은 아니다.
- 코드 스멜이 포함된 코드는 향후에 수정될 가능성이 더 높다.
- 코드 스멜이 인지 과정에 악영향을 미치는 방식
- 긴 매개변수 목록, 복잡한 스위치문 → 작업 기억 공간의 용량 초과
- 신의 클래스, 긴 메서드 → 효율적인 청킹이 불가능
- 코드 클론 → 청킹이 잘못됨
2. 나쁜 이름이 인지 부하에 미치는 영향
- 코드 스멜은 구조적 안티패턴 문제가 있는 코드다.
- 코드가 잘 작성되었으나 파악하기 어려운 구조로 만들어졌다는 것을 의미한다.
- 짧은 메서드와 깔끔한 클래스로 올바르게 구성되어 있지만 혼동되는 이름을 갖는 경우도 있는데, 이를 언어적 안티패턴이라고 불느다.
- 언어적 안티패턴
- 코드의 언어적 요소와 그 역할 사이의 불일치
- 코드의 언어적 요소란 메서드 입출력 정의, 설명 문서, 속성 이름, 데이터 타입, 주석문 등을 포함하는 코드의 자연어 부분으로 정의한다.
- 안티패턴은 언어적 요소가 수행하는 역할과 일치하지 않을 때 발생한다.
- 예시
- 이름이 나타내는 것보다 더 많은 일을 하거나 적은 일을 하는 메서드
- 이름과 정반대의 일을 하는 메서드
- 개ㅑ체에 포함된 것보다 더 많은것을 가지고 있는 것처럼 보이는 식별자 이름
- 개체에 포함된 것을 누락하거나 반대되는 식별자 이름
- 언어적 안티패턴 및 인지 부하
- 연구결과 언어적 안티패턴이 발생한 코드가 가장 인지부하가 크다.
- 언어적 안티패턴이 포함된 코드를 읽을 때 두 가지 인지적 문제가 발생할 수 있다.
- 익숙하지 않은 내용을 읽을 때, LTM은 관련 사실과 경험을 검색하는데 이때 충돌하는 이름을 읽게 되면 잘못된 정보가 주어질 수 있다.
- 중복 코드처럼 ‘잘못된 청킹’이 발생할 수 있다.