블로그
전체 2#카테고리
- 웹 개발
2025. 03. 15.
0
워밍업 클럽 3기 BE 클린코드&테스트 - 2주차 발자국
회고03/10~03/14리팩토링 코드 다듬기클린코드 리팩토링 실습리팩토링 연습단위 테스트 TDD이번주의 주된 강의 주제는 '리팩토링' 이다. 저번주 강의를 듣고 배운 내용을 코드에 직접 리팩토링에 적용해보면서 익히는 것이다.강의를 듣고 내용을 이해하고 어느정도 알고 있다고 생각을 했지만, 직접 해보는 것은 역시 쉽지 않은 일이였다. 뭐부터 시작해야할지, 어떻게 해야 좋은 코드로 리팩토링 하는 것인지에 대해서는 감이 잘 안잡혔다. 내가 이 부분에 대해서 경험이 부족하고 생각하는 시간이 부족했던 것이 컸다.일주일 동안 다른 일정과 더불어 바쁜 날들을 보냈는데, 해야할 일이 많다보니 한가지 일에 집중하는 시간들이 부족했다. 급한 마음이 몰입에 방해가 되었던 것 같다. 한가지 일을 하더라도 제대로 몰입해서 해야겠다고 생각이 들었다. 다음 주도 바쁜 일정이 예정되어 있는데 이번에는 적은 시간이라도 그 시간 안에서 두려워하지 않고, 내가 지금 할 수 있는 작은 일에 포커싱하여 작은 부분이라도 개선하는 시간을 가져보겠다.학습 내용능동적 읽기복잡하거나 엉망인 코드를 읽고 이해하려 할 때, 리팩토링하면서 한 줄 한줄 읽기공백으로 단락을 구분하기메서드와 객체로 추상화 해보기주석으로 이해한 내용을 표기하면서 읽기언제든 돌아갈 수 있는 git reset --hard 가 있으니 두려워하기보다는 실행해보자.오버 엔지니어링필요한 적정 수준보다 더 높은 수준의 엔지니어링종종 구현체가 하나인 인터페이스를 만드는 경우가 있었다. 내가 하나의 구현체라도 인터페이스를 만드는 이유는 아키텍처에 이해를 도와주도록 하거나, 팀에서 협업을 하면서 명세를 먼저 작성해서 구현체에 종속되지 않고 각자 구현해야하는 내용을 재사용하기 위해서라고 생각했다.인터페이스 형태가 아키텍처 이해에 도움을 주거나, 근시일 내에 구현체가 추가될 가능성이 높다면 OK구현체를 수정할 때마다 인터페이스도 수정해야하는 단점이 존재코드 탐색에 영향을 주고 어플리케이션이 거대해짐너무 이른 추상화로 정보가 숨겨지기 때문에 복잡도가 높아지고 의도를 파악하기 어렵다주석의 양면성평소에 주석을 잘 사용하지 않았다. 팀 프로젝트를 잘 하지 않았고, 주석을 작성하기 보다는 코드로 의미를 나타낼 수 있도록 표현하려고 노력했기 때문이다. 물론 잘 되지는 않은 부분도 많지만 주석을 잘 사용하지 않았던 이유이다.앞으로도 주석보다는 추상화를 통해서 어떤 의도를 나타내려고 노력할 것 같은데, 주석이 필요한 경우를 만나보고 싶다. 변수와 메서드의 나열 순서나름 나만의 방식을 가지고 지금까지 변수와 메서드를 나열해왔는데, 이유에 대해서 생각해보고 이점에 대해서 알게되었다.인지적 경제성뇌 메모리 사용을 절약메서드의 경우에도 순서를 고려해야하는데, 이 부분에 대해서 강사님의 생각을 엿볼 수 있었다.상태 변경 >> 판별 >= 조회메서드비공개 메서드는 공개 메서드에서 언급된 순서대로 배치한다.공통으로 사용하는 메서드라면 하단쪽 적당한 곳에 배치한다.중요한 것은 나열 순서로도 의도와 정보를 전달할 수 있는것이다. 코드 리뷰 타임과 중간 점검금요일에 다른 사람들의 코드를 리뷰해주시는 시간을 가졌었다. 다른 사람의 코드를 보면서 나와 다른 점을 알 수 있고 더 좋은 방법에 대해서 사고를 확장할 수 있는 시간이였다. 강사님이 다른 사람들의 코드를 많이 보는게 좋다고 하셨는데 앞으로 조금씩이라도 다른 사람의 코드를 읽어보는 시간을 가질 것이다. 궁금한건 다른 사람들은 코드를 리뷰할 때 모든 코드를 하나하나 꼼꼼히 읽으면서 진행하는지? 시간을 얼마나 투자하는지? 이런 부분이 궁금하다.다음 주에는 테스트 관련 인강을 듣고 정리하며 학습하는 기간이다. 테스트 코드에 대해서 관심이 있었고, 어떻게 공부해야하는지 고민하다 학습을 하지 않았는데, 이번 기회에 그냥 해보자라는 마음가짐으로 학습 시간을 가질 예정이다. 이번 주에는 어제의 나보다 오늘의 내가 더 나은 시간들이 되기 위해 노력하겠다.
2025. 03. 09.
0
워밍업 클럽 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 미션에서 해보면서 수업을 들으면서 배운 내용을 적용해보려고 하였다. 객체지향 관련 수업은 개념은 알고 있었다. 하지만 코드를 작성할 때 어떻게 해당 개념을 녹여낼 수 있는지는 사실 잘 모르고 어려워했다. 수업을 들으면서 해당 개념을 하나하나 적용해나가면서 리팩토링을 하는 것을 보면서 신기하고 이렇게 할 수가 있구나 라는 생각을 했다. 그리고 따라치는 것도 좋지만, 너무 구조가 안그려지고 코드가 이해가 안되는데 따라만 치는 것은 내게 도움이 안된다는 생각이 들었다. 내가 얻어야 하는 것은 강사님이 전하고 싶었던 의도와 생각을 엿보는 것을 목적으로 강의를 들어야겠다. 미션 후기메소드를 리팩토링 해보는 과정을 해보았다. 배운 것을 연습해보는 것이 좋았다. 지금은 부족하지만 현재 상황에서 내가 배운것과 가진 재료로 최선을 다해 노력해보았다. 미션과 강의를 보면서 느낀점.작성된 코드에서 강사님이 하나하나 설명해주면서 리팩토링을 해주는 것을 보면서 따라갔다. 보면서 드는 생각은어떻게 저렇게 리팩토링을 할 수 있을까?강사님은 어떤 고민과 어떤 시간들을 보내셨길래 저렇게 할 수 있을까?나도 할 수 있을까?이게 더 읽기가 좋아진게 맞을까?이런 생각들을 하면서 강의를 들었다. 우선 나는 강사님처럼 바로 할 수는 없다. 하지만 강의를 보고 곱씹어보며 강사님의 생각을 따라가려고 노력해볼 수는 있다. 강의는 내가 생각할 방향에 대해서 알게되는 것이라고 생각한다. 강의를 보면서 얻게된 재료를 내가 다듬고 요리할 수 있도록 스스로 생각해보고 시도해보고 노력해보는 것이 중요한 것 같다. 비록 지금 스터디가 매우 빠른 페이스로 진행되고 있어서 바로 시도해보지는 못하는게 아쉽다. 현재 상황에서 할 수 있는 최선을 다하자.
웹 개발