우테코 프리코스 4주차 회고

김한준 (Hanjun Kim)·2022년 11월 22일
0

회고

목록 보기
3/4

들어가며

4주차 미션이 끝난 지 4일이나 지났지만 느즈막히 회고를 남겨봅니다. 4주차 미션은 다리 건너기 게임을 구현하는 것이었습니다. 이번 미션은 지난 미션들에 비해 난이도가 한 단계 높아진 느낌이었어요. 까다롭기도 했지만 그만큼 구현했을 때의 성취감이 더 컸습니다.

중점적으로 학습한 내용

클래스 분리

3주차 미션에 이어서 이번 주차도 클래스 분리에 초점을 맞추고 미션을 진행했어요. 3주차 미션에서는 분리할까 말까, 이렇게 분리하는 게 맞나? 정말 객체지향적 관점에 적합한 분리일까?에 대해서 끊임없이 고민만하고 머뭇거리기만 하다가 미션이 끝나버렸던 기억이 납니다.

그래서 이번 주차에는 꼭 3주차 보단 나은 코드를 작성하겠다 마음을 굳게 먹었습니다. 4주차에도 역시 <객체지향의 사실과 오해>을 학습하며 과제를 수행했어요. 3주차에서 소극적으로 클래스 분리를 하게된 이유는 아무래도 책임 위주로 객체를 설계하라 라는 구절때문이었습니다. 책을 읽으면서는 왜 이런 말을 하고 계신지 납득이 충분히 가는 느낌이었어요. 하지만 막상 코드에 적용해보려니 쉽지 않았답니다. 일단 현재 클래스가 지닌 책임이 적절한지, 클래스 분리를 위해 책임을 새롭게 부여하고있는 것은 아닌지 등등 책임이라는 추상적인 단어에 휘둘려 전전긍긍했던 기억이납니다.

다행히 4주차 미션을 수행하면서는 진전이 있었습니다. 4주차에 들어서면서 <객체지향의 사실과 오해> 4장, 5장을 학습했습니다. 해당 파트에서 객체의 책임은 결국 객체가 수신하는 메시지가 결정한다는 부분을 읽게되었어요. 해당 구절을 읽고 마음 속에 답답했던 무엇인가가 뚫리는 느낌이 들었습니다. 이후에 메시지를 중심으로 클래스 분리를 하니 3주차와 달리 막힘없이 진행됐던 것 같아요.

또한 메시지 중심의 분리를 하다보니 인터페이스에 나열된 메서드들과 이를 중심으로 확장, 구현되어가는 클래스들이 좀 더 가슴 깊이 와닿게 되고 이제서야 인터페이스의 진가를 알게된 것 같은 깨달음을 얻은 기분이 들었습니다.

그렇다해도 여전히 클래스 분리는 어렵게 느껴집니다. 이젠 좋은 메시지란 무엇인가, 해당 메시지가 적절한가에 대해서 고민을 하게되더라구요. 결론 좋은 메시지를 구상하기 위해선 결국에 좋은 설계가 중요하다고 생각들었습니다. 논리적이고 명확한 기능 목록을 작성했을 때 어떤 메시지를 던져야 할지 보다 뚜렷해진다고 생각해요. 다시 돌아 돌아 원점으로 돌아오게 된 기분입니다.

이제서야 왜 우테코에서 기능 목록을 중요시하는 지 몸소 이해하게 된 것 같아요. 결국 기능 목록이란 프로그래밍의 기반이고 튼튼한 기반에서 좋은 객체지향이 가능해진다고 느꼈습니다. 단 시간에 요구사항을 완벽한 기능 목록으로 바꾸긴 쉽지 않겠지만, 반드시 필요한 기본기라고 생각하며 꾸준히 고민하고 실험해서 좋은 기능 목록을 위한 저 만의 기준을 조금씩 세워나갈 생각입니다.

클래스 분리 학습을 위해 참고하고 정리한 내용들입니다.

리팩토링

