[우테코6기] 프리코스 1주차 회고

지원과정

 

IT 동아리가 끝나고 하반기 취업을 목표로 했으나,, 안드로이드 파트에 지원하고 싶은 공채가 없었습니다.

지인 추천으로 우테코를 알게 되었는데요, 선발 과정과 기간이 길어서 망설였지만 너무 좋은 기회라고 생각했습니다.

지난 1년 동안 안드로이드 코틀린 프로젝트를 진행하면서 다양한 프로젝트를 경험하였습니다.

하지만 싸피나 네이버 부스트캠프, 우테코 같은 전문적인 교육 기관에서 제대로 배워보자는 마음이 커서 지원하기도 하였습니다.

경쟁률도 쎄고 통과할 수 있다는 생각보다는 걱정이 앞서지만, 프리코스 과정 자체도 큰 도움을 줄 것 같았습니다.

다른 안드로이드 개발자와 소통할 수 있는 장도 있고, 무엇보다 코드 리뷰 경험을 쌓을 수 있다는 게 가장 큰 장점인 것 같습니다.

 

 

새로운 IDE

안드로이드 스튜디오에서만 코틀린 언어를 사용하다가, 이번 과제를 위해서 인텔리제이를 설치하게 되었습니다.

정확한 차이는 모르겠으나, 앱 아이콘부터 전체적인 디자인이 좀 더 최신화 된 IDE를 사용하는 느낌이 들었습니다.

 

코드 관리나 작업 환경 자체는 인텔리제이가 더 좋은 것 같아요.

코틀린 서적으로 인강이나 공부를 하게 된다면 대부분 안드로이드 스튜디오를 활용하기 때문에 각 장단점이 있는 것 같습니다.

 

 

프로그래밍 요구사항

 

우선 프로젝트를 진행하기 전에 코딩 컨벤션 관련해서 학습을 진행했습니다.

https://jinudmjournal.tistory.com/139

 

코틀린의 코딩 컨벤션

코딩 컨벤션 코틀린의 문법을 사용하면서 코딩 컨벤션을 제대로 준수하고 있는지 알아보는 시간을 가졌습니다. 코딩 컨벤션은 각 언어 특성에 맞게 규칙을 적용하여 파일 이름, 줄 바꿈 간격,

jinudmjournal.tistory.com

 

프로그래밍 요구사항을 지키기 위해서 kotlin 코드 컨벤션 가이드라인을 준수해야 했기 때문입니다.

아래의 코틀린 코드 컨벤션에서 필요하거나 헷갈리는 기능만 뽑아서 정리하였습니다.

 

https://kotlinlang.org/docs/coding-conventions.html

 

Coding conventions | Kotlin

 

kotlinlang.org

 

다른 요구사항으로는 외부 라이브러리를 제안하고, 아래의 라이브러리를 통한 구현을 진행하는 것이었습니다.

 

위 요구사항을 준수하기 위해서 새로 설치한 인텔리제이 환경에서 테스트 해보았습니다.

 

다른 요구사항으로는 ApplicationTest의 모든 테스트를 통과하는 것이었는데요.

대학교 수업 시간에 자바로 테스트 코드를 작성해 본 경험은 있었지만, 코틀린으로 작업하는 게 처음이어서 코드를 꼼꼼히 읽어봤습니다.

다행히 어려운 부분은 없고 한눈에 어떻게 동작하는지 알 수 있었습니다.

 

기능 요구사항

 

기능 요구사항을 구현하기 전에 우선 docs/README.md에 기능 목록을 작성해 보았습니다.

 

평소에 정리하는 것을 좋아해서 작성해 두었는데, 과제 진행 요구 사항에 기능 목록을 정리해 추가하는 요구사항이 있었습니다.

 

막상 기능을 구현하려고 하니, 첫 코드를 작성하기가 어려웠습니다.

요구사항이 어려운 것은 아니었으나, 완벽하게 구현하고 싶어서 고민을 많이 하였습니다.

 

제가 사용한 방법은 클래스를 활용하여 기능을 구현한 것이었는데요, 의도치 않게 자바스러운 코드가 작성되었습니다.

더 좋은 방법이 있었겠지만, 첫 과제가 바쁜 일정과 겹치는 바람에 급하게 작성하게 되었습니다.

 

기능 구체화

GameConsole.kt

  • 숫자 야구를 진행하기 위한 오브젝트입니다.

MessageManager.kt

  • 메시지 출력을 위한 클래스입니다.

ScoreManager.kt

  • 점수를 구하기 위한 클래스입니다.

CheckNumberValidation.kt

  • 올바른 값이 입력되었는지 검증하기 위한 클래스입니다.

 

기능 구체화를 위처럼 정리하였습니다.

GameConsole을 통해서 전체적인 데이터와 게임 진행에 도움을 주는 코드를 작성하였으며,

MessageManager, ScoreManager, CheckNumberValidation 클래스를 나누어 기능을 세분화하였습니다.

 

val scoreManager = ScoreManager()
val messenger = MessageManager()
val discriminator = CheckNumberValidation()

 

Application의 main() 문에서 위와 같이 생성한 클래스를 통해서 각자 맡은 기능을 구현하도록 하였습니다.

 

 

리뷰

아쉬운 점은 테스트 코드를 직접 작성해 보자는 목표를 달성하지 못했습니다.

다음 과제에서는 테스트 코드 작성과 기능을 세분화하는 것을 목표로 하며, 좀 더 빠른 기능 구현에 집중해야 할 것 같습니다.

개인적인 일이 겹치면서 미뤄진 일정에 마감 하루 전에 겨우 제출할 수 있었습니다.

 

1주 차 미션이 끝나고 디스코드에 코드 리뷰를 부탁하는 글을 남겼습니다.

다른 분들은 어떻게 작성했는지 확인할 수 있었고, 코드 리뷰 경험을 쌓을 수 있었습니다.

 

부족하다고 느꼈던 점은 상수화를 깜빡한 점인데요.

숫자들이 어떤 의미인지, 의존성이 생기는 코드는 아닌지 확인이 필요할 것 같습니다.

 

그리고 가장 아쉬웠던 점은 기능 단위로 커밋하는 방식이 아닌, 한 번에 커밋하는 실수를 하게 되었습니다.

과제 제출 문서의 기능 구현 후 add, commit을 보고 가이드라인을 따라 하다가 기능 단위 커밋을 깜빡하게 되었습니다.

다른 분이 코드 리뷰에 작성해 주셔서 뒤늦게 확인하여 2주 차 과제에는 적용할 수 있게 되었습니다.