우테코 프리코스 안드로이드 회고

Kim, Sujin·2022년 11월 30일
0

우아한테크코스

목록 보기
1/3
post-thumbnail

우테코 안드로이드 과정 프리코스
기간: 2022.10.26 ~ 11.22

한 달간 진행된 프리코스의 늦은 후기를 남겨봅니다,,


지원

처음에는 지원을 많이 고민했었습니다.
휴학을 오래 했기에 빨리 졸업하고 취업을 해야 한다는 부담감이 컸고,
10달 간의 교육을 할 수 있을지 용기가 나질 않기도 했습니다.
하지만, 될지 안될지도 모르는데 일단 지원 해보자!는 마음으로,
프리코스만이라도 하면 일단 좋은 거 아닌가는 마음으로 지원을 하게 되었습니다.

아, 지원서 작성부터도 정말 스스로에게 많은 고민을 하게 만드는 질문들이었어요!
작성 과정에서 스스로에게 많이 질문해보며 나를 돌아볼 수 있었던 것 같아요.


미션

그렇게 4주간의 프리코스 과정에 참여하게 되었습니다.

사실 프리코스의 미션들은 구현 자체는 어려운 미션들은 아니었습니다.
다만, 요구사항과 피드백을 지키면서, 좋은 코드를 작성하는 데에 시간이 많이 소모되었습니다.

이번 프리코스에서 피드백을 받으면서 제가 중점적으로 공부하고 익숙해지려 노력했던 부분들은 다음과 같아요.

  • 코드 작성 및 네이밍 규칙 지키기
  • Git 컨벤션 지키기
  • 클린 코드 작성하기
  • 코틀린 Collections 문법 익히고 적용하기 (자바와 다른 부분 중점으로!)
  • 함수의 기능 작게 만들기
  • 클래스 분리하고 객체를 객체스럽게 사용하기
  • 필드 수 줄이기
  • 테스트 코드도 잘 작성하기
  • enum 클래스 활용하기

매주 진행된 미션은 다음과 같아요 :)

1주차: 온보딩

https://github.com/sujin9/kotlin-onboarding/tree/sujin9

7개의 문제가 있고 각각을 코틀린으로 푸는 미션이었습니다.
말 그대로 온보딩이기에 문제 난이도가 높지 않았고 요구사항도 많지 않았지만,
이 때부터 네이밍이나 코드를 깔끔하게 작성하기 위해 노력했어요.

2주차: 숫자 야구

https://github.com/sujin9/kotlin-baseball/tree/sujin9

이 때부터 본격적으로 테스트 코드에 대한 고민이 시작되었습니다.
테스트 코드가 모든 메소드에 대해 필요한가, (라이브러리를 실행하는 경우 등)
테스트가 어려운 코드는 어떻게 테스트를 해야 하는가 (입출력이 있는 경우 등)
하는 고민이 많이 되더라구요.

또한 설계 과정에서 어느 정도까지 설계하고 어느 정도까지 유연성을 두는지에 대한 고민도 하였습니다.

3주차: 로또

https://github.com/sujin9/kotlin-lotto/tree/sujin9

2주차의 고민들은 피드백을 통해 꽤나 상당부분 해소가 되었지만, 역시나 다른 고민들이 시작됩니다 ㅎㅎ..
우선 enum 클래스 사용이 새롭게 요구되면서 이 부분을 많이 공부했어요.
처음 사용이기 때문에 어떻게 사용하는지를 익히려고 많이 했습니다.
또한, 왜 이걸 사용하지? 를 많이 생각해보았습니다.

제 생각으로는, 관련 있는 상수들을 enum 클래스 하나에 열거를 하게되면,
enum이 추상클래스이기 때문에 다양하게 활용이 가능하고 클래스 내에서 함수를 이용할 수도 있어서 단순 상수 열거 이상의 기능을 해낼 수 있더라구요 :)

또한 클래스 분리를 하는 과정이 많이 어려웠는데요.
이 객체가 어떤 의미를 갖는 객체인지를 분명하게 하려 했지만, 그럼에도 이걸 이렇게 분리하는게 맞는지, 이걸 분리하는게 오히려 복잡해지는 것은 아닌지, 계속 코드를 작성하는 내내 고민하게 되더라구요 ㅠㅠ

4주차: 다리 건너기