4주차 미션에서 두번째로 초점을 둔 부분은 리팩토링이었습니다. 한번에 완벽한 코드를 구현하는 것은 쉽지 않기에 리팩토링은 반드시 거쳐야하는 작업이라고 생각해요. 미션을 수행하는 동안 제 커밋 로그의 절반 이상이 리팩토링인 것을 보면 기능을 구현하는 역량만큼 리팩토링하는 역량도 중요하다고 느껴졌습니다.

우선 리팩토링을 하면서 가장 인상깊었던 깨달음은 객체지향에 관련된 것이었습니다. 확실히 객체지향적으로 설계된 코드를 리팩토링하는 것은 그렇지 않은 코드보다 몇 배는 더 편하게 느껴졌습니다. 제가 미션을 진행하면서도 코드를 수정했을 때 어떤 코드는 다른 클래스나 테스트에서 수많은 컴파일 에러가 발생했던 반면, 어떤 코드는 다른 코드를 수정하지 않고도 원활하게 리팩토링 할 수 있었습니다.

이로 인해 어떤 코드가 객체지향적으로 잘 설계가 되었고 어떤 코드가 그렇지 않았는지 의도치 않게 눈으로 확인할 수 있었습니다. 좋은 객체지향적 설계가 왜 확장성과 유지보수에 좋은지 글로만 이해하다가 이렇게 직접 작성한 코드로 확인하니 그 필요성이 더욱 명료하게 다가오더라구요.

기능을 구현하고 코드를 수정해나갈 때 그리고 클래스를 분리할 때 계속 머뭇거리게 되었던 것도 겉잡을 수 없이 발생하는 컴파일 에러 때문이었던 것 같아요. 적절한 수정 방안이 떠올라도 이를 적용하면 다른 부분에서 또 다시 리팩토링을 고민해야하고 이를 통해 또 다른 부분에서 문제가 발생하면 어쩌지?라고 지레 겁먹은 탓이었던 것 같습니다.

하지만 클래스 분리에 대해서 지속적으로 학습한 덕분인지 아니면 미션을 수행하면서 어느 순간 클린코드나 객체지향적 설계가 체화된 덕분인지 리팩토링 작업도 점점 재밌게만 느껴지는 기분입니다. 마치 수능 공부를 할 때 수학 문제를 푸는 것 같은 기분이 들때가 있어요. 어떻게 리팩토링해야할 지 수 없이 고민을 하다가 결국엔 풀어냈을 때의 그 기분이란!

리팩토링을 학습하며 참고한 자료입니다.

마치며

프리코스 4주차가 끝났습니다. 한 달이란 시간이 이렇게 짧게 느껴지는 것도 정말 오랜만인 것 같아요. 남은 기간동안 한 달동안의 학습 습관이 휘발되지 않도록 꾸준히 공부해나갈 생각이에요. 프리코스 동기분들과 피어리뷰도 하고, 지금껏 배워왔던 내용을 복습하며 제 방식으로 정리도 해 볼 생각입니다. 시간이 허락한다면 책을 읽고 일기 형식으로 짤막한 글을 조금씩 작성해보고 싶기도 해요. 회고록을 작성하다보니 제 글솜씨가 얼마나 형편없는지 뼈져리게 느끼게 됩니다 :(

이번 프리코스는 전과 다르게 3주의 시간이 더 주어집니다. 1차에서 합격할 지 불합격할 지 아직 모르겠어요. 프리코스 기간동안 얻어간 것도 많고 그만큼 성장한 것에 큰 의의를 두고있기도 하지만, 어째선지 프리코스를 진행하면서 더 본 교육과정에 함께하고 싶다는 마음이 절실해지는 건 어쩔 수 없는 것 같아요... 피어 리뷰를 함께 했던 소중한 인연들 그리고 몰래 몰래 코드를 살펴보며 큰 배움을 얻어갔던 고수님들, 마지막으로 커뮤니티와 슬랙을 통해 서로를 응원해주고 동기부여해주는 열정적인 동기분들까지! 꼭 함께하고 싶습니다!!!!

profile
조금 느려도 꾸준한 성장을 추구합니다.

0개의 댓글