본문 바로가기
Kotlin

Type

by oncerun 2022. 11. 27.
반응형

기본 타입

 

코틀린에서는 선언된 기본 값을 보고 타입을 추론한다.

val num1 = 3 // Int
val num2 = 3L // Long
val num3 = 3.0f // Float
val num4 = 3.0 // Double

 

자바에서는 기본 타입 간의 변환은 암시적으로 이루어진다. 하지만 코틀린에서 타입 변환은 명시적으로 이루어져야 한다. 

 

자바에서는 더 큰 타입으로 암시적인 변경이 가능했습니다.

int num = 1;
long num2 = num;

코틀린은 to"Type"()으로 명시적으로 변경해야 한다.

var num1 = 3 // Int
var num2 = 3L // Long
var num3 = 3.0f // Float
var num4 = 3.0 // Double

num2 = num1.toLong()

만약 nullable이라면 엘비스 연산자와 safe Call을 사용해서 적절한 처리가 필요하다.

val num1 : Int? = 3;
var num2 : Long = num1?.toLong() ?: 0L

 

타입 캐스팅

 

그럼 일반 타입은 어떻게 변환해야 할까? 

 

자바에서는 다음과 같이 진행한다.

if (obj instanceof Person) {
  Person person = (Person) obj;
  System.out.println(person.getAge());
}

 

코틀린에서는 다음과 같이 사용할 수 있다.

fun printAgeIfPerson(obj: Any) {
    if (obj is Person) {
        val person = obj as Person
        println(person.age)
    }
}

 

  •  자바의 instanceof 대신 코틀린에서는 is를 사용한다.
  • 자바는 타입 캐스팅을 (type)을 통해 진행하지만 코틀린에서는 as를 통해 진행한다.
    as Person은 생략할 수 있다.
if (obj is Person) {
    println(obj.age)
}

이를 스마트 캐스트라한다. 이는 컴파일러가 if문을 체크했기 때문이다.

 

instanceof의 역은 어떻게 할 수 있을까?

if (!(obj is Person)) {
}

도 가능하지만 다음과 같이도 사용이 가능하다.

if (obj !is Person) {
}
when (obj) {
    !is Person -> {
    }
}

 

아래는 인텔리제이가 제안한 코드 양식인데 아직은 익숙하지 않다.

 

널을 허용하는 경우는 다음과 같다.

fun printAgeIfPerson(obj: Any?) {
    val person = obj as? Person
    println(person?.age)
}

as? 를 통해 널일 경우 obj as? Person이 null값이 되고 println()에서는 null이 출력된다.

 

 

 

Kotlin의 3가지 특이한 타입

 

Any 

 

- 자바의 Object와 같은 역할로 모든 객체의 최상위 타입이다.

모든 기본 타입의 최상의 타입도 Any이다.

- Any 자체로는 null을 포함할 수 없기 때문에 Any?를 통해 표현해야 한다.

- equals, hashcode, toString이 존재한다.

 

 

Unit

 

- 자바의 void와 동일한 역할을 한다.

 

- Unit은 void와 다르게 그 자체로 타입 인자로 사용이 가능하다

 

- 함수형 프로그래밍에서 Unit은 단 하나의 인스턴스만 갖는 타입을 의미한다. 

 

Nothing

 

- 함수가 정상적으로 끝나지 않았다는 사실을 표현

 

- 무조건 예외를 반환하는 함수/ 무한 루프 함수등

 

String Interpolation & String indexing

 

${}를 사용하면 값이 들어간다. 마치 자바스크립트 ES6의 백틱처럼 동작하는 것 같다.

 

var person = Person("oncerun", 25)

val log = "name is ${person.name} and age is ${person.age}"

 

""" , 큰 따옴표 3개로 여러 줄에 걸친 문자열을 작성할 수 있다.

val str = """
wtf?
${person.age}
what?
""".trimIndent()

특정 문자열 가져오기.

var str = "ABCD"
var first = str[0]

 

 

 

 

반응형

'Kotlin' 카테고리의 다른 글

조건문  (0) 2022.11.30
연산자  (0) 2022.11.27
kotlin에서 null  (0) 2022.11.26
변수를 다루는 방법  (0) 2022.11.26
kotlin 간단 소개  (0) 2022.11.26

댓글