Welcome! Everything is fine.

[AOS] 우아한테크코스 6기 프리코스 1주차 회고 : 숫자야구 본문

자격증 및 기타 활동/우아한테크코스

[AOS] 우아한테크코스 6기 프리코스 1주차 회고 : 숫자야구

개발곰발 2023. 10. 30.
728x90

📌 우테코 프리코스 시작!

우아한테크코스(우테코) 6기 프리코스 1주차 미션이 끝났다. 이를 기록하기 위해 조금 늦었지만 짧은 회고를 작성해보려한다.

🏃🏻 | 진행방식

우테코에서는 이메일로 매주 목요일 새로운 미션을 준다.

첫 미션을 받은 이메

이메일을 잘 읽고, 해당 주차 미션 저장소를 Fork하여 기능을 구현한다. 사실 미션 저장소에 나와있는 README.md만 꼼꼼히 읽고 이해한다면 반은 한 것!(이라고 믿고 싶은) 모두 구현했다면 Pull Request(PR)를 보내고 우테코 지원 플랫폼에서 과제를 제출하면 끝이다.

말은 쉬워보이지만 이런 미션이 처음인 나는 모든 것이 새로웠다. 기능목록을 README.md에 작성하는 법이나 PR을 보내는 법조차 몰랐다. 그러나 우테코에서는 모르더라도 끝까지 스스로 배우고 학습하며 '몰입'하는 것을 추천하고 있다. 그러니 걱정은 내려놓고 마음껏 몰입할 수 있는 환경을 만드는 것이 중요할 것 같다!

🙌 | 우테코 디스코스 입성

1주차 이메일을 받으면 우테코 디스코드 채널에 들어가게 된다. 백엔드, 프론트엔드, 모바일 분야의 모든 사람들이 모여 함께 배우고 성장할 수 있는 공간이다. 상당히 활발하게 운영되고 있어서 재밌고 유용한 자료들이 마구 올라와 열정이 더욱 불타올랐다. 단, 미션이 끝나기 전에 미션에 대한 내용을 토론하거나 물어본다면 대부분 눈알 이모지👀로 표현한다. 스스로 학습할 기회를 지켜주는 것이다. 

📌 미션 내용

🤔 | 미션 전의 나?

1주차 미션은 '숫자 야구 게임' 이었다. 미션은 기능 요구 사항, 프로그래밍 요구 사항, 과제 진행 요구 사항으로 구성되어있었다. 특히 맨 처음에는 기능 요구 사항을 보고 스스로 기능 목록을 README에 정리해야했다. 그러나, 미션을 진행하며 파악한 나의 상태는 이러했다.

  • 코틀린 문법에 약하다.
  • README를 작성해본적이 없으며 왜 적는지 모른다.
  • 커밋메세지 컨벤션을 모르고 아무렇게나 커밋한다.
  • 클린코드 원칙에 신경 쓰지 않고 코드를 작성한다.
  • 리팩토링을 해본적이 없다.

...이렇게 완벽히 모르는 채로 시작했다. 괜찮다, 이제 알아가면 되니까!

 

👀 | 모르는 것들을 배우자

✅ 기능목록을 README에 정리해보기

가장 먼저 한 일은 기능 목록을 README에 정리하는 것이었다. 사실 이렇게 간단하게 적었는데 더 세세하게 나눌 수도 있을 것 같다.

또 README가 필요한 이유를 정확히 알지 못했는데, 이번 미션에서 찾아보고 그 이유와 중요성을 알게되었다.

 

 커밋 제대로 하기

나는 커밋을 자주 하지 않고 어떤 커다란 기능 하나가 완성되어야만(ex. 북마크 기능, 검색 기능, 지도 기능...) 커밋을 했다. 지금 생각하면 상당히 위험하게 커밋하는 버릇을 들인 듯 하다(...)  그러나 이번 미션 진행 방식에는 이렇게 적혀있었다.

특히 기능을 구현하기 전에 기능 목록을 만들고, 기능 단위로 커밋 하는 방식으로 진행한다.  

 

이 말을 따라 기능 단위로 커밋하도록 노력했지만 꽤나 어색했다. 익숙해지도록 해야할 것 같다.

