3주차가 끝났다.. 이제는 정말 프리코스의 마지막을 바라보고있다.
지난 주차는 프리코스를 시작하고 가장 힘든 주간이었다.
과제도 가장 어려웠고 개인적으로 슬픈 일 또한 겹쳐 쉽지 않은 한 주였다.
이번 주 회고로 적어볼 것은
- 어려웠던 점
- 좋았던 점
- 이번 주에 발전시켜볼만한 부분
이렇게 세 가지이다.
어려웠던 점
1. Lotto 클래스가 어떤 역할인지 파악하는 것
세 가지의 어려웠던 점 중 가장 어려웠던 것이다. 지난 3주차에선 처음으로 주어진 클래스를 활용해야하는 과제였다.
이전까지는 처음부터 끝까지 마음대로 프로그램을 짜고 main함수만 작성하면 되었지만 이번 과제는 Lotto클래스를 활용해야한다는 조건이 있었다.
처음에는 Lotto 클래스에 생성자로 주어진 numebrs가 당첨 번호라고 생각했다. 또 이름이 Lotto라서 로또에 관련된 모든 로직을 이 곳에서 작성해야하나 생각했다. 로또를 생성하거나, 당첨 번호와 비교하거나 뭐 그런 것들 말이다.
그러나 생각할수록 그럼 왜 보너스 번호는 주지 않았는가라는 의문이 들었다. 생성된 로또가 당첨되었는지를 알려면 당첨 번호 뿐만이 아니라 보너스 번호도 알아야하는데 대체 왜..?
그래서 그 다음엔 Lotto 클래스를 그저 생성된 하나의 로또라고만 생각해보기로했다.
계속 Lotto 안에서 모든걸 해결하려고하니 여간 골치거리가 아니었다. 그런데 그저 한 장의 로또로 생각하니 마치 2차원 세상에만 있다가 3차원 세상을 처음 본듯한 기분이었다.
기뻐서 코드를 짜기 시작했지만 곧 또 하나의 의문이 떠올랐다. 그냥 한장의 로또로 보는 것이라면 데이터 클래스로 만들어도 될텐데 왜 굳이 클래스를 사용했으며 numbers를 private으로 만들었을까..?
그저 numbers의 값을 리턴해주는 함수 하나만을 넣기 위해 이 클래스가 필요할까..? 그럴거면 Lotto가 왜 필요한가 그저 List<Int>로 사용하면 될게 아닌가하는 생각이 든 것이다.
결국 Lotto를 한장의 로또로 생각하돼 numbers값을 활용해야하는 로직들을 Lotto 안에 넣기로 했다. 뭔가 찝찝한 느낌이 들었지만 지금까지도 저 방법이 최선이었다고 생각한다. 찝찝한 기분이 드는 이유는 나중에 깨달았고 3번에서 다른 타이틀로 얘기할 예정이다.
다른 사람들은 Lotto 클래스를 어떤 식으로 생각했는지 궁금하고 구경해보려고한다. 어제 과제를 제출하고 기진맥진해서 아직 보진 못했다. 기대된다~!
2. enum 클래스의 활용
이번 과제의 요구사항 중 enum 클래스를 사용하라는 부분이 있었다. 나는 enum 클래스를 써본 적이 없었기 때문에 먼저 enum 클래스를 공부해야했다. enum 클래스를 얼추 알아보고 나서 한 가지 기억이 떠올랐다.
2주차 과제를 하면서 else문을 지양하는 것에 대해 찾아보다 그 방법 중 하나로 enum 클래스가 거론됐었던 것이 떠올랐다. 어떻게 사용하는지는 몰랐지만 이때부터 enum 클래스를 통해 else와 when절을 사용하지 않는 것이 3주차의 목표가 되었다.
그래서 당첨 결과를 비교할 때 사용하기 위해 3개~6개 일치에 대한 정보를 담은 enum 클래스를 만들었고 해당 클래스를 사용해서 일치 여부에 대한 정보를 저장하고 출력할 수 있도록 했다. else 및 when절 안쓰기 성공~!! 나름 지난 3주차 과제를 수행하면서 뿌듯했던 부분이다. 이 방식이 enum 클래스를 알맞게 활용한 건지는 모르겠지만 앞으로도 enum 클래스를 활용해봐야겠다는 생각이 들었다! 다른 분들은 어떻게 enum 클래스를 활용했는지 많이 궁금하다!
3. 객체 지향이 항상 현실과 일치하진 않는다.
객체지향을 처음 배울 때 현실 세계를 프로그래밍으로 가져오는 것으로 배웠다. 클래스를 사람에 비유하거나 차에 비유하는 등 현실 세계와 같았다.
그런데 지난 주에 읽기 시작한 '객체 지향의 사실과 오해'라는 책에서 객체 지향을 현실 세계에 비유하는 것은 객체 지향을 처음 접할 때 설명하기 편하기 때문이며 현실 세계와 일치하는 프로그램은 극소수라는 내용을 보았다.
처음에 이 것을 읽었을 땐 그냥 그런가보다 하며, 현실 세계와 다르면 거기에 얼추 끼워 맞추면 되는거 아닌가? 하고 생각했다. 그러나 지난 3주차 과제를 하며 저 문구를 몸소 체험하게 되었다.
물론 로또 과제는 현실과 높은 일치율을 보인다. 그러나 2주차의 숫자 야구와 달리 와닿지 않는 내용이었으며 당첨 번호를 직접 입력하는 부분 또한 조금 다른 모습이었다.
무엇보다 Lotto 클래스가, 즉 한 장의 로또가 로또 번호만 가지고 있는 것이 아니라 다른 기능을 포함하고 있어야한다는 부분이 가장 현실과 괴리감을 가져오며 나를 어렵게했다. 현실에서 로또는 그저 내가 구입한 숫자일뿐인데 만들어야할 프로그램의 Lotto는 다른 기능들을 포함하고 있으니 Lotto를 활용하는 여러 부분에서 혼란이 오는 것이었다.
이러한 이유들로 2주차에 비해 3주차는 꽤나 어려웠고 코드를 수 없이 썼다 지웠다 반복했다. 또 도메인 로직을 분리하라는 요구사항 때문에 출력에 대한 책임을 어떻게 분리해야할지 매우 고민이었다.
이런 문제들을 완전히 해결한 것은 아니지만 테스트 코드의 작성이 어느 정도 가이드가 되어준 것 같다. 물론 아직 테스트 코드에 익숙하지 않아 많이 어려웠지만 테스트 코드를 기능 별로 작성하는 행위 자체가 점점 단위를 작게 나누도록 했고 입출력 형태에 대한 고민 또한 더 적은 범위로 줄여주었다.
좋았던 점
사람들이 왜 프리코스만 해도 많은 도움이 된다는지 여실히 깨닫는 한 주였다. 요구 조건을 맞추기 위해 끊임 없이 고민하는 과정을 거치고 나니 한 주가 끝날 때마다 스스로 성장했다는 것과 자신의 부족함을 피부에 와닿게 느낀다.
또한 커뮤니티에서 다른 사람들과 소통할 수 있고 해당 주차가 끝나면 다른 사람들의 코드를 보며 배울 수 있다는 점이 정말 좋다.
특히 2주차의 피드백이 많은 도움이 되었다. 피드백을 읽으면서 하나 하나 나를 겨냥한듯한 느낌을 받았다.
그래서 3주차의 피드백을 너무 기다렸는데 오늘 읽어보니 역시나 배울 것이 너무 많다.
마지막으로 피드백과 함께 온 2주차 강의 영상이 과제를 진행하는데 큰 도움을 주었다.
어떻게 기능 목록을 작성하고, 언제 커밋하고, 언제 어떻게 테스트 코드를 작성하는지를 보며 과제를 진행하는 방향과 순서를 정하는데 많은 도움이 되었다!
4주차에 발전시켜볼 부분 (3주차 피드백 반영)
- 무지성 커밋 멈춰!: 후반부에 갈 수록 점점 나도 모르게 커밋 단위가 많이 짧아진 것 같다. 4주차엔 좀 더 기능 단위로 커밋하자!
- 테스트 코드 작성: 테스트 코드 관련 메서드들에 대해 공부하여 더 다양하고 구체적인 테스트를 짤 수 있도록 한다.
- 필드의 수를 줄이기 위해 노력
- 단위 테스트하기 어려운 코드를 단위 테스트하기 (ex. Random)
- private 함수를 테스트하고 싶다면 클래스를 분리를 고려(private함수를 테스트하고 싶어진다면 그건 클래스를 분리해야할 타이밍일수도 있다)
- 회고도 Refactoring: 코수타에서 들었던 내용으로 회고를 한 번에 쓰려고 하지 말자. 그때 그때 쓰고 나중에 정리하자
3주차 피드백 중에서도 나에게 특히 부족하다고 생각됐던 부분들과 내가 개인적으로 부족하다고 생각했던 부분들을 적어보았다. 4주차에선 이 부분들을 고려하여 더 좋은 코드를 만들어보고 싶다!
회고를 작성하면서 문득 든 생각인데 우아한 테크 코스에 합격한다면 정말 좋겠지만 혹시나 떨어지더라도 스스로 많이 성장했다고 느끼는 한 달이 될 수 있을 것 같다!
남은 한 주도 화이팅해서 합격까지 가보자!!
'우아한 테크 코스' 카테고리의 다른 글
[우아한테크코스] 합격 및 온보딩 미션 후기 (0) | 2023.02.27 |
---|---|
우아한 테크 코스 최종 코딩테스트(점심 메뉴 추천) 회고 (0) | 2022.12.21 |
우아한 테크 코스 4주차(다리 건너기) 회고 (0) | 2022.12.21 |
우아한 테크 코스 2주차(숫자 야구 게임) 회고 (0) | 2022.11.09 |
우아한 테크 코스 1주차(온보딩) 회고 (0) | 2022.11.01 |