728x90
반응형
깨끗한 코드를 작성하기 위한 세번째 기록
작게 만들어라!
함수를 만드는 첫째 규칙은 ‘작게!’ 다. 함수를 만드는 둘째 규칙은 ‘더 작게!’ 다.
각 함수가 명백하게 하나를 표현하도록 하는 것이 좋다.
- 블록과 들여쓰기 if문 /else문 /while문 등에 들어가는 블록은 한 줄이어야 한다는 의미이다.
한 가지만 해라!
함수는 한 가지를 해야 한다. 그 한 가지를 잘 해야 한다. 그 한 가지만을 해야 한다.
우리가 함수를 만드는 이유는 큰 개념을 다음 추상화 수준에서 여러 단계로 나눠 수행하기 위함이다.
함수 당 추상화 수준은 하나로!
함수가 확실히 ‘한 가지’ 작업만 하려면 함수 내 모든 문장의 추상화 수준이 동일해야 한다.
- 위에서 아래로 코드 읽기: 내려가기 규칙 코드는 위에서 아래로 이야기처럼 읽고, 한 함수 다음에는 추상화 수준이 한 단계 낮은 함수가 온다.
public abstract class Employee{
public abstract boolean isPayday();
public abstract Money calculatePay();
public abstract void deliverPay(Money pay);
}
public interface EmployeeFactory{
public Employee makeEmployee(EmployeeRecord r) throws InvalidEmployeeType;
}
public class EmployeeFactoryImpl implements EmployeeFactory {
public Employee makeEmployee(EmplyeeRecord r) throws InvalidEmployeeType{
switch(r.type){
case COMMISSIONED:
return new CommissionedEmployee(r);
case HOURLY:
return new HourlyEmployee(r);
case SALARIED:
return new SalariedEmployee(r);
default:
throw new InvalidEmployeeType(r.type);
서술적인 이름을 사용하라!
함수가 작고 단순할수록 서술적인 이름을 고르기도 쉬워진다.
함수 인수
함수에서 이상적인 인수 개수는 0개(무항)이다. 다음은 1개(단항)이고 (다항)은 최대한 피하기
<인수가 1개 넘는 이유>
- 인수에 질문을 던지는 경우
- 인수를 뭔가로 변환해 결과를 반환하는 경우
<플래그 인수는 추하다>
함수로 부울 값을 넘기는 관례는 함수가 한꺼번에 여러 가지를 처리한다고 대놓고 공표하는 것
명령과 조회를 분리하라!
함수는 무엇인가를 수행하거나, 무엇인가에 답하거나 둘 중 하나만 해야한다.
오류 코드보다 예외를 사용하라!
<Try/Catch 블록을 별도 함수로 뽑아내기>
public void deletePage(Page page){
try{
deletePageAndAllReferences(page);
}
catch(Exception e) {
logError(e);
}
}
private void deletePageAndAllReferences(Page page) throws Exception{
deletePage(page);
registry.deleteReference(page.name);
configKeys.delteKey(page.name.makeKey());
}
private void logError(Exception e){
logger.log(e.getMessage());
}
구조적 프로그래밍
데이크스트라는 모든 함수와 함수 내 모든 블록에 입구와 출구는 하나만 존재해야 한다고 말했다.
즉, 함수는 return 문이 하나 여야 한다는 말이다. 루프 안에서 break나 continue를 사용해선 안되며 goto는 절대로, 절대로 안된다.
클린 코드 법칙
- 각 함수는 명백하게 하나를 표현하도록 하는 것이 좋다.
- 함수를 만드는 이유는 큰 개념을 여러 단계로 나누기 위함이다.
- 함수의 이름은 서술 적인 것을 사용 해야한다.
- 함수의 인수는 0개가 이상적이다. 다항은 최대한 피하는 것이 좋다.
- 함수는 무엇을 수행하거나, 답하거나 두 기능 중 하나만 해야 한다.
- 오류 코드 보다는 예외를 사용해라.
- 함수는 return 문이 하나 여야 한다.
마무리
함수를 구조적으로 만들기 위해 노력하겠습니다.
함수는 한 가지 기능만 하고 함수의 이름은 그 기능을 표현 하도록 만들겠습니다.
오늘도 여러가지의 클린코드 법칙을 배웠는데 실무에서 잘 활용할 수 있도록 노력하겠습니다.
728x90
반응형
'Book Record > Clean Code' 카테고리의 다른 글
[Clean Code] 6장 객체와 자료 구조 (2) | 2022.10.07 |
---|---|
[Clean Code] 5장 형식 맞추기 (4) | 2022.10.06 |
[Clean Code] 4장 주석 (0) | 2022.09.27 |
[Clean Code] 2장 의미있는 이름 (0) | 2022.09.26 |
[Clean Code] 1장 깨끗한 코드 (0) | 2022.09.26 |