Tiny Star
본문 바로가기
Dev Log/Kotlin

[Kotlin] 반복문 리팩토링: for 루프 대신 'repeat'를 써야 하는 이유

by 별터 2026. 1. 3.

서론: 코드의 의도(Intent)를 드러내라

 

'클린 코드(Clean Code)'의 저자 로버트 C.마틴은 코드가 잘 읽혀야 한다고 강조합니다. 코드가 잘 읽힌다는 것은 작성자의 의도 가 명확히 보인다는 뜻입니다.

 

프로그래밍의 기초인 반복문을 짤 때도 의도를 드러낼 수 있을까요? 단순히 "5번 반복해"라는 로직을 짤 때, 우리는 습관적으로 for문을 사용합니다. 하지만 코틀린은 더 나은 대안인 repeat를 제공합니다.

 

오늘은 아주 사소해 보이지만 코드의 퀄리티를 높여주는 반복문 디테일에 대해 이야기해 보겠습니다.


1. 전통적인 방식: for (i in range)

 

코틀린의 for문은 자바보다 훨씬 간결합니다.

// 0부터 4까지 (총 5회)
for (i in 0 until 5) {
    playGame()
}

이 코드는 아무런 문제가 없습니다. 잘 돌아갑니다. 하지만 '가독성' 측면에서 두 가지 아쉬운 점이 있습니다.

  1. 불필요한 변수 i 선언: playGame() 함수는 i가 필요 없는데도, 문법을 맞추기 위해 i를 선언했습니다.
  2. 범위 해석의 피로감: 0 until 5인지, 1..5인지 읽는 사람이 범위를 한 번 더 생각해야 합니다.

즉, 단순 횟수 반복 이라는 의도에 비해 문법이 살짝 무겁습니다.


2. 코틀린스러운 방식: repeat(n)

 

코틀린 표준 라이브러리(Standard Library)에는 repeat라는 함수가 있습니다. 이름 그대로 '반복하라'는 뜻입니다.

val tryCount = 5

// "tryCount 번 반복해라"
repeat(tryCount) {
    playGame()
}

 

차이점이 느껴지시나요?

  • i 같은 인덱스 변수가 사라졌습니다.
  • 0 until ... 같은 범위 연산자를 해석할 필요가 없습니다.
  • 코드가 마치 영어 문장을 읽는 것처럼 자연스럽게 읽힙니다. (repeat tryCount)

이것이 바로 코틀린이 추구하는 간결함(Conciseness)가독성(Readability) 입니다.


언제 for를 쓰고, 언제 repeat를 쓸까?

 

무조건 repeat만 써야 하는 것은 아닙니다. 상황에 맞게 골라 쓰는 것이 실력입니다.

 

✅ repeat를 써야 하는 경우 (추천)

  • 인덱스(i)값이 로직에 전혀 필요 없을 때.
  • 단순히 N번 수행하는 것이 목적일 때.
  • 예: 자동차 경주 게임의 라운드 진행, 로또 N장 구매 등.

✅ for를 써야 하는 경우

  • 인덱스를 활용해 배열의 특정 위치에 접근해야 할 때.
  • 역순으로 돌거나(downTo), 2칸씩 띄워서(step) 반복해야 할 때.
  • 중간에 breakcontinue로 제어해야 할 때.
// 복잡한 제어는 for문이 낫다
for (i in 10 downTo 1 step 2) {
    println("Count: $i")
}

 

💡 꿀팁: repeat에서도 인덱스를 쓸 수 있다?

사실 repeat 블록 내부에서도 현재가 몇 번째 반복인지 알 수 있습니다. 기본적으로 it이라는 이름으로 0부터 시작하는 인덱스가 제공됩니다.

repeat(3) { index ->
    println("${index + 1}번째 시도 중입니다.")
}

하지만 인덱스 제어가 주목적이라면 for문을 쓰는 것이 더 명확할 수 있습니다.


결론

 

개발자는 코드를 작성하는 시간보다 읽는 시간이 훨씬 많습니다. 단순히 '돌아가는 코드'에 만족하지 마세요.

 

"이 반복문에서 i가 필요한가?"를 한 번만 더 고민해 보세요. 필요 없다면 과감하게 repeat를 사용하세요. 작은 습관의 차이가 읽기 편안한 코드를 만듭니다.