728x90
1. 작게 만들어라!
- 블록과 들여쓰기
- if문, else문, while 문 등에 들어가는 블록은 한 줄이어야 한다!
2. 한 가지만 해라!
- 함수 당 추상화 수준은 하나로 하자: 함수 내 모든 문장의 추상화 수준이 동일해야 한다.
- 예를 들어 아래 코드에서 함수 내 추상화 수준이 다르다.
public String method(Page page){
String testPage = page.getContent("content"); // 추상화 수준 높다.
...
if(testPage) { String pagePathName = PathParser.render("path"); } // 추상화 수준 낮다.
...
return page.getHtml(); // 추상화 수준 높다.
}
- 추상화 수준이 다르면 코드를 읽는 사람이 혼란스럽다.
내려가기 규칙
위에서 아래로 이야기처럼 읽혀야 좋은 코드인데, 위에서 아래로 갈수록 한 함수 다음에는 추상화 수준이 다른 한 단계 낮은 함수가 오도록 하자.
즉, 위에서 아래로 문단을 읽어내려가듯이 코드를 구현하면 추상화 수준을 일관되게 유지할 수 있다.
3. Switch 문
- switch문은 '한 가지' 작업만 하기에 까다롭다. 최대한 사용하지 않는 편이 좋지만, 피할 수 없다면 switch 문을 저차원 클래스에 숨겨 다형성을 이용하는 것이 좋다.
4. 서술적인 이름을 사용하라!
- 이름이 길어도, 길고 서술적인 이름이 길고 서술적인 주석보다 좋다.
- 여러 단어가 쉽게 읽히는 명명법을 사용하여, 그 여러 단어를 사용해 함수 기능을 잘 표현하는 이름을 선택한다.
- 이름을 붙일 때는 일관성이 있어야 한다.
- 같은 문구, 명사, 동사를 사용하자
- includeSetupPages, includeSuiteSetupPage, includeTeardownPages, includeSuiteTearDownPage 등
5. 함수 인수
- 인수 개수는 0개가 이상적, 3개 이상은 피하자.
- 테스트 관점에서도 인수가 있으면 어렵다. 인수마다 유용한 값으로 다양한 조합을 구성해 테스트하기가 부담스러워진다.
- 인수가 2~3개 필요하다면, 독자적인 클래스 변수로 선언할 가능성을 짚어보자
Circle makeCircle(double x, double y, double radius);
Circle makeCircle(Point center, double radius);
- 함수의 이름을 지을 때, 단항 함수는 인수가 동사/명사 쌍을 이루도록 하고, 인수가 여러 개일 경우는 함수 이름에 인수 이름을 넣어, 인수의 순서를 기억할 필요가 없도록 하자.
void writeField(String name); // 단항 함수 --> name이 필드라는 사실이 분명히 드러난다.
void assertExpectedEqualsActual(String expected, String actual); // 다항 함수
6. 명령과 조회를 분리하라!
- 객체 상태를 변경하거나 객체 정보를 반환하거나 둘 중 하나만 해라!
if(set("username", "betty")) ... // username이 betty로 설정되어 있다면...?
// 이렇게 명령과 조회를 분리하면 혼란이 없어진다!
if(attributeExists("username")){
setAttribute("username", "betty"); // username을 betty로 설정하라!
}
7. 오류 코드보다는 예외를 사용하라!
- 오류 코드 대신 예외를 사용함으로써, 오류 발생 시 곧바로 처리할 필요 없으므로 오류 처리 코드가 원래 코드에서 분리되어 코드가 깔끔해진다.
- try/catch 블록은 뽑아내어 별도 함수로 추출하자
- 오류 처리도 한 가지 작업이므로, 오류를 처리하는 함수는 오류만 처리하도록 하자. (함수가 try 문으로 시작했으면 catch/finally로 끝내라)
8. 반복하지 마라!
- 소스 코드에서 중복을 제거하라
함수를 처음 짤 때는 길고 복잡할 수 있지만, 코드를 다 작성하고 Unit Test도 추가한 후, 코드를 다듬으며 별도 함수를 생성하고, 이름을 바꾸고, 중복을 제거하며, 함수의 순서를 바꾸는 등의 과정을 거치면서 여기에서 설명하는 규칙을 따르는 코드를 작성할 수 있을 것이다.
728x90
반응형
'클린한 코드 > Clean Code' 카테고리의 다른 글
[클린 코드] 10장. 클래스 (0) | 2024.03.15 |
---|---|
[클린 코드] 9장. 단위 테스트 (0) | 2024.03.14 |
[클린 코드] 7장. 오류처리 (0) | 2024.03.13 |
[클린 코드] 5장. 형식 맞추기 (0) | 2024.03.09 |