일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- doit코틀린프로그래밍
- 이지스퍼블리싱
- c++
- Visual Studio
- Tips프로그래밍강좌
- Programming
- CS
- Windows
- 포인터
- 함수
- 지식나눔강좌
- Kotlin
- 리뷰
- Tips강좌
- Win32
- 배열
- 티스토리
- 알고리즘
- VS ERROR
- c#
- 프로그래밍
- c
- Direct2D
- Javascript
- 백준
- 연산자
- 김성엽
- 문법
- tipssoft
- Desktop
- Yesterday
- Today
- Total
F.R.I.D.A.Y.
Kotlin: 10 반복문-for 본문

만일 100개의 정보를 일일이 확인하는 과정을 직접 손으로 작성해야 한다면, 어떻게 하실 건가요? 오늘은 분기 제어 구문과 함께 프로그램에서 양대 산맥으로 생각할 수 있는 반복문에 대해 알아봅니다.
Index
- for 구문
- 구조
- 사용
- Quiz. 10에서 1까지 역순으로 출력해보기
- 범위 연산자의 확장
- downTo(하행)
- step
- until
- 함수와의 연계
- Keyword: in
- Reference.
- Next.
for 구문copy^
많은 경우에서 사용하는 for 구문입니다. while, do-while 반복문에 비해 높은 사용 비중을 가지고 있습니다.[1]
코틀린에서는 아래처럼 for 구문을 구성할 수 있습니다.
구조copy^
for(bar in (min)..(max)){
//commands
}
bar는 for 구문이 반복되며 증감하는 값을 가지는 변수입니다. 기존의 변수 선언 방식에서 사용하는 var를 for 반복문에서는 사용할 수 없습니다.
사용copy^
실제 코드 구성을 볼까요? 다음에 보이는 코드는 1부터 10까지의 숫자를 차례로 출력하는 반복문입니다.
fun main(args:Array<String>){
for(i in 1..10){
println(i)
}
}
if 구문에서도 설명했지만, for 반복 구문에서도 만일 반복하는 명령문이 하나라면 중괄호를 제거할 수 있습니다.
for(i in 1..10) println(i)



Quiz. 10에서 1까지 역순으로 출력해보기copy^
1부터 10까지의 숫자 출력은 배워 봤습니다. 그렇다면 10에서 1까지 역으로 출력해볼까요?
fun main(args:Array<String>){
for(i in 10..1){
println(i)
}
}
이렇게 작성해봤나요? 프로그램을 실행해보면 아무것도 출력되지 않을 것입니다. 아무것도 출력되지 않았다면 정상입니다.[2]
범위 연산자의 확장copy^
이전 문단의 퀴즈의 해답을 여기에서 알 수 있습니다. 우리는 여태 범위 연산자로 <in (min)..(max)>만 배웠습니다. 그러나 이는 가장 기초적인 범위 연산자입니다. in 키워드 뒤에 자리하는 (min)..(max) 부분을 대체하는 다른 여러 키워드도 존재합니다.
downTo(하행)copy^
기존에 배웠던 점 두 개[3]를 사용하는 범위 연산자가 상행 범위 연산자라면 downTo를 이용하는 범위 연산자는 하행 범위 연산자라고 생각할 수 있습니다. 말 그대로 밑으로 내려간다는 말인데요, 다음 코드를 보겠습니다.
fun main(args:Array<String>){
for(i in 10..1){
println(i)
}
}
우리는 10부터 1까지 출력하기 위해 점 두 개를 이용하는 범위 연산자를 사용했습니다. 이는 출력되지 않았죠. 그렇다면, 점 두 개를 downTo로 변경해보겠습니다.
fun main(args:Array<String>){
for(i in 10 downTo 1){
println(i)
}
}


원하는 대로 출력되었네요! 다른 언어[4]에서는 하행 범위를 원할 때 증감식 부분에 감소식을 넣어주면 되었지만 코틀린에서는 downTo라는 키워드를 이용해 범위를 구성해야 합니다.
stepcopy^
또 한 가지, step 키워드도 존재합니다. 이번엔 1부터 10까지의 수 중에서 홀수만 출력해보도록 하죠.
fun main(args:Array<String>){
for(i in 1..10){
if(i % 2 == 1) println(i)
}
}
if 구문과 나머지 연산자[%]를 이용해 2로 나눈 나머지가 1인 경우[6] 값을 출력하도록 했습니다.


