티스토리 뷰
본 포스팅의 내용은 [깡샘의 코틀린 프로그래밍]을 공부하고 작성자가 생각을 정리하기 위해서 작성한 글이므로 더욱 자세한 내용을 알고 싶으신 분은 [깡샘의 코틀린 프로그래밍]을 강력 추천합니다!!
1. 조건문
1. 1. if 표현식
- 코틀린에서 일반적인 if 문과 비교해 차이점이 있는데 if 문이 표현식(expression)이라는 것이다.
표현식(expression) : 변수, 상수, 연산ㅅ자, 함수로 구성되어 무언가 값을 만드는 문장
구문(statement) : 특정 단어나 기호의 조합으로 무언가가 실행되도록 명령을 지시하는 문장
간단하게 말하자면 결괏값을 만드는지 아닌지의 차이로 인식하면 된다.
- 다음과 같이 작성이 가능하다.
val result = if (isNight) "Good Bye" else "Good Morning"
- if를 표현식으로 사용할 때는 반드시 else문을 꼭 작성해야 한다.
- if 문에 중괄호 { }를 명시하여 여러 줄로 작성할 때 if 표현식으로 발생하는 데이터는 맨 마지막에 작성해야 한다.
val result2 = if (isNight) {
print("Good Bye")
"Good Bye" // { }의 마지막 줄인 이 부분이 result2의 값으로 할당된다.
} else {
print("Good Morning")
"Good Morning" // { }의 마지막 줄인 이 부분이 result2의 값으로 할당된다.
}
1. 2. when 표현식
- 코틀린에서 제공하는 when은 C나 자바의 switch-case 구문과 비슷하지만, 기능이 더 많아서 다채롭게 이용할 수 있다.
- switch 구문에서는 분기 조건을 정수로만 지정할 수 있지만, when에서는 정수 이외에도 다양한 타입의 데이터를 지정할 수 있으며, 아예 타입 자체를 지정할 수도 있다.
- when의 분기 조건을 명시할 때 콤마(,)를 이용하여 여러 값을 한꺼번에 표현할 수 있으며, 분기 조건을 표현식으로 작성할 수 있다.
- in이라는 예약어를 사용하여 데이터의 범위를 표현할 수도 있다.
- 숫자 범위 뿐만 아니라 집합 데이터에도 사용한다.
when(data1){
10, 20 -> println("data1 is 10 or 20")
getSixty() -> println("data1 is 60")
30 + 40 -> println("data1 is 70")
in 11..20 -> println("data1 is 11 to 20")
in list1 => println("data1 is in list1")
}
- when에서 데이터 타입을 분기 조건으로 명시해야 할 때는 when에 지정하는 인수를 Any 타입으로 지정하면 된다.
fun testWhen(data: any){
when(data){
1 -> println("data value is 1")
"hello" -> println("data value is hello")
is Boolean -> println("data type is Boolean")
}
}
- 표현식으로 사용 가능하다. 표현식으로 사용할 때는 if문과 마찬가지로 else 부분을 생략할 수 없고 { }를 사용할 때는 마지막 줄에 데이터의 값이 결괏값이 되어야 한다.
2. 반복문
var sum: Int = 0
for (i in 1..10) {
sum += 1
}
=====================
var sum: Int = 0
val list1 = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
for(num in list1){
sum += 1
}
- 자바의 반복문과 파이썬의 반복문 느낌이 섞인 느낌의 구문이다.
- 인덱스가 필요할 때 indices 프로퍼티를 사용하면 된다.
- 인덱스와 값이 모두 필요할 때는 withIndex() 함수를 이용한다.
// indices 활용 사례
for (idx in list1.indices) {
sum += list1[idx]
}
// withIndex 활용 사례
for ((idx, value) in list1.withIndex()) {
println("position is $idx")
sum += value
}
- until, step, downTo 등으로 반복문의 조건을 다양하게 활용 가능하다.
for (i in 1..10) { } -> 1 ~ 10 : 10까지 포함
for (i in 1 until 10) { } -> 1 ~ 9 : 10은 포함하지 않음
for (i in 2..10 step 2) { } -> 2, 4, 6, 8, 10 : 2씩 증가
for (i in 10 downTo 2) { } -> 10, 8, 6, 4, 2 : 2씩 감소
2. 2. while 반복문
- 다른 언어에 비해 크게 다른 점은 없다.
2. 3. break와 continue문, 그리고 라벨
- break와 continue문은 다른 언어에 비해 크게 다른 점은 없다.
- 라벨은 특정 위치를 개발자 마음대로 이름을 정하고 continue나 break 문에서 이 이름으로 지정한 반복문을 벗어나게 할 수 있다.
here@ for (i in 1..3) {
for (j in 1..3) {
if (j > 1) break@here
println("i : $i, j : $j")
}
}
// 결과 : i : 1, j : 1
3. 연산자
다른 언어랑 겹치는게 많아서 새로웠던 것만 정리해봤다
- 전개 연산자(*)는 배열 데이터를 단순 나열할 때
- List 의 데이터를 전개 연산자로 바로 이용할 수는 없으며, toTypedArray() 등과 같은 함수를 활용하여 배열 데이터로 변경해서 이용해야 한다.
- ==는 값에 대한 비교이고, ===는 객체에 대한 비교다.
- 일반 객체를 비교할 때는 차이가 없지만 기초 타입의 데이터를 비교할 때는 차이가 있다.
- Nullable(?) 사용 여부에 따라서도 차이가 생긴다.
JAVA랑 이런게 다르다
- 코틀린에서는 비트 연산자가 없다.
- 코틀린에서 기초 데이터 타입은 객체이므로 굳이 연산자로 제공하지 않고 객체의 함수로 비트 연산을 제공한다.
- 자바의 삼항 연산자를 제공하지 않는다.
- if문 자체가 표현식으로 사용될 수 있기 때문에 굳이 삼항 연산자를 제공할 필요가 없다.
반응형
'Programming > 코틀린(Kotlin)' 카테고리의 다른 글
[코틀린] 08. 프로퍼티 (feat. 깡샘) (0) | 2021.04.11 |
---|---|
[코틀린] 07. 클래스 (feat. 깡샘) (0) | 2021.04.08 |
[코틀린] 05. 데이터 타입 (feat. 깡샘) (2) | 2021.04.04 |
[코틀린] 04. 변수와 함수 (feat. 깡샘) (0) | 2021.03.31 |
[코틀린] 01. 코틀린 간단 소개 (feat. 깡샘) (0) | 2021.03.29 |
댓글