워밍업 클럽 3기 BE 클린코드&테스트 - 1주차 발자국
발자국 1 주차
기간 : 3월 4일 ~ 3월 7일
일주일 학습 내용 요약
코드를 짜는 시간보다 코드를 읽고 이해하는 시간이 더 많다. 다른 사람과 함께 작업을 하며, 내가 작성한 코드도 이후에는 결국엔 다시 읽으면서 잊었던 부분을 이해하는 시간을 가진다.
코드는 작성하고 난 순간부터 레거시다.
읽기가 좋은 코드가 코드를 잘 짜는 기준이 될 수 있다. 읽기가 좋은 코드를 짜기 위해서 이번 1주차 기간 동안 학습한 강의는 추상에 관한 개념을 배우고 코드에 적용하는 강의였다.
추상은 코드를 읽는데 가독성이 좋아지게 한다. 가독성이 좋아지게 하는 방법으로 구체적이고 자세한 구현 정보 안에서 가장 핵심적이고 중요한 정보를 가려내어 추상화하는 것이다.
객체지향 관련 강의
객체지향은 객체간의 협력을 통해 프로그램이 작동하게 한다. 각자의 책임을 적절히 나누어 역할에 맞는 역할을 지녀야 한다. 이는 높은 응집도와 낮은 결합도를 가지게 한다. 솔직히 객체지향 부분부터 코드를 리팩토링하는 과정은 나에게는 어려웠다. 의도는 이해는 가지만 코드 레벨에서는 이해가 잘 안갔다. 이건 내가 해당 내용에 대한 경험이 부족하고 이해하기에 지식이 부족한것 같다. 스터디가 끝나면 다시 한 번 천천히 보면서 정리를 해봐야겠다.
미션 Day4
// 주문 객체를 생성하는데 검증을 하는 로직이구나.
public boolean validateOrder(Order order) {
if (order.getItems().size() == 0) { // 파라미터로 받은 주문에 아이템이 아무것도 없는가?
log.info("주문 항목이 없습니다.");
return false; // 주문항목이 없다. 결과를 boolean 으로 응답한다.
} else { // 파라미터로 받은 주문 객체에 아이템이 담겨있을 경우
if (order.getTotalPrice() > 0) { // 주문객체의 총 가격이 0보다 큰지 검사한다.
if (!order.hasCustomerInfo()) { // 주문 객체에 사용자 정보가 있는지 검사한다.
log.info("사용자 정보가 없습니다.");
return false;
} else { // 사용자의 정보를 담고 있다. + 총 주문 가격에 0 보다 크다.
return true;
}
} else if (!(order.getTotalPrice() > 0)) { // 주문 총 가격이 0보다 작은지 검사한다.
log.info("올바르지 않은 총 가격입니다.");
return false;
}
}
return true;
}미션을 진행하기 위해서 어떻게 읽기 좋게 리팩터링을 할 수 있을까 고민했다. 그래서 코드를 먼저 분석했다. 라인 바이 라인으로 어떤 목적을 가지고 있는 코드인지 분석하고, 배운 것을 적용했다.
public boolean validateOrder (Order order) {
if (order.doesNotHaveItems()) {
log.info("주문 항목이 없습니다");
return false;
}
if (order.isNegativeTotalPrice()) {
log.info("올바르지 않는 총 가격입니다.)";
return false;
}
if (order.hasNoCustomerInfo()) {
log.info("사용자 정보가 없습니다.");
return false;
}
return true;
} 학습 회고
추상화를 한다. 가장 중요한 정보를 뽑아내서 표현하는 것이 개념적으로 받아들이기에는 문제가 없다. 하지만, 사람마다 추상화 시키는 능력치가 존재하고 지금까지 길러온 사람마다 기량이 다르다. 나는 이런 부분에 있어서 많이 해보지 않은 초보 레벨이다. 그래서 강의를 보며 따라치면서 '신기하다' 라는 생각이 들었다. 어떻게 하면 나도 좋은 추상화 실력을 갖출 수 있을지 고민했다. 우선 메소드 하나를 읽어도 그 메소드가 어떤 기능을 하는 것이지 파악해보고, 한 줄씩 어떤 기능인지 주석으로 정리해보는 것이었다. 나는 이 부분을 Day4 미션에서 해보면서 수업을 들으면서 배운 내용을 적용해보려고 하였다.
객체지향 관련 수업은 개념은 알고 있었다. 하지만 코드를 작성할 때 어떻게 해당 개념을 녹여낼 수 있는지는 사실 잘 모르고 어려워했다. 수업을 들으면서 해당 개념을 하나하나 적용해나가면서 리팩토링을 하는 것을 보면서 신기하고 이렇게 할 수가 있구나 라는 생각을 했다. 그리고 따라치는 것도 좋지만, 너무 구조가 안그려지고 코드가 이해가 안되는데 따라만 치는 것은 내게 도움이 안된다는 생각이 들었다. 내가 얻어야 하는 것은 강사님이 전하고 싶었던 의도와 생각을 엿보는 것을 목적으로 강의를 들어야겠다.
미션 후기
메소드를 리팩토링 해보는 과정을 해보았다. 배운 것을 연습해보는 것이 좋았다. 지금은 부족하지만 현재 상황에서 내가 배운것과 가진 재료로 최선을 다해 노력해보았다.
미션과 강의를 보면서 느낀점.
작성된 코드에서 강사님이 하나하나 설명해주면서 리팩토링을 해주는 것을 보면서 따라갔다. 보면서 드는 생각은
어떻게 저렇게 리팩토링을 할 수 있을까?
강사님은 어떤 고민과 어떤 시간들을 보내셨길래 저렇게 할 수 있을까?
나도 할 수 있을까?
이게 더 읽기가 좋아진게 맞을까?
이런 생각들을 하면서 강의를 들었다. 우선 나는 강사님처럼 바로 할 수는 없다. 하지만 강의를 보고 곱씹어보며 강사님의 생각을 따라가려고 노력해볼 수는 있다. 강의는 내가 생각할 방향에 대해서 알게되는 것이라고 생각한다. 강의를 보면서 얻게된 재료를 내가 다듬고 요리할 수 있도록 스스로 생각해보고 시도해보고 노력해보는 것이 중요한 것 같다. 비록 지금 스터디가 매우 빠른 페이스로 진행되고 있어서 바로 시도해보지는 못하는게 아쉽다. 현재 상황에서 할 수 있는 최선을 다하자.