https://github.com/sujin9/kotlin-bridge/tree/sujin9

마지막은, 역시 쉽지 않았습니다 ㅜ
이번에는 클래스들이 어느 정도 분리가 되어있는 상태에서 구현을 시작하게 되었습니다.

우선 InputView와 OutputView가 분리가 되었는데,
그러다보니 input할 때 예외처리 등이 inputView 내에서 또는 이를 호출한 함수에서 처리를 해야할지 등 역할을 명확하게 하는 부분에서 많이 고민하였습니다.
(저는 우선 이 부분은 exception 관련 클래스를 따로 생성하여 inputView 내에서 이를 호출하고 검사한 후에 return 하도록 구현하였습니다.)

또한 4주차에서 가장 어렵게 느껴졌던 부분은 단위 테스트 작성인데,
클래스에 프로퍼티가 있거나 전역변수가 있는 경우 테스트 코드를 어떻게 작성해야 할지 고민이 많았습니다.
전역변수를 public으로 두고 직접 접근하는 방법도 있겠지만, 이는 적합하지 않은 방법인 것 같거든요!!

그리고 고민의 과정의 끝은, 결국 함수를 분리하는 것이었습니다.
예를 들면, 다리 건너기를 시작할 때 관련 변수들을 초기화하는 함수를 따로 만들어주는 거죠. 그렇다면, 테스트 코드 작성할 때 이 함수를 실행해준 후 테스트를 실행하면 되니까요! 코드가 단 한 줄이지만 이를 따로 함수로 만들어줘야 테스트가 용이해지는 경우도 있었습니다. 정말,, 함수는 줄여도 줄여도 끝이 없네요 (?)


회고

미션을 진행하다 보니 정말 시간이 쏜살같이 사라졌네요.
힘들지만 행복했던 4주였습니다. :)
어떻게 보면 굉장히 짧은 시간임에도 불구하고, 코드가 정말 많이 개선되고 스스로 성장했음이 크게 느껴집니다.
과거의 코드를 보면,,, 나 반성해 ,,,,
그렇지만 그만큼 발전했다는 것에 매우 기쁘고, 의미 있는 4주였던 것 같습니다.

위에서 언급한, 제가 익숙해지려 노력하고 공부한 부분들을 보시면 아시겠지만,
사실 좋은 알고리즘을 구현하고 효율적으로 코드를 짜기 보다는
가독성이 좋게, 깔끔하게, 그리고 테스트를 하기 용이하게 코드를 짜는 것을 많이 익힐 수 있던 시간이었습니다.
혼자가 아닌 협업에서는 서로 규칙을 지키고 읽기 쉬운 코드를 작성하는 게 정말 정말 중요하니까요 !

또한 테스트 코드 작성을 직접 해봄으로써, 사용법을 익히는 것에서 그치지 않고 이것이 왜 필요한지를 직접 느끼게 되었습니다. 긴 코드를 작성하고 프로그램을 짜다 보면 이게 맞는지 잘 모를 수 있지만, 함수가 작은 하나의 기능을 수행하도록 쪼개고 단위 테스트를 각각 실행한다면 더 자주 코드를 점검할 수 있고, 오류가 생기게 되는 경우도 적어지고 오류가 생기더라도 원인을 훨씬 더 빠르게 찾을 수 있었습니다. 또한 테스트 코드로 함수가 잘 돌아가는지 확인하며 코드를 작성해나가니 더욱 코드를 짜는데 재미가 붙더라구요 (ㅋㅎㅋㅎ)

현생에 바빠서 여기에 온전히 몰입하지는 못했고, 그만큼 코드도 아쉬움이 남습니다.
하지만 만약 합격하게 된다면, 그 때는 졸업 이후이니 정말 여기에만 몰입할 수 있겠지요!
그렇지만 혹여 합격하지 못하게 되더라도, 4주 간의 이 경험이 있기에 충분히 값진 시간이었고 지원한 것을 전혀 후회하지 않습니다! :)
(사실 전공 과목 기말고사와 우테코 최종 코테가 시간이 완전히 겹쳐버려서.. 어떻게 될지 모르겠네요 ㅠㅠ눈물)

그렇지만 이번에 배운 것을 잊지 않고, 더 공부하면서 앞으로 더 좋은 코드를 작성하도록
꾸준히 노력해야겠습니다 :)

0개의 댓글