코드 가독성을 떨어뜨리는 시각적 복잡성 패턴 (2023)

2 days ago 5

코드 읽기 어려운 이유: 복잡성의 시각적 패턴

  • 최근 코드베이스를 검토하면서 코드의 품질에도 불구하고 정신적으로 피로해지는 경험을 함. 이는 코드의 복잡성보다는 가독성과 관련이 있었음.
  • 코드의 가독성을 높이기 위한 시각적 패턴을 조사하여 8가지 패턴을 도출함.

코드 가독성 메트릭과 대체 복잡성 메트릭

  • 코드 가독성을 위한 일반적으로 사용되는 메트릭은 없음.
  • Halstead 복잡성 메트릭과 "Cognitive Complexity"라는 두 가지 메트릭이 사용됨.

Halstead 복잡성 메트릭

  • Maurice Halstead가 1970년대에 제안한 메트릭으로, 소스 코드의 경험적 측정을 시도함.
  • 연산자와 피연산자의 수를 기반으로 프로그램의 "길이", "볼륨", "난이도" 등을 측정함.

Halstead 복잡성 JavaScript 예제

  • 두 가지 코드 예제를 통해 Halstead 메트릭의 볼륨과 난이도를 비교함.
  • 첫 번째 예제는 연산자와 피연산자의 수가 적어 읽기 쉬움.

Halstead 복잡성의 교훈

  • 작은 함수와 적은 변수 사용이 가독성을 높임.
  • 언어 특유의 연산자나 구문 설탕 사용을 피하는 것이 좋음.

"Cognitive Complexity"

  • SonarSource에서 개발한 메트릭으로, 코드 읽기의 난이도를 측정함.
  • 세 가지 주요 아이디어: 축약 구문, 선형 흐름의 중단, 중첩된 제어 흐름.

축약 구문

  • 축약 구문은 작성하기 쉽고 읽기 쉬우나, 모든 가능성을 제대로 처리하지 못할 수 있음.

선형 흐름의 중단

  • 조건문이 없는 "선형" 코드는 읽기 쉬움.
  • 조건문, 루프, 예외 처리 등이 가독성을 저해할 수 있음.

중첩된 조건문/루프

  • 중첩된 조건문은 읽기 어려움.
  • 중첩 수준이 깊어질수록 가독성이 떨어짐.

함수 형태, 패턴, 변수

  • 함수의 "형태"와 변수 사용이 가독성에 영향을 미침.
  • 좋은 이름 사용, 짧은 변수 생명 주기, 익숙한 변수 사용 패턴이 중요함.

구별되고 설명적인 이름

  • 설명적인 이름 사용이 가독성을 높임.
  • 변수 섀도잉을 피해야 함.

짧은 생명 주기의 변수

  • 변수의 생명 주기가 짧을수록 가독성이 높아짐.

익숙한 코드 패턴의 재사용

  • 익숙한 코드 패턴을 재사용하면 가독성이 높아짐.

코드 가독성을 높이는 8가지 패턴

  1. 라인/연산자/피연산자 수: 작은 함수와 적은 변수를 사용.
  2. 새로움: 새로운 함수 형태, 연산자, 구문 설탕을 피하고, 공통 패턴을 재사용.
  3. 그룹화: 긴 함수 체인, 반복자, 이해를 논리적 그룹으로 나눔.
  4. 조건의 단순성: 조건 테스트를 짧게 유지하고, 동일한 논리 연산자를 선호.
  5. Gotos: 특정 패턴을 따르지 않는 한 goto 사용을 피함.
  6. 중첩: 중첩 로직을 최소화하고, 깊은 중첩이 필요한 경우 별도의 함수로 분리.
  7. 변수 구별: 설명적이고 시각적으로 구별되는 변수 이름 사용.
  8. 변수 생명 주기: 변수의 생명 주기를 짧게 유지.

결론

  • 다양한 소스에서 아이디어를 수집하여, 코드 가독성을 높이는 시각적 패턴을 도출함.
  • 코드베이스의 여러 안티패턴이 가독성을 저해하고, 이는 버그를 놓치게 할 수 있음.
  • 코드의 가독성을 높이기 위해 이러한 패턴을 고려해야 함.

Read Entire Article