그러나 이 방식은 어떻게 보면 무식한 방법이라고 할 수 있습니다. 잠시 아래 코드를 보겠습니다.
fun main(args:Array<String>){
for(i in 1..10){
println("$i: ${i % 2 == 1}")
}
}
검사하는 숫자가 홀수인지를 판단하는 코드입니다. 만일 홀수라면 True가, 그렇지 않다면 False가 나오도록 구성되어있죠.


출력 결과를 보면, 1부터 10까지 모두 검사하는 것을 알 수 있습니다. 1부터 10까지 모두 검사하는 것은 좋지 않습니다. 우리는 이미 홀수는 2로 나누었을 때 나머지가 존재하는 수라는 것을 알고 있습니다. 자연수의 가장 작은 수는 1이죠. 1부터 10까지 2씩 더해가면 1, 3, 5, 7, 9 다섯 개의 수가 존재합니다. 이들만 출력하면 되죠.
그래서 필요한 것이 step 키워드입니다. step 키워드는 범위 연산자와 함께 사용되어 증감하는 범위를 결정합니다.
fun main(args:Array<String>){
for(i in 1..10 step 2){
println("$i: ${i % 2 == 1}")
}
}
그래서 이 코드를 실행하면, 다섯 번의 반복과 출력하는 모든 수가 true. 즉, 홀수라는 것을 알 수 있습니다.

달리 이야기하면, step 키워드를 입력하지 않았을 때 아래처럼 구성되었다고 볼 수 있겠네요.
fun main(args:Array<String>){
for(i in 1..10 step 1){
println("$i: ${i % 2 == 1}")
}
}
step 키워드를 사용할 때 주의할 점
step 키워드로 증감하는 값을 입력할 때는 무조건 양수를 입력해야 합니다.

이미 범위 연산에서 상행할지, 하행할지를 결정했기 때문에 제공을 안 하는 것이라 생각합니다.
untilcopy^
여태는 1..10이라 하면 10을 포함하도록 반복을 했습니다. 그러나 until 키워드를 이용하면 마지막 반복을 하지 않습니다. 정확히는 입력한 수보다 하나 낮은 만큼 반복이 이루어지도록 구성됩니다.


함수와의 연계copy^
일전에 함수의 가변 배열 사용하기에서 반복문 파트에서 다루겠다고 한 것이 있습니다.

우리가 vararg 키워드를 이용하면 가변 인자를 받을 수 있는 매개 변수를 선언할 수 있다고 했습니다.
vararg로 선언한 매개 변수는 iterable. 즉, 순회 가능한 객체[7]가 됩니다.
Keyword: incopy^
in 키워드를 이용하면 순회 가능한 객체에 접근할 수 있습니다.
fun vArgTest(vararg args:Int){
for(v in args){
println(v)
}
}


여태 다른 언어를 사용해본 사람으로서, in 키워드는 추후에 배우게 될 배열 등과 같은 자료구조에서 유용하게 사용될 겁니다.
여기에서 이 in 키워드를 다루기에는 시기상조인 것 같습니다. 이후에 또다시, 그리고 더 깊게. in 키워드를 포함한 여러 내용을 배우겠습니다.
Reference.copy^
Loops - Kotlin Programming Language
kotlinlang.org
다음 시간에는 또 다른 반복 구문, while과 do-while에 대해 알아봅니다.
Next.copy^
Kotlin: 11 반복문-while, do-while
이전 시간에 for 구문에 대해 알아봤습니다. 이번엔 while, do-while 반복문에 대해 알아보겠습니다. while 구문 사람마다 성향 차이가 있듯이 코드를 작성하는 사람마다 선호하는 반복문이 있습니다. 그래서 여..
pang2h.tistory.com
'DEV > Kotlin' 카테고리의 다른 글
Kotlin: 12 흐름 제어하기 (0) | 2020.04.04 |
---|---|
Kotlin: 11 반복문-while, do-while (0) | 2020.04.03 |
Kotlin: 09 분기 제어-when (0) | 2020.04.02 |
Kotlin: 08 분기 제어-if (0) | 2020.04.01 |
Kotlin: 07 함수 (0) | 2020.03.31 |