1. String literal
val ben = """
사랑 다 비슷해 그래 다 비슷해
너는 다르길 바랬는데
넌 뭐가 미안해 왜 맨날 미안해
헤어지는 날조차 너는 이유를 몰라
이젠 180도 달라진
너의 표정 그 말투
너무 따뜻했던 눈빛 네 향기까지도
정말 너무나도 달라진
우리 사랑 또 추억
아직 그대로인데 난
이젠 180도 변해버린 지금 너와 나
"""
print(ben)
2. in 연산자
val num = arrayOf(100, 200, 300, 400)
pirntln("${200 in num}") // true
pirntln("${num.contains(200)}") // true
pirntln("${200 !in num}") // false
pirntln("${!num.contains(200)}") // false
3. 범위 연산자
val lowerAlpha = 'a'..'z'
val numberRange = 1..100
val isLower = 'd' in lowerAlpha
val isNumber = 101 in numberRange
for(i in 1..7) print(i) // 1234567
for(i in 'a'..'g') print(i) // abcdefgvar
start = LocalDate.now()
val end = start..start.plusDays(15)
println(start.plusWeeks(1) in end) // true
println(end) // 2017-06-20..2017-07-05
4. Invoke 연산자
함수를 호출할 때는 이름에 괄호를 붙이는 표기 방법을 사용한다. 코틀린에서는 클래스의 인스턴스도 이런 방법으로 호출할 수 있다. 이때는 괄호(()) 연산자를 오버로딩한 invoke() 함수에 operator 키워드를 지정하여 해당 클래스에 정의하면 된다
class InvokeOperator(val makeMessage1: String) {
operator fun invoke(makeMessage2: String) {
println("$makeMessage1 $makeMessage2!")
}
}
// 사용
val instance1 = InvokeOperator("Learn")
instance1("Kotlin!")
5. 타입 확인 연산자(is, !is)
코틀린에서는 객체의 타입을 확인할 때 is 연산자를 사용한다. (JAVA의 instanceof) !is는 타입이 아닌지 검사
val b: String = "Learn kotlin!"
if (b is String) {
println("String type")
}
6. when 표현식
when은 자바의 switch-case와 유사하지만 더 간결하고 기능도 많다. 검사할 조건이 많을 때는 if-else if 대신 when을 사용하면 편리하다. 또한 Enum 타입의 경우 null 상태도 체크하도록 warning을 띄워준다.
...
val start = 0
val end = 100
when (score) {
in start..(end / 4) -> println("Excellent")
50 -> println("Average")
in start..end -> println("In range")
else -> println("Out of range")
}
enum class MyEnum{
State0
}
...
var myEnum:MyEnum? = MyEnum.State0
when(myEnum) {
State0 -> print("State0")
null -> print("null!")
}
// 혹은 아래처럼
when(myEnum) {
State0 -> print("State0")
else -> print("null!")
}
7. Unit
Unit(Kotlin) == Java(Void)
fun celsiusToFah(celsius: Int): Unit
{
println(celsius * 1.8 + 32)
}
8. Nothing
Nothing을 반환하는 함수를 보면 이 함수가 예외를 생성하도록 설계된 함수임을 알 수 있다
fun fail(): Nothing = throw Error()
8. Typealias
C/C++의 typedef처럼 사용할 수 있다
// 타입 별칭 선언
typealias PeopleList = List
fun sendMessage(people: PeopleList) {
people.forEach {...}
}
// 함수형 타입의 타입 별칭
typealias PersonFilter = (Person) -> Boolean
fun sendMessage(people: List, filterFunc: PersonFilter) {
people.filter(filterFunc).forEach {...}
}
'소프트웨어 > Kotlin' 카테고리의 다른 글
Kotlin let을 이용한 Null check 구문 (0) | 2019.07.01 |
---|---|
[Kotlin/Swing] 화면 잠금 방지 App 1.0 (0) | 2019.06.24 |