[출처 - Kotlin In Action] [아래 내용들은 Kotlin In Action을 공부하면서 스스로 정리한 내용입니다]
이번에는 for 문과 while 문을 공부해 보겠습니다.
while의 경우에는 do while과 while 두가지가 있고 Java와 다르지 않습니다.
do{
...
}while(조건)
while(조건){
...
}
하지만 for문은 쫌 다릅니다.
Java의 경우에는
for(int i = 0; i < size ; i++){
....
}
for( item : List<item>()){
....
}
로 for문을 만듭니다.
반면 kotlin에서는 아래와 같이 for문을 만들 수 있습니다. (아래와 같이 작성하면 1부터 100까지 값이 프린트 됩니다.)
for(i in 1..100){
println(i)
}
// or
for(i in 1 until 101){ // until의 경우에는 전까지만 적용됩니다.
println(i)
}
그리고 100부터 1까지 표현은
for (i in 100 downTo 1 ) {
println(i)
}
로 만들 수 있습니다. (다운 count의 경우에는 .. 으로 표현이 되지 않습니다.)
마지막으로 step을 사용하면 step을 적용한 만큼 건너 뛰어 표현합니다.
for(i in 1..100 step 2){
println(i)
}
// or
for(i in 1 until 101 step 2){
println(i)
}
이렇게 할 경우 1,3,5,7, .... , 95,97,99가 print됩니다.
그리고 만약 array의 통하여 for 문을 만든다면 다음과 같습니다.
val list = listOf<String>("Alpha","Beta","Gamma","Delta")
fun main(args: Array<String>) {
for (i in 0..list.size) {
print(i)
} // 0,1,2,3,4,
for (i in list.indices) {
print(i)
} // 0,1,2,3,
for (i: String in list) {
print(i)
} // Alpha,Beta,Gamma,Delta,
}
이런 식으로 표현 할 수 있습니다. 첫번째 for문은 위에서 작성한 for문과 마찬가지로 0부터 list의 size 까지 나타냅니다.
2번쨰 for문은 list의 데이터 인덱스를 나타내는 값을 쓸 때 사용합니다. 즉 위의 list는
list[0] = "Alpha" list[1] = "Beta" list[2] = "Gamma" list[3] = "Delta"로 0,1,2,3이 데이터 인덱스를 나타내기 때문에 0,1,2,3을 출력합니다. 마지막 for문은 list가 포함하는 데이터를 출력하는 방식입니다. (list가 String 타입을 가지는 list이기 때문에 String을 사용하고 있습니다. 다른 타입이면 다른 타입을 적용하면 그 타입에 맞게 i에 데이터가 적용됩니다.)
숫자 뿐만 아니라 문자로도 표현을 할수 있습니다.
for (c in 'A'..'F') {
println(c)
}
이렇게 할경우 결과 값은 A B C D E F로 출력 됩니다. 이런 특성을 이용하여 각 문자의 2진값을 출력 해 볼수도 있습니다.
fun main(args: Array<String>) {
val binaryReps = TreeMap<Char, String>()
for (c in 'A'..'F') {
val binary = Integer.toBinaryString(c.toInt())
binaryReps[c] = binary
}
for ((letter, binary) in binaryReps) {
println("$letter = $binary")
}
}
첫번쨰 for문을 사용하여 TreeMap에 각 문자와 그에 맞는 이진수 값을 string으로 저장합니다. 그리고 그 결과값을 2번째 for을 사용하여 출력합니다. 출력 결과는 아래와 같이 출력 됩니다.
A = 1000001
B = 1000010
C = 1000011
D = 1000100
E = 1000101
F = 1000110
마지막으로 in은 for문 말고도 다른 곳에서 사용할 수 있습니다.
fun isLetter(c: Char) = c in 'a'..'z' || c in 'A'..'Z'
fun isNotDigit(c: Char) = c !in '0'..'9'
fun main(args: Array<String>) {
println(isLetter('q'))
println(isNotDigit('x'))
}
isLetter는 c가 a~z이거나 A~Z일 경우 true를 return 하고 isNotDigit는 0~9사이의 값이 아닐 경우 true를 출력합니다.
또한
fun recognize(c: Char) = when (c) {
in '0'..'9' -> "It's a digit!"
in 'a'..'z', in 'A'..'Z' -> "It's a letter!"
else -> "I don't know…"
}
fun main(args: Array<String>) {
println(recognize('8'))
}
when에서 조건으로 사용하여 c가 0~9일 경우 It's a digit!를 return하고 a~z 또는 A~Z일 경우 It's a letter!를 return 합니다.
'2023년 이전 > kotlin' 카테고리의 다른 글
ArrayList copy 관련 (0) | 2019.10.25 |
---|---|
코틀린(Kotlin)- 코틀린의 예외 처리 (0) | 2019.10.11 |
코틀린(Kotlin)- 선택 표현과 처리 (0) | 2019.10.11 |
Kotlin 에서 JUnit 사용하기 (0) | 2019.08.27 |
코틀린(Kotlin)- 클래스와 프로퍼티, 그리고 디렉터리와 패키지 (0) | 2019.08.21 |