#2 코틀린 기초 공부해보기
1. 조건문의 사용
1 2 3 4 5 6 7 8 | fun maxOf(a: Int, b: Int): Int { if (a > b) { return a } else { return b } } | cs |
if문은 뭐. 그냥 보셔도 아시겠죠?
: Int 이건 리턴형이 int라는 말입니다.
다음은 when 입니다. 자바에서 switch case 라고 생각하시면 좋을것같네요.
1 2 3 4 5 6 7 8 9 10 | fun describe(obj: Any): String = when (obj) { 1 -> "One" "Hello" -> "Greeting" is Long -> "Long" !is String -> "Not a string" else -> "Unknown" } | cs |
어때요? 좀더 명확하고 간결한 느낌이네요.
코틀린에서 하나 특이한게 있는데요. 바로 nullable에 대한 표현식입니다.
1 2 3 4 | fun parseInt(str: String): Int? { // ... } | cs |
Int 옆에 ? 는 리턴값이 null 일수도 있다는 표현식이 되겠습니다.
이걸 null-safety 라고 부릅니다... 아래와 같은 문법들은 NPE 를 예방하기 위한 코드라고 코틀린에서 설명하고 있습니다. (https://kotlinlang.org/docs/reference/null-safety.html)
1 2 3 4 | fun main(args: Array<String>) { var a: String = "abc" a = null // compilation error } | cs |
오... 변수 a는 null로 초기화 할수 없습니다.
1 2 3 4 5 6 | fun main(args: Array<String>) { var b: String? = "abc" b = null // ok print(b) } | cs |
이렇게 해줘야 null 대입이 가능하죠.
그렇다면 과연 어떤식으로 null 체크를 해야할까요?
1. 명시적으로 null을 체크한다.
1 | val l = if (b != null) b.length else -1 | cs |
2. call할때 안전하게 해라.
1 2 3 4 5 6 7 | val a = "Kotlin" val b: String? = null println(b?.length) println(a?.length) | cs |
이렇게 하면 콜 시점에서 safe 하게 처리가 가능합니다.
이런 문법은 체인식의 문장에서 유용하게 쓰입니다.
1 | bob?.department?.head?.name | cs |
null이 아닌경우의 name 을 불러오게 되겠죠.
2. 타입체크와 자동 캐스팅
1 2 3 4 5 6 7 8 9 | fun getStringLength(obj: Any): Int? { if (obj is String) { // `obj` is automatically cast to `String` in this branch return obj.length } // `obj` is still of type `Any` outside of the type-checked branch return null } | cs |
obj: Any 보이시죠? Any 는 자바에서 Object 같은 느낌으로 쓴다고 보면 될것 같습니다.
그리하여 if (obj is String) { 이렇게 타입을 골라내고 return obj.length 를 하게됩니다.
이때 obj는 자동으로 string 으로 캐스팅 되게 됩니다.(형검사후)
헷갈리는 부분이 많네요^^; 기초 이니 몇번이고 다시 보면서 공부 해야겠습니다.
https://kotlinlang.org/docs/reference/
'HELLO_WORLD > 안드로이드_Android' 카테고리의 다른 글
[지식공유] 함수형 프로그래밍? 그게 뭔데 (#일급객체, #일급시민, #고차함수, #람다) (0) | 2018.09.17 |
---|---|
[지식공유] #3 코틀린 기초 공부 해보기 (0) | 2018.09.16 |
[지식공유] #2 코틀린 기초 공부해보기 (0) | 2018.09.16 |
[지식공유] #1 코틀린 기초 같이 공부하기 (0) | 2018.09.16 |
[지식공유] 안드로이드 프래그먼트 라이프 사이클(생명주기) 알고 쓰기~!! (0) | 2018.09.10 |
[지식공유] 안드로이드 웹뷰 기초 ~ 알아보기 (0) | 2018.09.01 |
댓글0