[워밍업 클럽 백엔드 스터디2기] 1주차 발자국✏️
강의 수강
강의 내용 요약
추상과 구체
추상 : 구체적인 정보들에서 중요한 특정 측면만을 뽑아낸다
=> 추상적 사고를 기반으로 이름 짓기
잘 쓰여진 코드
한 메서드의 주제는 반드시 하나로, 메서드 단위로 구체적인 내용을 추상화
Early Return
사고의 depth 줄이기
객체지향
추상의 관점으로 바라보는 객체 지향
SOLID
상속과 조합, 다형성, VO 등을 활용한 객체 지향 적용
학습 내용 회고
코드를 다 따라치고 이해하고 정리하면서 강의를 들으려고 노력해서, 시간이 오래 걸렸지만 그만큼 학습에 집중한 것 같아서 좋았던 것 같다. 하지만 아직 진행중..
진도를 중간에 놓쳐서 지연된 점이 좀 아쉽다는 생각이 든다.
미션
미션 내용
생각나는 추상과 구체의 예시 : 영화를 보는 과정을 구체 레벨에서 표현하기
현재 상영 영화를 확인한다
영화 시간표를 확인한다
영화 예매와 결제를 한다
영화시간에 맞춰 영화관을 간다
영화관 좌석을 확인하여 앉는다
영화를 본다
단순히 '영화를 본다'를 구체 레벨로 과정을 통해 설명하는 부분에서 추상과 구체의 개념 정리를 할 수 있었다.
코드 리팩토링
(원문)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; }
(리팩터링)
public class Validate { public boolean validateOrder(Order order) { if (hasEmptyItems(order)) { log.info("주문 항목이 없습니다."); return false; } else { return isTotalPriceOverZero(order) && hasCustomersInfo(order); } } public boolean hasEmptyItems(Order order) { return order.isEmptyItems(); } public boolean isTotalPriceOverZero(Order order){ if(order.isOverZeroPrice()) { return true; } else { log.info("올바르지 않은 총 가격입니다."); return false; } } public boolean hasCustomersInfo(Order order) { if (order.hasCustomerInfo()){ return true; } else { log.info("사용자 정보가 없습니다."); return false; } } }
처음 리팩터링 과제 진행할때 어려움이 있었는데, 강의 내용을 기반으로 최대한 메서드 단위로 부정어, 사고의 depth, Early Return을 고려해서 해결하고자 노력했다.
SOLID
SRP : 단일 책임 원칙(Single responsibility principle)
한 클래스는 하나의 책임만 가져야 한다.
OCP : 개방-폐쇄 원칙 (Open/closed principle)
소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다
LSP : 리스코프 치환 원칙 (Liskov substitution principle)
프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다
ISP : 인터페이스 분리 원칙 (Interface segregation principle)
특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다
DIP : 의존관계 역전 원칙 (Dependency inversion principle)
의존 관계를 맺을 때, 변하기 쉬운 구체적인 것보다는 변하기 어려운 추상적인 것에 의존해야 한다.
SOLID의 대한 개념은 항상 헷갈렸는데, 직접 본인만의 언어로 정리하려고 노력해서 이해하는데 도움이 된 것 같다.
미션 회고
급하게 과제 목적으로 진행해서 놓친 부분이 많을 수도 있다는 생각에 아쉽다.
그래도 강의 수강하고 진행해야하는 과제이기 때문에, 강의 내용을 정리하면서 더 잘 이해할 수 있는 과정을 같아서 좋았다.
댓글을 작성해보세요.