Android Development with Kotlin - Laying a Foundation |
이 정리글은 Kotlin in Action 책을 보고 실무에 Kotlin 을 사용하던 사람이 몰랐던 내용이나 remind 하고 싶은 내용을 위주로 정리한 글입니다.
제대로 내용을 파악하시려면 책을 구매해서 읽어보세욤~
-
Kotlin type inference 가 생기면서 가끔 무슨 type 으로 inference 가 되었는지 확인하고 싶을 수 있다.
"expression type” 기능을 사용하면 된다.
[View] - [Expression Type] 을 사용하면 된다. ( 혹은 이 녀석을 지정한 단축키 )
이는 generic type 에 대해서도 잘 작동한다.
-
var age: Short = 18 과 같이 적절한 기본 type inference 로 해결하지 못하는 경우도 있다.
-
Nothing type 은 empty type 이라고 불리며 instance 를 가질 수 없다.
Nothing? 은 모든 것의 subtype 이며 Nothing 은 Nothing? 의 subtype 이다.
-
Type! 과 같이 type 뒤에 ! 가 붙은 것은 platform type 이라고 부른다.
이는 Java 와 연동할 때 쓰이는데, Nullable 이 될수도 Nonnull 이 될 수도 있다.
-
nullable type 을 param 으로 받아서, null 인 경우 return 하고 싶다면 다음과 같이 하면 편하다.
fun verifyView(view: View?){ view ?: return // 혹은 view ?: throw RuntimeException(“view is empty”) view.isShown() // view 가 nonnull 로 smart cast 됨 }
-
primitive type 에 대해서 Int 와 같은 nonnull type 은 일반적으로 java 의 실제 primitive 와 매칭되고,
Int? 와 같은 nullable type 은 boxed primitive type 에 매칭된다.
위에서 Int nonnull type 이 “일반적으로” primitive 와 매칭된다고 한 이유는
Generic 에 사용되는 Int 의 경우는 boxed primitive type 으로 사용되기 때문이다.
IntArray 등과 같은 녀석을 사용한다면 primitive type 을 그대로 사용할 수 있다.
-
Kotlin 에서 smaller type 이 bigger type 으로 암시적 변환이 불가능하다.
bigger type 에서 smaller type 으로의 변환은 원래 그릇이 다르니 당연히 불가능하다.
단, 다음과 같은 계산식에서는 type inference 가 작동한다.
val a:Int = 1 val b = a + 1 // b 는 Int 로 type inference val c = a + 1L // c 는 Long 으로 type inference
-
array 초기화는 다음과 같은 여러 방법이 있다.
val array = arrayOf(1,2,3) // Array<Int> val array = intArrayOf(1,2,3) // IntArray val array = arrayOfNulls(3) // [null, null, null] val array = Array(5) { it * 2 } // [0, 2, 4, 6, 8], it 은 index 가 들어오며 return 값이 해당 index 의 값이 된다.
-
string 은 기본 Java 의 string 보다 많은 것이 향상되었다.
val str = “abcd” str[1] // b str.reversed() // dcba str.takeLast(2) // cd “hello@test.com”.substringBefore(“@“) // hello
-
Range 는 주로 for 문 등에 쓰인다.
val intRange = 1..4 // IntRange, 1과 4 모두 포함 val charRange = ‘b’..’g’ // CharRange, ‘b’ 와 ‘g’ 포함 for( i in 1..5 ) print(i)
조건 문에서도 쓰인다.
if ( aChar in charRange ) doSomething()
-
Range 는 기본적으로 incremental 이다.
for( i in 5..1 ) print(i) // print nothing
5부터 1로 print 하고 싶다면 다음과 같이 써야 한다.
for( i in 5 downTo 1 ) print(i)
-
Range 는 기본 한 step 씩 increase 되는데 여러 step 을 뛰고 싶다면..
for ( i in 3..6 step 2 ) print(i) // 3, 5 for ( i in 9 downTo 1 step 3 ) print(i) // 9, 6, 3
-
Expression 은 value 를 만들어 내는 구문이다.
Statement 는 class, interface, variable, function 정의, loop login 등과 같이 value 생산하지 않는 구문이다.
Java 에서는 control statement 를 statement 로 보지만, Kotlin 은 expression 으로 본다.
-
when 이 expression 으로 사용될 때는 else 구문은 필수이다.
-
Kotlin 에서는 string 도 extension 으로 iterable 로 만들었다.
-
index 가 필요한 Array iterate 는 다음과 같이 잘 쓰인다.
for ((index, value) in array.withIndex()){ ... }
-
Kotlin 의 do while 은 Java 와는 달리 do while 안에 있는 variable 을 사용할 수 있다. ( 이얏호! )
-
다음과 같이 outer loop 를 break 해서 나갈 수 있다.
outer@ for(value in 1..6){ for(char in ‘A’..’B’){ if(char == ‘B’) break@outer ... } }
outer 는 label 이름으로 바뀔 수 있다.
-
Compile time 에 알아야 하는 constant 들은 const 로 지정해주면 된다.
compile time 에 알아야 하는 케이스의 대표적인 케이스는 annotation 에 사용되는 constant 들.
const 사용 limitation 이 있는데
1. primitive type 이나 string type 만 정의할 수 있고
2. top level 이나 object 의 member 로 정의되어야 한다는 것.
3. custom getter 를 가질 수 없다는 것.
'프로그래밍 놀이터 > Kotlin, Coroutine' 카테고리의 다른 글
[도서 정리] Android Development with Kotlin - Classes and Objects (0) | 2018.12.13 |
---|---|
[도서 정리] Android Development with Kotlin - Playing with Functions (0) | 2018.12.12 |
[도서 정리] Android Development with Kotlin - Say hello to Kotlin (0) | 2018.12.10 |
[Kotlin] Coroutine vs. thread (Light-weight thread 가 뭔 말이야?) (0) | 2018.11.26 |
[Kotlin] Coroutines tutorial - async code 쉽게 짜기 (17) | 2018.11.25 |
댓글