반응형
Type을 다루는 방법
기본타입
val number1 = 3
// 명시적으로 타입을 변환해야 한다.
val number2: Long = number1.toLong()
// nullable 의 경우에는 적절한 처리가 필요하다.
val number1: Int? = 3
val number2: Long = number1?.toLong() ?: 0L
- 코틀린에서는 선언된 기본값을 보고 타입을 추론한다.
- 3: Int, 3L: Long, 3.0: Double, 3.0f: Float
- Java에서 기본 타입간의 변환은 암시적으로 이루어지지만 (int <-> Integer)
- Kotlin에서는 기본 타입간의 변환은 명시적으로 이루어져야 한다.
- 그렇기 때문에
toLong()
과 같이 명시적 형변환이 필요하다.
- 그렇기 때문에
타입 캐스팅
fun printAgeIfPerson(obj: Any) {
if (obj is Person) {
// 스마트 캐스트
// 이미 Person 타입인지 확인했기 때문에 바로 name 사용 가능
println(obj.name)
}
}
fun printAgeIfPersonNullable(obj: Any?) {
val person = obj as? Person
println(person?.name)
}
is
: Java의Instance of
와 같은 역할을 한다.!is
:is
의not
as
:object as Person
의 형태로 형변환을 한다.as?
:object
가nullable
일 경우object as? Person
의 형태로Person
을 형변환하며,null
일 경우null
으로 입력된다.
Kotlin의 3가지 특이한 타입
- Any
- Java의 Object 역할을 한다. (모든 객체의 최상위 타입)
- 모든 Primitive Type의 최상위 타입도 Any이다.
- Any 자체로는 null을 포함할 수 없기 때문에 null을 포함하고 싶다면 Any?로 표현한다.
- Any는 equals, hashCode, toString이 존재한다.
- Unit
- Java의 void와 동일한 역할을 한다.
- void와 다르게 Unit은 그 자체로 타입 인자로 사용 가능하다.
- 함수형 프로그래밍에서 Unit은 단 하나의 인스턴스만 갖는 타입을 의미한다.
- 즉, 코틀린의 Unit은 실제 존재하는 타입이라는 것을 표현한다.
- Nothing
- Nothing은 함수가 정상적으로 끝나지 않았다는 사실을 표현하는 역할이다.
- 무조건 예외를 반환하는 함수, 무한 루프 함수 등에 사용한다.
String Interpolation, String indexing
val person = Person("heekng")
val name = person.name
println("이름: ${person.name}")
println("이름: $name")
// 여러 줄의 문자열
val str = """
ABC
EFG
${name}
""".trimIndent()
println(str)
// 특정 문자 가져오기
val str2 = "ABC"
println(str2[0])
println(str2[2])
${변수}
형태로 문자열 중간에 변수를 넣을 수 있다.- 또는 바로 사용할 수 있는 변수라면
$변수
형태로도 사용할 수 있다. - 변수 이름만 사용하더라도
${변수}
형태로 사용하는 것이 가독성, 일괄 변환, 정규식 활용 측면에서 더 좋다.
- 또는 바로 사용할 수 있는 변수라면
- 여러 줄의 문자열을 작성해야 할 때
"""
를 사용할 수 있다. - 문자열에서 문자를 가져올 때, Java의 배열처럼
[]
를 사용한다.
반응형
'Java & Kotlin > Kotlin' 카테고리의 다른 글
[Kotlin] 예외를 다루는 방법 (0) | 2022.07.06 |
---|---|
[Kotlin] 반복문을 다루는 방법 (0) | 2022.07.06 |
[Kotlin] 조건문을 다루는 방법 (0) | 2022.07.06 |
[Kotlin] 연산자를 다루는 방법 (0) | 2022.07.05 |
[Kotlin] null을 다루는 방법 (0) | 2022.07.05 |
[Kotlin] 코틀린에서의 변수 (0) | 2022.07.05 |