코틀린에서의 반복문은 세 가지 제어 구조를 제공한다.
📕do- while
fun main(){
var sum=0
var n=0
do{
n=readLine()!!.toInt()
sum+=n
}while(n!=0)
println("Sum: $sum")
}
- do 와 while 키워드 사이에 있는 루프 몸통을 실행한다.
- while 키워드 다음에 있는 조건을 평가한다. 이 값이 참이면 1번 단계로 되돌아가고, 이 값이 거짓이면 루프 문 다음에 있는 문을 실행한다.
루프 몸통을 실행한 후에 조건을 검사하기 때문에 루프 몸통이 최소한 한 번은 실행
한다는 사실을 유의해야 한다.!
📕while
fun main(){
val num = Random.nextInt(1,101)
var guess =0
while(guess!=num) {
guess = readLine()!!.toInt()
if (guess < num) println("Too small")
else if (guess > num) println("Too big")
}
println("Right : num is $num")
}
어떤 조건이 참인 동안 루프를 실행하지만 루프 몸통을 실행하기 전에 조건을 먼저 검사한다. 이 경우 조건이 거짓이면 루프 몸통이 한 번도 실행되지 않는다.
do while
Vs while
do while
문은 루프를 실행하고 조건을 검사하지만 while
문은 조건을 검사하고 루프를 실행한다는 점에서 차이가 있다.
📕for
fun main() {
val a=IntArray(10) {it}
var sum=0
for(x in a){
sum+=x
}
println("sum is $sum")
}
- 이터레이션 대상을 담을 변수 정의(x)
- 이터레이션에 사용할 값들이 담겨 있는 컨테이너를 계산하기 위한 식(a)
- 루프 몸통에 해당하는 문({sum+=1}). 이터레이션 시 이 몸통이 실행된다.
이터레이션 변수는 루프 몸통 안쪽에서만 접근할 수 있으며 일반 변수와 달리 val이나 var을 붙이지 않고 자동으로 불변 값이 된다.
즉 루프 몸통에서 루프 변수를 변경할 수는 없다.
🔎자바 vs 코틀린
코틀린의 for 루프는 Iterable 인스턴스에 대한 루프를 간편하게 작성하도록 해주는 자바 for-each 루프와 비슷하다.
배열, 리스트, 집합은 Iterable에 속하며, 사용자가 정의한 타입도 Iterable을 상속할 수 있다.
하지만 코틀린에서는 선언, 초기화, 검사 및 갱신으로 구성되는 일반 자바 for 루프에 해당하는 언어 구조가 없다.
자바에서는 문자열의 각 문자에 대해 루프를 직접 수행할 수 없다. 따라서 인덱스를 사용한 루프를 돌거나, 문자열을 문자 배열로 바꾸는 등의 대안을 사용해야 한다.
수 범위에 대한 일반적인 루프를 수행하기 위해서는 진행 타입을 사용해야 한다. [.. ,until
,in
,!in
]
💡인덱스에 접근해서 배열의 원소 바꾸기
fun main() {
val a=IntArray(10) {it*it}
var sum=0
for(i in 0..a.lastIndex){
if(i%2==0){ //index가 짝수일때 실행
a[i]*=2
}
}
}
💡step을 사용한 코드
fun main() {
val a=IntArray(10) {it*it}
var sum=0
for(i in 0..a.lastIndex step 2){ //index가 2만큼 증가시켜서 짝수만 돌아가게됨.
a[i]*=2
}
}
💡문자열과 배열에는 원소나 문자의 인덱스 범위를 제공하는 indices라는 프로퍼티가 들어있다.
fun main(){
val a= IntArray(10){it*it}
for( i in a.indices step 2){
a[i]*=2
}
}
✔정리
- 코틀린에서 반복문을 수행하는 구조는
while
,do-while, for
3가지가 있다. - do -while과 while문은 조건을 검사하고 조건을 만족하면 루프를 실행하는 구조다.
- do-while은 루프를 실행 후에 조건을 검사하기에 최소 1번은 실행된다.
- while은 루프를 실행하기 전에 조건을 검사하기 때문에 조건이 맞지 않다면 루프가 실행 안될 수도 있다.
- for은 여러 값이 들어있을 수 있는 값에 대한 루프를 수행한다.
- for에서 사용하는 이터레이션 변수는 루프 몸통 안쪽에서만 접근 가능하며 루프 몸통에서 루프 변수를 변경할 수 없다.
- 문자열과 배열에는 원소나 문자의 인덱스 범위를 제공하는 indices라는 프로퍼티가 들어있다.(C++ vector.size() 느낌?)
'Skils > Kotlin' 카테고리의 다른 글
[Kotlin] 예외 처리 (0) | 2022.08.27 |
---|---|
[Kotlin] break & continue, 내포된 루프와 레이블 (0) | 2022.08.17 |
[Kotiln] 조건문 when (0) | 2022.08.17 |
[Kotlin] 조건문 if & 범위,진행,연산 (0) | 2022.08.17 |
[Kotlin] vararg(가변인자) (0) | 2022.08.12 |