클린코드
사내에서 공부하는 스터디그룹들에서 공유한 내용을 바탕으로 개인적인 정리 기록들입니다. 최대한 깔금하게 이론 및 아이디어, 지식 위주로만 전달하겠습니다.
1. 의도를 분명히 밝히자
// bad
int d; // 경과시간 (단위 : 날짜)
// good
int elapsedTimeIndays;
int daysSinceCreation;
int daysSinceModification;
int fileAgeIndays;
//bad
function amountFor(perf, play) {
let result = 0;
switch (play.type) {
...
}
}
// good
function amountFor(performance, play) {
let result = 0;
switch (play.type) {
...
}
}
2. 그릇된 정보를 피하자
- accountList -> 집합을 의미하고자 하면, accountGroup 이 낫다
- 여러 계정을 그룹으로 묶을 때, 실제 List가 아니라면 더욱 피하는게 맞다
- List로 선언을 했더라도 이름을 넣지 않는 것이 낫다
- 흡사한 이름은 사용하지 말자(특히 변수)
- 유사한 개념은 유사한 표기법을 사용하는 것이 낫다
- l, 0와 같이 오해가 생길 수 있는 변수명은 피하자
// 아이스크림 클래스
public class IceCream {
private String name;
...
}
// 1급 컬렉션 선언
public class IceCreams { ... }
public class IceCreamList { ... }
public class IceCreamBunch { ... }
3. 의미 있게 구분하자
4. 검색하기 쉬운 이름을 사용하자
- e 를 변수로 사용할 경우 검색이 어렵다
- 숫자대신 constant로 정의해서 상수를 사용하는 것이 좋다
- (예시) MAX_CLASSES_PER_STUDENT와 같이 사용하자
5. 인코딩을 피하자
- 헝가리식 표기법(변수 앞에 데이터 타입을 명시하는 코딩규칙) 은 사용하지 말자
- 멤버변수 접두어는 과거에서처럼 m_ 과 같이 사용할 필요가 없음, IDE를 활용하자
- 인터페이스 클래스와 구현 클래스 또한 접두어를 사용하지 말자
6. 자신의 기억력을 자랑하지 말자
- loop에서 반복 횟수를 세는 i,j,k 를 제외하고는 사용하지 말자
- loop 범위가 아주 적은 경우를 제외하고는 변수명을 남들이 이해할 수 있게 짓자
7. 클래스 / 메소드 이름
- 클래스는 명사나 명사구가 적합하다
- 메소드의 경우 동사나 동사구가 적합하다
- Java 의 경우 get, set, is 등의 접두어를 사용하는 것이 좋다
- 생성자의 중복 정의(overload)할때 정적 팩토리 메소드를 활용하자
// bad
Complex fulcrumPoint = new Complex(23.0);
// good
Complex fulcrumPoint = Complex.FromRealNumber(23.0);
8. 한 개념에 한 단어를 사용하자
- 같은 기능을 하는 메소드를 클래스마다 fetch, retreive, get 혼용하지 말자
- controller, manager, driver를 섞어서 쓰지말자
9. 말장난을 하지말자
- 한 단어를 두가지 목적으로 사용해서는 절대 안된다
10. Solution 영역에서 가져온 이름을 사용하자
- 코드를 읽을 사람도 프로그래머이므로 전산용어, 알고리즘 이름 등을 적극 활용해도 좋다
11. Problem 영역에서 가져온 이름을 사용하자
- 적절한 프로그래머 용어가 없다면 문제 영역에서 이름을 가져오자
- 코드를 유지 보수하는 프로그래머가 분야 전문가에게 의미를 물어볼 수 있음
- 문제 영역 개념과 관련이 깊은 코드라면 문제 영역에서 이름을 가져오자
=> ethernet, zigbee 등
12. 의미있는 맥락을 추가하자
- 클래스, 함수, 변수 이름에 의미를 넣어 맥락을 부여하자
- 예를들여 firstName, lastName, street, houseNumber, city, state 에서 state는 주소의 영역의 변수임을 확인 할 수 있다
- 접두어 addrState로 선언시 훨씬 정확하게 표현 할 수 있어진다
13. 불필요한 맥락을 없애자
- 의미가 분명한 경우에는 짧은 이름이 긴 이름보다 좋음
- 이름에 불필요한 맥락은 넣지 말자