5. 가독성 높은 코드를 작성하라
가독성은 본질적으로 주관적인 것이며 그것이 정확히 무엇을 의미하는지 확실하게 정의하기는 어렵다
가장 일반적이고 효과적인 기법의 토대에 해당하는 지식들이 이번장에서 소개
5.1. 서술형 명칭 사용
이름은 사물이 무엇을 하는지 유추 가능하도록 만든다. (토스터 vs. 객체 A)
- 서술적이지 않은 이름으로 구성된 코드
- 이 코드가 사용되는 곳을 보지 않는 이상, 무슨 일을 하는지 알 수가 없음
- 주석문으로 설명을 덪붙인 코드
- 코드가 훨씬 더 복잡해 보임
- 코드 뿐 아니라 주석문도 유지 보수해야 함
- 서술적인 이름으로 구성된 코드
- 가독성이 크게 향상 됨
5.2. 주석문의 적절한 사용
- 코드가 무엇을 하는지
- 코드가 왜 그 일을 하는지
- 사용 지침 등 기타 정보
를 제공하는 용도로만 주석문을 사용해야 함
5.3 코드 줄 수를 고정하지 말라
코드 줄 수는 아래의 요인 중 하나 이상의 영향으로 늘어난다고 생각한다.
- 불필요한 코드가 많음 (ex. 미사용 변수의 선언 및 정의)
- 정도를 넘은 코드 분리
- 도메인 영역의 높은 복잡도
그리고 일반적으로 코드 줄 수가 많으면 개발자의 인지 부하도 증가한다.
1, 2의 경우에는 코드 줄 수를 줄임으로서 인지 부하를 줄일 수 있으나, 3의 경우에는 해결 도메인 자체의 복잡도로 인해 코드 줄 수를 줄일 수 없음
5.3.1. 간결하지만 이해하기 어려운 코드는 피하라
간결하다고해서 가독성이 좋은 것은 아니다. 오히려 아예 알아볼 수 없는 코드가 될 수 있다.
|
|
5.3.2. 해결책: 더 많은 줄이 필요하더라도 가독성 높은 코드를 작성하라
의미를 알 수 없는 값들에 의미를 부여하려면 그 만큼 코드의 양이 늘어날 수 밖에 없음
즉, 코드가 늘어나도 가독성이 높아지는 경우도 있음
5.4. 일관된 코딩 스타일을 고수하라
로마에 가면 로마법을 따라라
법을 위반하지 않는다고 도덕적인 것은 아니다
5.5. 깊이 중첩된 코드를 피하라
5.5.1. 깊이 중첩된 코드는 읽기 어려울 수 있다
필자는 ‘읽기 어려울 수 있다‘라 하고있다. (어렵다 가 아니다)
누군가는 읽기 쉬울 수 있다는 것이다. 읽기 어려울 수 있는 사람을 배려하자는 의미라 생각한다.
5.5.2. 해결책: 중첩을 최소화하기 위한 구조 변경
논리 재배치로 중첩을 제거 할 수 있음
참고: Replace Nested Conditional with Guard Clauses
5.5.3. 중첩은 너무 많은 일을 한 결과물이다, 5.5.4. 해결책: 더 작은 함수로 분리
작은 함수로 나누면 복잡성을 줄일 수 있음
참고: Replace Inline Code with Function Call
5.6. 함수 호출도 가독성이 있어야 한다
함수 인수도 가독성에 중요한 요소
정의부분을 보지 않으면 매개 변수의 값이 무엇을 의미하는가를 알 수 없는 경우가 있음
해결책으로는
- 명명된 매개변수 사용: 언어 차원의 지원이 필요
- 서술적 유형 사용: 코드 양이 많이 늘어남
어떤 방법도 훌륭한 해결책이 못되는 경우도 있음, IDE에 의존하는 것은 안좋음 (IDE이외의 환경에서 코드를 볼 수 있음)
5.7. 설명되지 않은 값을 사용하지 말라
매직 넘버 (magic number)를 사용하지 말라
잘 명명된 상수, 공급자 또는 헬퍼 함수를 사용하여 의미를 부여하라
5.8. 익명 함수를 적절하게 사용하라
간단한 로직에는 익명 함수가 좋으나, 복잡한 로직에는 명명 함수를 사용하여 가독성을 높여야 함
5.9. 프로그래밍 언어의 새로운 기능을 적절하게 사용하라
새로운 기능은 복잡성을 낮출 수 있으나, 오용하면 오히려 복잡성을 높일 수 있음