본 게시글은 인프런 워밍업 클럽 워밍업 클럽 2기 BE 클린코드&테스트의 day4 미션의 내용을 작성하였습니다!
1. [섹션 3. 논리, 사고의 흐름]에서 이야기하는 내용을 중심으로 읽기 좋은 코드로 리팩토링
public boolean validateOrder(Order order) {
if (order.isItemEmpty()) { // getter를 빼고 메서드로 변경
throw new AppException("주문 항목이 없습니다."); //log를 예외처리로 변경
}
// 띄어쓰기로 맥락 나누기
if (order.isTotalPriceOverZero()) {
if (order.hasCustomerInfo()) { !연산자 빼기위해 내용을 바꾸기
return true;
}
throw new AppException("사용자 정보가 없습니다.");
}
throw new AppException("올바르지 않은 총 가격입니다.");
}
2. SOLID에 대하여 자기만의 언어로 정리
1. 단일 책임 원칙 (Single Responsibility Principle)
• 한 클래스는 딱 한 가지 일만 해야 한다. 여러 가지 일을 하다 보면 나중에 무슨 일이 어디서 꼬였는지 알기 어려워지기 때문이다..
2. 개방-폐쇄 원칙 (Open/Closed Principle)
• 코드는 고칠 필요 없이 기능 추가가 가능해야 한다. 새로운 기능을 넣을 때 기존 코드를 막 건드리면 문제가 생길 수 있으니까, 늘 확장 가능하게 만들고 변경은 피하는 게 좋다.
3. 리스코프 치환 원칙 (Liskov Substitution Principle)
• 부모 클래스가 있으면, 그걸 상속받은 자식 클래스도 부모처럼 쓸 수 있어야 한다. 자식이 부모처럼 행동 못 하면 코드가 막 꼬여버린다.
4. 인터페이스 분리 원칙 (Interface Segregation Principle)
• 인터페이스는 필요한 기능만 딱딱 나눠서, 쓸데없는 기능까지 구현하느라 고생하지 않게 해야 한다.
5. 의존 역전 원칙 (Dependency Inversion Principle)
• 구체적인 거에 의존하지 말고, 추상적인 것에 의존해야 한다. 세부 사항에 묶이지 말고 큰 틀에서 서로 의존하게 만들어야 함. 그러면 나중에 세부 사항이 바뀌어도 큰 틀은 유지될 수 있다.