서론: 코드의 의도(Intent)를 드러내라
'클린 코드(Clean Code)'의 저자 로버트 C.마틴은 코드가 잘 읽혀야 한다고 강조합니다. 코드가 잘 읽힌다는 것은 작성자의 의도 가 명확히 보인다는 뜻입니다.
프로그래밍의 기초인 반복문을 짤 때도 의도를 드러낼 수 있을까요? 단순히 "5번 반복해"라는 로직을 짤 때, 우리는 습관적으로 for문을 사용합니다. 하지만 코틀린은 더 나은 대안인 repeat를 제공합니다.
오늘은 아주 사소해 보이지만 코드의 퀄리티를 높여주는 반복문 디테일에 대해 이야기해 보겠습니다.
1. 전통적인 방식: for (i in range)
코틀린의 for문은 자바보다 훨씬 간결합니다.
// 0부터 4까지 (총 5회)
for (i in 0 until 5) {
playGame()
}
이 코드는 아무런 문제가 없습니다. 잘 돌아갑니다. 하지만 '가독성' 측면에서 두 가지 아쉬운 점이 있습니다.
- 불필요한 변수
i선언:playGame()함수는i가 필요 없는데도, 문법을 맞추기 위해i를 선언했습니다. - 범위 해석의 피로감:
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) 반복해야 할 때. - 중간에
break나continue로 제어해야 할 때.
// 복잡한 제어는 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를 사용하세요. 작은 습관의 차이가 읽기 편안한 코드를 만듭니다.
'Dev Log > Kotlin' 카테고리의 다른 글
| [Kotlin] 견고한 코드 만들기: require와 check를 활용한 방어적 프로그래밍 (0) | 2026.01.04 |
|---|---|
| [Kotlin] 클래스 초기화의 비밀: init 블록과 실행 순서 완벽 가이드 (0) | 2026.01.04 |
| [Kotlin] 코틀린 컬렉션 함수 정복하기: map, filter, forEach의 모든 것 (0) | 2026.01.03 |
| [Kotlin] 예외 처리 패턴: 사용자 입력을 '우아하게' 다시 받는 법 (ft. 재귀 함수) (0) | 2026.01.02 |
| [Kotlin/Test] 테스트 코드 작성을 위한 JUnit5와 AssertJ 문법 총정리 (TDD 기초) (0) | 2026.01.02 |