Primitive Type 과 Reference Type 을 구분하지 않아도 된다.
Null 이 들어갈 수 있는 변수는 타입 뒤에 ?를 붙여주어야 한다.
- 아예 다른 타입으로 간주된다.
객체를 인스턴스화 할 때 new 를 붙이지 않아야 한다.
코틀린에서 null 을 다루는 방법
1. 코틀린에서 null 체크
2. Safe Call 과 Elvis 연산자
val str: String? = "ABC" (nullable 타입)
str?.length // 가능!! => null 아니면 실행되고 null 이면 null 반환한다.
str?.length ?: 0 null 이면 0 반환한다.
3. 널 아님 단언!!
nullable 타입이지만, 아무리 생각해도 null 이 될 수 없는 경우
str!!.startsWith("A")
혹시나 null이 들어오면 NPE 가 나오기 때문에 확실한 경우에만 널 아님 단언!! 을 사용해야 합니다.
4. 플랫폼 타입
@Nullable
@NotNull
null 관련 에노테이션 정보가 없다면 플랫폼 타입이라고 한다. RunTimeException 이 난다.
코틀린에서 Type 을 다루는 방법
코틀린에서는 선언된 기본값을 보고 타입을 추론하다.
val 3.0F
val 3.0
자바는 타입이 더 큰 타입(byte)으로 암시적으로 변경된다.
코틀린은 명시적으로 형변환을 해야한다.
toLong()
toDouble()
toString()
엘비스 연산자를 활용해서, 최종 결과물이 Long 타입이 될 수 있도록 처리
val number2: Long = number1?.toLong() ?: 0L
fun printAgeIfPerson(obj: Any) {
if (obj is Person) {
// 스마트 캐스트
// val person = obj as Person
// println(person)
println(obj)
}
}
if (obj !is Person) { }
val person = obj as? Person
=> obj 변수가 null 이면 null 로 받는다. (nullable type)
println(person?.age)
Any 와 Unit
Any
- 자바의 Object 역할. (모든 객체의 최상위 타입)
- 모든 primitive Type의 최상의 타입도 Any이다.
- Any 자체로는 null 을 포함할 수 없어 null 을 포함하고 싶다면, Any?로 표현.
- Any 에 equals / hashCode / toString 존재.
Unit
Unit 은 Java의 void 와 동일한 역할.
- void 와 다르게 Unit 은 그 자체로 타입 인자로 사용 가능하다.
- 함수형 프로그래밍에서 Unit 은 단 하나의 인스턴스만 갖는 타입을 의미. 즉, 코틀린의 Unit 은 실제 존재하는 타입이라는 것을 표현.
Nothing 은 함수가 정상적으로 끝나지 않았다는 사실을 표현하는 역할
무조건 예외를 반환하는 함수 / 무한루프 함수 등
String interpolation / String indexing
var value = "이름: ${name}"
val str = """
fsdfs
""".trimIndent()
코틀린에서는 문자열을 배열로 가져올 수 있다.
downTo(감소), step(등차)
str[0], str[2]
in 범위 연산자(= between)
if (score in 0..100) {}
if (score !in 0..100) {
throw IllegalArgumentException("score의 범위는 0부터 100입니다.")
}
switch 와 when
코틀린에서는 자바와 달리 switch 문이 없으며, 대신 when 문이 있습니다.
when 의 이용한 예시 코드는 다음과 같습니다.
return when (score) {
in 90..99 -> "A"
in 80..89 -> "B"
in 70..79 -> "C"
else -> "D"
}
return when (obj) {
is String -> obj.startsWith("A")
else -> false
}
return when (obj) {
1, 0, -1 -> println("어디서 많이 본 숫자입니다.")
else -> println("1, 0, -1이 아닙니다.")
}
fun judgeNumber2(number: Int) {
when {
number == 0 -> println("주어진 숫자는 0입니다.")
number % 2 == 0 -> println("주어진 숫자는 짝수입니다.")
else -> println("주어진 숫자는 홀수입니다.")
}
}
'Kotlin' 카테고리의 다른 글
코틀린 - Object 함수(Companion) (0) | 2023.05.01 |
---|---|
코틀린 - 접근 제어자 (0) | 2023.05.01 |
코틀린 - 클래스 생성자와 상속 (0) | 2023.05.01 |
Kotlin - 기본 문법1 (0) | 2023.03.27 |
Kotlin - 변수 선언 (0) | 2023.03.01 |
댓글