1. val과 var의 차이점
- val(value) : 한번만 값을 선언할 수 있으며, 그 이후에 변경할 수 없다.
- var(varible) : 값을 선언한 후 변경할 수 있다.
클래스 프로퍼티로 val, var 을 정의하면, 코틀린은 아래와 같이 생성한다.
- val
- private field
- getter
- var
- private field
- getter
- setter
class Person(
val name: String, // == private String name + getName()
var age: Int // == private int age + getAge() + setAge()
) {
}
fun main() {
val person = Person("홍길동", 33)
println(person.name)
println(person.age)
person.name = "둘리" // 컴파일에러가 발생한다. (val 는 setter 가 제공되지 않는다.)
person.age = 34
}
2. 문자열 템플릿
- 변수 이름 앞에 $ 혹은 ${변수} 를 통해 문자열을 간결하게 표현할 수 있다.
fun main() {
val coffee = "Americano"
val price = 3000
val order = "주문한 음료는 ${coffee} 이며, 가격은 $price 입니다."
assertEquals(order, "주문한 음료는 Americano 이며, 가격은 3000 입니다.")
}
3. 코틀린에서의 if는 식(expression) 이며, 값을 만들어낸다.
- 자바와는 다르게 if문으로 값을 만들어낸다.
- 코틀린에서는 3항연산자가 없다.
fun main() {
val a = 1
val b = if(a == 1) 2 else 3
assertEquals(2, b)
}
4. 코틀린에서의 when 은 자바의 switch-case 와 비슷하나, 더 강력하다.
- when의 파라미터로 객체를 허용한다.
- 파라미터 없이 사용할 수도 있다.
5. 타입을 검사한 뒤에는, 타입캐스팅이 필요없다.
- is 를 이용하여 타입을 검사한다.
- 이를 기반으로 코틀린은 스마트캐스트를 통해, 타입캐스팅을 지원한다.
// 문자열인 경우에는 길이를, 숫자의 경우에는 그 숫자를 반환한다.
fun smartCast(any: Any): Int {
if(any is String) {
// String 으로 따로 타입캐스팅 없이 길이를 반환할 수 있다.
return any.length
} else if(any is Int) {
return any
} else {
throw IllegalArgumentException("잘못된 파라미터")
}
}
6. [for .. in] 루프
- Collection 을 Iteration 할 때 사용하면 유용하다.
// 간단하게 인덱스 번호화, 인덱스에 해당하는 원소를 루프돌 수 있다.
fun main() {
val list = arrayListOf<Int>(1, 22, 333, 4444, 55555)
for((index, element) in list.withIndex()) {
println("index : $index, element : $element")
}
}
7. java.lang.Comparable 인터페이스를 구현했다면, in 절을 통해 검사할 수 있다.
// 알파벳 순으로, J < K < S 이므로, true 가 반환된다.
// String 은 기본적으로 Comparable 을 구현한다.
println("Kotlin" in "Java".."Scala")
8. 코틀린에서의 예외처리
- try 구문을 식(expression) 으로 사용할 수 있다.
- throws 절이 없다.
fun main() {
assertEquals(-1, tryEx(null))
assertEquals(123, tryEx("123"))
}
// try 구문을 이용하여, num 에 값을 할당하였다.
// throws NumberFormatException 은 코틀린에서는 존재하지 않는다.
fun tryEx(any: String?): Int {
val num = try {
Integer.parseInt(any)
} catch (e : NumberFormatException) {
-1
}
return num
}
'책 정리 > Kotlin IN ACTION' 카테고리의 다른 글
4. 클래스, 객체 인터페이스 (0) | 2021.09.10 |
---|---|
3. 함수 정의와 호출 (0) | 2021.08.29 |
1. 코틀린이란 무엇이며, 왜 필요한가? (0) | 2021.08.28 |