목차

회고

TDD, 클린 코드 with Kotlin 회고

천만일 2023. 12. 10. 22:03

우아한 테크코스를 운영하는 기관인 NextStep에서 진행하는 TDD, 클린 코드 with Kotlin 7기 과정을 수료했습니다!!

아직 마지막 미션의 리뷰를 기다리고 있지만..🥲 끝이 보이는 것 같아서 조금 미리 회고를 작성해보려고 합니다.

 

그게 뭐야?

NextStep은 개발자를 준비하시는 분들과 현업에서 개발을 하시는 분들을 대상으로 제공하는 스터디입니다.

진행 방식은 다음과 같습니다.

  1. 매주 정해진 요일에 라이브 강의를 듣고 코딩 미션을 진행하게 됩니다.
  2. 각 미션마다 이전에 우수한 성적으로 수료하신 분들이 리뷰어로 매칭됩니다.
  3. 미션마다 존재하는 마일스톤(Step)을 달성할 때마다 PR을 올립니다.
  4. 리뷰어분들의 피드백을 받으면서 코드를 개선하고 머지합니다.

 

신청한 이유

안드로이드 공부를 계획하고 시간이 꽤나 지난 후였습니다.

하지만, Flutter 프로젝트를 이미 벌인 상태였고.. 학교 생활까지 같이 하니 사실상 안드로이드는커녕 Kotlin에 적응할 시간도 벌지 못하고 있었습니다.

그런 생활에 좌절감을 겪던 도중, TDD, 클린 코드 with Kotlin 스터디를 만나게 되었습니다.

이펙티브 코틀린이 먼저 보였던 저는 Kotlin 숙련도를 키우기 위해 바로 질러버렸습니다😂

이펙티브 코틀린만 보았다..

 

이때, 저는 이 스터디가 TDD, 클린 코드에 포커스가 맞춰진 줄 몰랐습니다.. 하하

하지만 테스트 코드에 대한 갈망은 이전 회사에서 일하면서부터 항상 존재했습니다.

오히려 좋은 일이었던 것 같습니다👍

위에 사진에서 보시면 아시겠지만 가격이 만만하지 않습니다.

그래서 정말 굳고 빠른 결심과 함께 신청했습니다💪

 

좋았던 점

제가 만나 뵈었던 멘토분들마다 중점적으로 봐주시는 부분이 다른 것 같았습니다.

여러 관점에서 코드를 리뷰받을 수 있다는 점이 정말 좋았어요!!👍

  • 코틀린스러운가?
  • 객체지향적인가?
  • 테스트가 충분히 잘 작성되었는가?
  • 코드의 가독성이 좋은가?

 

또한, TDD를 경험해 볼 수 있다는 점이 좋았습니다👍

TDD는 당장의 퍼포먼스에 대한 의구점이 항상 따라오기에, 회사에서는 선뜻 적용해 보기가 어렵다고 생각합니다.

혼자서 하더라도, 잘하고 있는지 알기 어렵고요!

하지만 TDD, 클린 코드 with Kotlin에서는 강사님과 소통하면서 강사님의 라이브 코딩을 관람하는 내용도 있어서, 도움이 많이 됐습니다.

좋은 개발자의 코딩을 라이브로 보며 어떠한 관점으로 접근하시는지 엿볼 수 있어서 좋았습니다👍

 

아쉬운 점

아쉬운 점은 바로 저입니다🥲

중간에 인턴쉽이 열려서 자소서를 작성하다 보니 미션이 조금씩 밀리기 시작했습니다.

미션이 밀리면..? 코드의 퀄리티가 점점 떨어집니다.

악순환의 고리에 빠져든 것이죠😵‍💫

내색 없이 항상 훌륭한 피드백 주신 리뷰어님들께 감사의 말씀을 전합니다.

 

이번 과정을 통해 Kotlin을 칠 때, 낯선 기분이 들지 않게 되었기에 일부의 성공도 있지만,

시간은 항상 부족하고, 고민을 많이 할수록 좋은 코드가 나올 텐데 그렇지 못해서 아쉬움이 남습니다.

기회가 된다면 다음에는 다른 목표(ex. 객체지향 프로그래밍)를 잡고 열심히 미션을 수행해 봐야겠습니다!

 

기억에 남는 피드백

제게 큰 영감을 주었던 피드백이나 개념들을 몇 가지 정리해보려고 합니다.

 

일급컬렉션

일급컬렉션은 컬렉션을 한 번 더 포장하여 사용하는 방법을 말합니다.

관련된 내용은 이미 다른 글에 정리해 두었으니 언급만 하겠습니다!

 

일급 컬렉션 (First Class Collection)

NextStep의 TDD, 클린 코드 with Kotlin을 수강하며 일급 컬렉션에 대한 내용을 접했습니다. 적용하는 방법은 간단하지만, 개념은 간단하지 않아서 흥미로웠습니다. 일급 컬렉션?? 먼저 컬렉션에 대해

burgeryoung.tistory.com

 

 

JUnit5의 ParameterizedTest과 테스트 픽스쳐

JUnit5에서는 ParameterizedTest라는 어노테이션을 통해 다수의 인풋을 테스트할 수 있습니다.

 

[테스트] JUnit5의 ParameterizedTest

안녕하세요. 오늘은 junit5의 ParameterizedTest에 대해 알아보겠습니다. 다음은 문자열로 입력받은 수식을 계산해서 출력해 주는 계산기에 대한 테스트입니다. @Test fun testCalculateAddExpression() { val outputS

burgeryoung.tistory.com

 

 

require문의 활용

require문을 활용하면 throw문을 대체할 수 있습니다.

if (arg != null) {
	throw IllegalArgumentException
}

// ->
require(arg == null) { "Exception Message" }

 

 

Backing properties의 활용

private 멤버 변수에 접근하고 싶다면 언더바를 사용해 볼 수 있습니다.

class Test(cardList: List<Card>) {
		private val cardList = cardList.toMutableList()
		fun getCardList(): List<Card> = cardList.toList()
}

// -> 

class Test(cards: List<Card>) {
    private val _cards: MutableList<Card> = cards.toMutableList()
    val cards: List<Card>
        get() {
            return _cards.toList()
        }
}

 

 

Properties | Kotlin

 

kotlinlang.org

 

 

생성자에 코드 넣지 않기

생성자에서 받은 인자를 곧바로 연산하여 멤버 변수에게 할당했을 때 주신 피드백입니다.

리뷰어님께서 다음 블로그 글을 추천해 주셨어요 😊

 

[엘레강트 오브젝트] 1. 출생 - (3) 생성자에 코드를 넣지 마세요

인자에 손대지 말자 class Cash { private int dollars; Cash(String dlr) { this.dollars = Integer.parsInt(dlr); } } 인자를 정수로 표현할 필요는 있지만, 생성자 내 객체 초기화에는 코드가 없어야 하고 인자를 건드려

jackjeong.tistory.com

 

 

Inline value class

값이나 객체를 포장할 때, Inline value class를 사용하면 포장하기 전 자료구조의 성능적 이점을 누릴 수 있습니다.

 

Inline value classes | Kotlin

 

kotlinlang.org

 

 

이만 TDD, 클린 코드 with Kotlin 회고글이었습니다~!

읽어주셔서 감사합니다!