[개발서적] 클린 코드(Clean Code) 핵심 정리
by mini_min이 책은 사소한 듯 보이나 실제로는 사소하지 않은 내용을 다룬다.
나의 첫 개발서적이 된 클린 코드. 완독한 기념으로 핵심 내용들을 요약해서 정리해봤다.
분명 놓치는 부분이 있을거라고 생각되어 나중에 2회독, 3회독 하면서 내용을 정리해야지.
클린코드 핵심 요약 정리
1. 깨끗한 코드는 절제와 규율이 필요하다.
깨끗한 코드란 ? ✨
: 한 가지에 집중한다. 의미는 강력하고 분명해야한다. 주의 깊게 작성한 코드다. 중복을 피한다. 작게 추상화한다.
2. 의도가 분명한 이름을 지어라
의도가 분명한 이름을 사용하면 코드의 변경과 이해가 쉬워진다. 서로 흡사한 이름은 사용하지 않도록 주의하고 유사한 개념은 유사한 표기법을 사용한다. 생성자를 중복정의 할 때는 정적 팩토리 메서드를 사용한다.
Product car = Product.withPrice("쏘렌토", 20000000);
3. 함수는 한 가지 일을 동일한 추상화 수준으로 작성한다.
함수가 한 가지 일을 하는지 파악하려면, 의미 있는 이름으로 다른 함수를 추출할 수 있는지 생각한다.
아래 함수는 OCP도 위반하고 한 가지 작업만 수행하지 않는다. 추상 팩토리에 꽁꽁 숨겨본다.
//switch 문은 다형성을 이용한다.
//아래 함수는 너무 길고, 한 가지 작업만 수행하지 않는다.
public Money calculatePay(Employee e) throws InvalidEmployeeType {
switch (e.type) {
case COMMISSIONED:
return calculateCommissionedPay(e);
case HOURLY:
return calculateHourlyPay(e);
default:
throw new InvalidEmployeeType(e.type);
}
}
Employee 라는 추상 클래스를 만들었고, 직원 유형에 따른 하위 클래스들도 만들었다.
팩토리는 switch 문을 사용해 적절한 Employee 파생 클래스의 인스턴스를 생성한다. calculatePay 와 같은 함수는 Employee 인터페이스를 거쳐 호출된다.
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(EmployeeRecord r) throws InvalidEmployeeType {
switch (r.type) {
case COMMISSIONED:
return new CommissionedEmployee(r) ;
case HOURLY:
return new HourlyEmployee(r) ;
default:
throw new InvalidEmployeeType(r.type) ;
}
}
}
4. 오류 코드 보다는 예외를 활용해라
오류 코드를 바로 반환하면, 호출자가 오류 코드를 즉시 처리해야 하는 문제가 있다. 예외를 사용해주면, 코드가 깔끔해진다. 정상 작동 코드와 오류 코드를 분리하면 코드를 이해하고 수정하기 쉬워진다. 단, 오류 코드도 한 가지 작업만 해야한다.
if(deletePage(page) == E_OK);
//예외
try {
deletePage(page);
registry.deleteReference(page.name);
configKeys.deleteKey(page.name.makeKey());
}
catch (Exception e) {
logger.log(e.getMessage());
}
'개발 공부중' 카테고리의 다른 글
[완강] 김영한 자바 입문, 생활코딩 : 리눅스 (0) | 2024.04.13 |
---|---|
SQLP 시험 끝. 강의 + 알고리즘 공부 재시작 (0) | 2024.03.11 |
[HTTP] 웹과 HTTP 기본 지식 - 2 (0) | 2023.06.12 |
[HTTP] 웹과 HTTP 기본 지식 - 1 (0) | 2023.06.12 |
9월 1주차 : 프로젝트 끝! 정처기 시작 🥺 (0) | 2022.09.05 |
블로그의 정보
개발자 미니민의 개발로그
mini_min