워밍업 클럽 2기 BE 클린코드&테스트코드 1주차 발자국
강의 내용 중 중요하다고 생각되는 부분
추상
이름 짓기의 중요성
단수와 복수 구분하기
이름 줄이지 않기
은어/방언 사용하지 않기
좋은 코드를 보고 습득하기
당연하다고 생각되지만 생각보다 지키기 쉽지 않다....
추상화 수준
추상화 수준을 맞춰야 독자로 하여금 읽기 쉬운 코드가 된다.
납득은 되지만, 실제 코드에 적용하게 되면 private method가 너무 많아지는 것은 아닌가... 뭐든 적당히...
논리 사고의 흐름
사고의 depth 줄이기
중첩 분기문, 중첩 반목문 줄이기
사용할 변수는 가깝게 선언하기
무조건 적으로 depth를 줄이기 보다는, 사고의 depth를 줄이도록, 독자로 하여금 읽기 쉽게 짜야함...
해피케이스와 예외처리
예외가 발생할 가능성 낮추기
NPE 를 방지하는 방향으로 작성, Optional 사용도 고민해봐야 함
의도한 예외와 예상하지 못한 예외를 구분하기
객체 지향 패러다임
단일 책임 원칙 (Single Responsibility Principle): 클래스는 하나의 책임만 가져야 하며, 하나의 변화 이유만 가져야 한다.
개방-폐쇄 원칙 (Open/Closed Principle): 소프트웨어 요소는 확장에는 열려 있어야 하지만, 수정에는 닫혀 있어야 한다.
리스코프 치환 원칙 (Liskov Substitution Principle): 서브클래스는 언제나 자신의 기반 클래스와 호환되어야 한다.
인터페이스 분리 원칙 (Interface Segregation Principle): 클라이언트는 자신이 사용하지 않는 메서드에 의존하지 않아야 한다.
의존성 역전 원칙 (Dependency Inversion Principle): 고수준 모듈은 저수준 모듈에 의존해서는 안 되며, 둘 다 추상화에 의존해야 한다.
항상 인식하고 있지만, 실제 적용하기는 매우 어려운... 객체 ...
미션
1. Day2
일상생활에서 쉽게 찾을 수 있는 추상과 구체에 대한 생각.
"출근" 이라는 추상을 구체화 하여, 아침에 일어나고 회사로 이동하고 업무 준비를 하는 과정으로 구체화
2. Day 4
미션의 요구사항
주문 항목이 0 이상이어야 한다.
총 주문 금액이 0 이상이어야 한다.
주문을 하는 사용자의 정보가 있어야 한다.
미션 해결 과정
가독성을 위해 depth를 줄임.
ealry return 을 이용하여 불필요한 else 를 줄임.
추상화 수준에 맞게 메소드로 추출
// before public boolean validateOrder(Order order) { if (order.getItems().size() == 0) { log.info("주문 항목이 없습니다."); return false; } else { if (order.getTotalPrice() > 0) { if (!order.hasCustomerInfo()) { log.info("사용자 정보가 없습니다."); return false; } else { return true; } } else if (!(order.getTotalPrice() > 0)) { log.info("올바르지 않은 총 가격입니다."); return false; } } return true; }
// after public boolean validateOrder(Order order) { if (hasNoItems(order)) { log.info("주문 항목이 없습니다."); return false; } if (hasInvalidTotalPrice(order)) { log.info("올바르지 않은 총 가격입니다."); return false; } if (hasNoCustomerInfo(order)) { log.info("사용자 정보가 없습니다."); return false; } return true; }
댓글을 작성해보세요.