블로그
전체 4#카테고리
- 백엔드
#태그
- 워밍업
- 발자국
- 워밍엄
- 백엔드
- 클린코드
- 객체
2025. 03. 29.
0
[3기] 워밍업 클럽-백엔드-code 4주차 발자국
회고드디어 마지막 4주차 발자국을 작성하게 되었다.마지막 과제인데 사실 내가 생각했던 것보다 정말 바쁘고 강의듣기가 바빠서 목표를 잘 이뤄내지는 못했다.다음에도 워밍업 클럽에 참여하게된다면 조금더 일정에 따라서 들을 수 있도록 해야겠다.과제도 한번 했으니 더 발전되고 열심히 하고싶다.그래도 새로운 지식을 배우고 적용해볼 수 있어서 너무 재미있고 유익했던 시간이었다.
백엔드
・
워밍업
2025. 03. 23.
0
[3기] 워밍업 클럽-백엔드-code 3주차 발자국
회고테스트라는 것을 먼저 구현한다는 생각이 새로웠다.그런데 생각해보니 테스트를 먼저 작성하지 않고 기능을 구현하다보면 테스트를 작성할 시간은 전혀 없거나 내가 이미 생각한 로직대로만 동작하는 테스트만 작성할 경우가 많을 것 같다.이미 기능 구현이 끝나고 정상적으로 동작한다면 이미 일이 끝난 것 같기 때문이다...그리고 Test Driven 이란 클라이언트 관점에서 우리의 프로덕션 코드를 보여주는 도구다 라는 것에 굉장히 동감했다.보통 고객은 UI와 같이 'A를 눌렀더니 B 동작이 됐다' 가 잘되는지 보고싶지, 'A를 눌렀더니 C가 B를 불러서 B가 동작했다' 는그들의 관심거리가 아니다.고객을 설득하기 위해서도 테스트가 중요하다는 것을 좀 더 알 게 되었다.그리고 테스트를 작성할때는 섬세하게 작성하자!잘 못 작성하면 아예 작성 안하느니만 못할 수도 있다!
백엔드
・
발자국
・
워밍엄
・
백엔드
2025. 03. 16.
0
[3기] 워밍업 클럽-백엔드-code 2주차 발자국
미션 회고DAY7 미션은 스터디카페 코드를 추상화를 진행하는 것이었는데 거의 10줄도 바꾸지 못했다.이것저것 해야될 것 같고 하고 싶은건 많은데 코드로 막상 옮기려니 루미큐브를 하듯이다 벌려놓다가 마지막 하나가 부족해서 다시 처음으로 rollback 을 해야하는 것의 반복이었다.아직 바쁘다는 핑계로 한두번 손을 대고는 더 못댔다.그래도 아예 시작을 못할뻔 했는데 조금이라도 적용해보려고 노력한 내 자신에게 심심한 박수를 주었다.다음에 다시 할때는 한 클래스라도 더 추상화할 수 있을 것이라 생각한다.회고사실 강의도 섹션 5부터는 앞서가는 사람을 쫓아가려는 느낌으로 강의를 들었다. 그래서 그런지 DAY7 과제를 할때 내 생각만큼 추상화를 진행할 수 없었다. 영어를 배울대 읽기와 듣기가 되어도 쓰기와 말하기와 같이 출력하는 것은 다르듯이 실제로 코드를 적용하는 것은 쉽지 않은 일이었다.아직은 읽기와 듣기를 위해 열심히 지식을 입력하는 단계라고 생각한다. 이번 워밍업에서 한번에 다 이해할 수 있을 것이라 생각하지말고 한번 듣고 다음에 또 복습하고 적용해보는 시간을 꼭 가져야겠다.이번 발자국은 남기기 위해 작성했다면 다음 발자국은 남기고 싶어서 남기는 발자국이었으면 좋겠다.
백엔드
・
백엔드
・
워밍업
・
클린코드
2025. 03. 08.
0
[3기] 워밍업 클럽-백엔드-code 1주차 발자국
추상추상에 대해서 정말 면밀하게 배울 수 있었던 시간이었습니다.저의 일상생활이 수많은 추상화로 이루어져 있다는 것을 알게 되었고, 그것을 코드로 옮겨졌을 뿐이구나라는 것을 알았습니다.왜 Java 를 보고 계속 객체지향이라고 하는지 처음으로 와닿게 느꼈습니다.강의를 들으면서 왜이렇게 이름 짓는 것이 고민이 됐고 어려웠는지...이름을 짓는 것이 정말 중요한 일이었기 때문이구나 라는 것을 알았습니다.그러면서 기존 제 코드들을 다 변경해보고 싶다는 열망이 들었는데요.아니나 다를까 DAY4 과제로 주신 과제를 하면서 실전에 적용하는 것은 정말 다르다는 것을 알았습니다.미션 회고원본코드사용자가 생성한 '주문'이 유효한지를 검증하는 메서드. Order는 주문 객체이고, 필요하다면 Order에 추가적인 메서드를 만들어도 된다. (Order 내부의 구현을 구체적으로 할 필요는 없다.) 필요하다면 메서드를 추출할 수 있다.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 boolean validateOrder(Order order) { if (order.hasEmptyItems()) { Log.ofEmptyItem(); return false; } if (order.isInValidateTotalPrice()) { Log.ofInValidateTotalPrice(); return false; } if (order.hasNotCustomerInfo())) { Log.ofhasNotCustomerInfo(); return false; } return true; } public class Log() { private void showInfoLog(String logMessage) { log.info(logMessage); } public void ofEmptyItem() { showInfoLog("주문 항목이 없습니다."); } public void ofEmptyCustomerInfo(){ showInfoLog("사용자 정보가 없습니다."); } public void ofInValidatePrice() { showInfoLog("올바르지 않은 총 가격입니다."); } }order.getItems().size() 객체에게 폭력적인 방식이다order 에게 Item 이 있는지 없는지 확인하는 함수(order.hasEmptyItems())를 구현하여 함수를 통해 확인하도록 하였다.order.getTotalPrice()get 이 정말 쓸만 한가?totalPrice 값 자체를 쓴다면 getTotalPrice 가 필요하겠지만 현재는 totalPrice 값 자체보다 값이 있는지 없는지를 판단하는 것 같아서 totalPrice 가 올바르게 형성(0이상)되어 있는지 확인했다.(!!)그런데 지금 생각해보니 위의 Items 이 있는지, Price가 있는지 모두 장바구니 자체가 현재 유효한 내용을 담고 있는지에 대해서 한 것 같다. 그렇다면 '장바구니'가 유효한지 검사하는 함수를 하나 추상화해서 Items 가 있는지! 없다면 totalPrice 는 유효한지! 하고 true, false 를 반환해주는 함수를 구현했어도 괜찮았을 것 같다. 하지만 현재도 validOrder 에 함께 다 들어가야 하는 요소인지. valid장바구니 를 빼고 validOrder 에서는 장바구니가 유효한지, customerInfo 는 유효한지를 검사하는게 추상화가 적절하게 되는 것인지 잘 모르겠다...!order.hasCustomerInfo()부정연산자가 들어갔다!한번 더 이해한 것에 부정으로 생각해주어야 하기때문에 뇌의 메모리를 두번쓴다.Not 부정 연산자를 사용하여 뇌의 메모리를 적게 쓰도록 했다.LOG classlog.info 를 사용하여 log를 남기고 있는데 같은 코드가 계속해서 반복해서 사용하고 있어서 info.log 에 메시지를 매개변수로 받을 수있도록 구현하였다.그리고 Log 에 대한 것을 Log class 에 응집하고, 만약 메시지가 바뀌어도 Log class 에서 확인하고 변환하면 좋을 것 같아서 메시지 별로 함수를 만들었다.회고기존에 개발을 진행할때도 if 문에 대해서 작성한다고 했을때 너무 추상화한 것이 좋지 않다고 하여 객체에게 폭력을 많이 휘둘렀다. 지금보니 시야가 너무 좁은 상태로 코드를 작성했던 것 같다. 객체에게 친절하면서 추상화가 적절하게 되어 미래의 후손에게도 도움이 되는 코드를 작성하는데 한 발자국 내딛은 것 같아서 앞으로의 강의 수강이 더욱더 기대된다.지금 이 마음을 잃지 않고 강의를 꼭꼭 소화시켜서 기존의 코드를 리팩토링 해야지!
백엔드
・
워밍업
・
클린코드
・
객체
・
발자국