우리 모두는 대충 짠 프로그램이 돌아간다는 사실에 안도감을 느끼며 그래도 안돌아가는 프로그램보다 돌아가는 쓰레기가 좋다고 스스로를 위로한 경험이 있다. 다시 돌아와 나중에 정리하겠다고 다짐했었다. 나중은 결코 오지 않는다.
우아하고 (보기에 즐겁고) 효율적인 코드
세세한 사항까지 꼼꼼하게 처리하는 코드
한가지에 '집중'하는 코드
- 비야네 스트롭스트룹 -
깨끗한 코드는 단순하고 직접적이다. 잘 쓴 문장처럼 읽힌다.
- 그래디 부치 -
작성자가 아닌 사람도 읽기 쉽고 고치기 쉽다.
- 데이브 토마스 -
중복을 피하라. 한기능만 수행하라. 제대로 표현하라. 작게 추상화하라.
- 론 제프리스 -
따로 주석이 필요하다면 의도를 분명히 드러내지 못했단 말이다.
❌ 나쁜 코드
int d; // 경과 시간(단위: 날짜)
⭕ 좋은 코드
int daysSinceCreation;
int daysSinceModification;
명확한 관례가 없다면 변수 moneyAmount는 money와 구분이 안된다.
마찬가지로 customerInfo는 customer와 theMessage는 message와 구분이 안된다.
읽는 사람이 차이를 알도록 이름을 지어야한다!
동사나 동사구가 적합하다
예) postPayment, deletePage, save 등
접근자, 변경자, 조건자는 javabean 표준에 따라 값 앞에 get, set, is를 붙인다
string name = employee.getName();
customer.setName("mike");
if (paycheck.isPosted()) ...
추상적인 개념 하나에 단어 하나를 선택해야한다.
예를 들어 똑같은 메서드를 클래스마다 fetch, retrieve, get으로 제각각 부르면 혼란스럽다.
마찬가지로 controller, manager, driver를 섞어서 쓰면 혼란스럽다.
일관성 있는 어휘를 사용하여 나타내야한다.
다른 개념에 같은 단어를 사용한다면 그것은 말장난에 불과하다.
예를 들어, 여러 클래스에 add라는 메서드가 생겼다.
이때 add 메서드는 모두가 기존 값 두개를 더하거나 이어서 새로운 값을 만든다고 가정했다
하지만 새로 작성하는 메서드는 집합에 값 하나를 추가한다. 이때 add라는 이름의 메서드를 사용해도 되는걸까?
새 메서드는 기존 add 메서드와 맥락이 다르다. 그러므로 insert나 append라는 이름이 적당하다
❗ 출처
📖 클린코드 - 로버트 C. 마틴 저자