또 나는 커밋메세지 컨벤션을 모르고 있었다가 이번에 알게되었다. 다음과 같이 제목에 타입을 적어 어떤 작업을 했는지 더 명확하게 알려주도록 했다.(중간에 습관처럼 아무렇게나 적고 커밋해버린 흔적이 있다..)

 

커밋메세지 컨벤션 가이드

 

AngularJS Git Commit Message Conventions

AngularJS Git Commit Message Conventions. GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

 리팩토링하며 클린코드 신경쓰기

사실 이번에는 클린코드를 신경쓰며 리팩토링 했다기 보다는 클린코드란 무엇인지를 알아가는 과정이었다. 코틀린을 컨벤션을 하나씩 읽어보며 습득해가야할 것 같다.

 

코틀린 컨벤션 가이드

 

Coding conventions | Kotlin

 

kotlinlang.org

 코틀린 알아가기

코틀린은 기초만 잠깐 배웠는데, 계속 자바로만 코딩해왔기 때문에 익숙하지 않았다. 유용한 API도 많은데 그걸 모르니 어렵게 돌아갔던 것 같다. 모르는 건 찾아본 후 바로 바로 정리해서 내 것으로 만드는 습관을 들여야겠다!

 

왠지 코드가 하나도 없어서 휑해보여 리팩토링한 코드 일부를 가져왔다. 중복된 숫자를 입력한 경우 예외처리하는 코드이다. 수정 전 코드를 보면 for문-for문-if문으로 되어있다. 아, 여기서 한 가지! 2주차 미션에서 추가된 요구사항이 있다.

indent(인덴트, 들여쓰기) depth를 3이 넘지 않도록 구현한다. 2까지만 허용한다. 예를 들어 while문 안에 if문이 있으면 들여쓰기는 2이다. 힌트: indent(인덴트, 들여쓰기) depth를 줄이는 좋은 방법은 함수(또는 메서드)를 분리하면 된다.

 

그래서 다음과 같은 코드는 지양하고 있다.

for (i in user.indices) {
    for (j in i+1untiluser.size) {
        if (user[i] == user[j])
            throw IllegalArgumentException("중복되지 않는 숫자를 입력하세요.")
    }
}

 

수정 후에는 distinct()라는 함수를 사용해 리스트에서 중복값을 제거한 값이 원래 값과 동일하지 않으면 예외처리를 하도록 했다. 이렇게 작성하니 훨씬 보기 편하다.

if (!user.distinct().equals(user))
        throw IllegalArgumentException("중복되지 않는 숫자를 입력하세요.")

📌 공통 피드백 정리

다음은 우테코로부터 받은 공통 피드백 중 일부이다. 하나하나 꼭 머릿속에 새겨놓고 다음 미션을 진행해야겠다.

  • 요구사항을 정확히 준수하기
  • 의미있는 커밋 메시지 작성하기
  • git을 통해 관리할 자원 고려하기
  • 이름을 통해 의도 드러내기
  • 공백 라인을 의미 있게 사용하기
  • 의미 없는 주석 달지 않기
  • Kotlin에서 제공하는 API 적극 활용하기
  • 배열 대신 Kotlin Collection 사용하기

📌 다음 목표

이번주는 정말 정신없이 지나가서 코드 리뷰도 제대로 하지 못했다..사실 코드 리뷰를 해본 적이 없어 다른 사람들이 하는 것만 몇 개 봤는데, 부끄러워도 다음 미션에서는 나도 꼭 참여해봐야겠다. 잘 몰라도 부딪혀봐야 공부가 될 것 같다! 다음 미션에서의 나의 소소한 목표는 다음과 같다.

 

✔️ 객체지향적으로 구성하기 : 1주차에서는 함수로만 구현했는데, 많은 사람들이 객체지향적으로 코딩하고 있었다. 또한 MVC 패턴을 사용하는 사람들이 많았는데 사실 나는 패턴을 적용해본적이 없어 생소했다. 어쨌든 나도 2주차에서는 뭔가를(?) 나눠서 객체지향적인 코드에 한 발자국이라도 가까워지고 싶다.

✔️ 기능 목록 좀 더 자세히 작성하기 : 기능 목록에 대한 더 많은 고찰이 필요할 것 같다.

✔️ 코딩 컨벤션에 맞춰 깔끔히 작성하기 : 코틀린 컨벤션을 다 숙지하지는 못했지만 좀 더 깔끔하고 가독성 좋은 코드가 될 수 있도록 하고 싶다.