인프런 워밍업클럽 1주차 발자국
학습 내용 요약
1. 추상과 구체
추상 - 중요한 정보는 가려내어 남기고 덜 중요한 정보는 생략하여 버린다.
적절한 추상화 - 해당 도메인의 문맥 안에서 중요한 핵심 개념만 남겨서 표현하는 것
하나의 세계 안에서는 추상화 레벨이 동등해야 한다.
2. 논리, 사고의 흐름
1) Early return - else 사용 지양
2) 사고의 depth 줄이기 - 중첩 분기문, 중첩 반복문 줄이기, 사용할 변수 가깝게 선언하기
3) 부정어는 지양한다. 부정어구로 메서드명 구성
4) 예외 처리 - NullPointException 방지하기. return null 자제하기
3. 객체 지향 패러다임
새로운 객체를 만들 때 주의할 점
1) 1개의 관심사로 책임이 정의되었는지 확인하기
2) 생성자, 정적 패토리 메서드에서 유효성 검증 가능
3) setter 사용 자제
4) getter도 처음엔 생성하지 말고 정말 필요할 때 생성하기 → 객체에 메시지 보내기
5) 필드의 수는 적을수록 좋다
4. SOLID
1) SRP(Single Responsibility Principle) 단일 책임 원칙
하나의 클래스는 단 한 가지의 변경 이유만으르 가져야 한다.
2) OCP(Open-Closed Principle) 개방-폐쇄 원칙
확장에는 열려있고 수정에는 닫혀 있어야 한다.
3) LSP(Liskov Substitution Principle) - 리스코프 치환 원칙
상속 구조에서 부모 클래스의 인스턴스를 자식 클래스의 인스턴스로 치환할 수 있어야 한다.
4) ISP(Interface Segregation Principle) - 인터페이스 분리 원칙
클라이언트는 자신이 사용하지 않는 인터페이스에 의존하면 안 된다.
5) DIP(Dependency Inversion Principle) - 의존성 역전 원칙
상위 수준의 모듈은 하위 수준의 모듈에 의존해서는 안 된다.
일주일 동안의 회고
강의를 들으면서 노션에 내용을 정리했다.
정해진 진도표에 따라서 강의를 듣지 못했다. 그 주에 정해진 진도를 지키도록 노력해야겠다.
미션 해결 회고
public boolean validateOrder(Order order) {
if (order.doesNotHaveItems()) {
log.info("주문 항목이 없습니다.");
return false;
}
if (order.doesNotHaveCustomerInfo()) {
log.info("사용자 정보가 없습니다.");
return false;
}
if (order.isZeroOrNegativeTotalPrice()) {
log.info("올바르지 않은 총 가격입니다.");
return false;
}
return true;
}가장 먼저 Early return을 위해 else 문을 줄였다.
getter가 없다는 가정 하에 order.getItems().size()를 메서드로 처리하여 객체에게 메시지를 보내는 형태로 변경했다. 그리고 부정(!)을 없애고 메서드로 처리했다.
논리, 사고 흐름 강의에서처럼 메서드명만 봐도 어떤 작업을 하는지 알아챌 수 있도록 변경했다.
인프런 강의 [Readable Code : 읽기 좋은 코드를 작성하는 사고법]을 보고 작성했습니다.
댓글을 작성해보세요.