티스토리 뷰
728x90
Primitive types
- 코틀린은 원시 타입과 래퍼 타입을 구별하지 않는다. (Int, Boolean)
NonNullable
- 컴파일시 자동으로 원시타입 비교일경우 원시타입 사용
- 메서드를 호출하면 래퍼 클래스로 박싱하여 사용
Nullable
- null에는 원시 타입이 들어갈수 없으므로 기본으로 래퍼 클래스를 사용한다.
Nullable과 NonNullable
- 코틀린에서는 기본 NonNull이다.
- Nullable 변수를 선언하려면 ?를 붙여서 사용한다.
var nonNull: String = "hello"
nonNull = null // error
var nullable: String? = null
nullable = "hello"
Safe call operator - ?.
- Nullable 변수 사용시 NPE가 발생할 수 있으므로 null체크 후에 메서드를 사용할 수 있게 해준다.
- 만약 null인 변수에서 메서드 호출시 NPE를 발생시키지 않고 null만 반환한다.
Java
public class PersonJava {
public static void foo(String value) {
Integer length = null;
if (value != null) {
length = value.length();
}
System.out.println(length);
}
public static void main(String[] args) {
foo("jin"); // 3
foo(null); // null
}
}
Kotlin
fun foo(value: String?) {
//val length = value.length // error
val length = value?.length
println("$length")
}
foo("jin") // 3
foo(null) // null
Elvis operator - ?:
- null 대신 기본값을 반환해주는 연산자이며 생긴 모습이 엘비스의 머리와 비슷하여 엘비스 연산자라 부른다.
fun foo(value: String?) {
val length = (value ?: "") .length
println("$length")
}
foo("jin") // 3
foo(null) // 0
Safe casts - as?
- 형변환 하려는 타입이 맞으면 형변환하고 맞지 않거나 Null이면 null을 할당한다.
fun foo(o: Any?) {
val s: String? = o as? String
println(s?.length)
}
foo("jin") // 3
foo(null) // null
Not-null assertions - !!
- !!사용시 nonnull타입(val)으로 변경하거나 NPE에러가 발생한다.
fun foo(s: String?) {
val value = s!!
println(value.length) // ?.를 사용하지 않아도 됨
}
foo("jin") // 3
foo(null) // NPE!!
Any, Any?
- 코틀린에서는 원시 타입을 포함한 모든 타입의 조상이 Any이다.
- 원시 타입을 할당할 경우 해당 원시 타입에 부합하는 래퍼 클래스로 박싱된다.
val any: Any = 13 // auto boxing
- Any 는 null 을 가질 수 없다. null 까지 담으려면 Any? 를 써야 한다.
- Any는 자바의 Object와 대응되지만 toString(), equals(), hashCode()이외의 메서드는 존재하지 않는다. ex) wait(), notify()
Unit (void)
- 코틀린의 Unit타입은 자바의 void와 같다.
- 반환타입이 없이 선언한 함수는 암묵적으로 Unit타입을 반환하도록 되어있다.
- void와 달리 타입 파라미터(T)로 사용 가능하다.
Nothing
- exception을 던지거나 무한 loop와 같은 절대 return을 하지 않는경우 Nothing을 사용한다.
class PersonKotlin constructor(val name: String) {
}
fun fail(message: String): Nothing {
throw IllegalStateException(message)
}
fun main() {
val person: PersonKotlin? = PersonKotlin("jin")
// Nothing을 리턴타임으로 사용하지 않을경우 type mismatch 에러발생
// require: PersonKotlin, found: Unit
val p: PersonKotlin = person ?: fail("error")
println(p.name)
}
출처
https://aroundck.tistory.com/4860?category=639761 | [돼지왕 왕돼지 놀이터]
https://umbum.tistory.com/608
https://tourspace.tistory.com/115
728x90
'개발 언어 > 코틀린' 카테고리의 다른 글
코틀린(Kotlin) | 클래스 - 객체 생성 및 생성자 (0) | 2019.06.21 |
---|---|
코틀린(Kotlin) | 클래스 - 객체지향 (0) | 2019.06.21 |
코틀린(Kotlin) | 반복문 (0) | 2019.06.21 |
코틀린(Kotlin) | 범위 표현식 (0) | 2019.06.21 |
코틀린(Kotlin) | 분기문 (if, when) (0) | 2019.06.21 |
댓글