[TIL/Kotlin] 코틀린 중급문법_스마트 캐스팅, is 연산자, as 연산자와 다운캐스팅

2023. 5. 14. 19:46·TIL/Kotlin
728x90
반응형

1. 스마트 캐스팅

스마트 캐스팅이란? 특정 조건을 만족하는 경우, 컴파일러는 변수의 타입을 다른 타입으로 자동 캐스팅한다.

 

fun main() {
    val number: Int?= null
    val number2 = 1225

    checkNull(number) // null이 들어왔습니다.
    checkNull(number2) // 1225
}

fun checkNull(any: Any?) {
    if(any == null) {
        println("null이 들어왔습니다")
        return
    }

    // any가 null 값이 아니라고 완벽히 추론이 가능하므로,
    // any?.toString()이 아닌 any.toString()으로 호출이 가능
    println(any.toString())
}

2. is 연산자

is 연산자로 참조 변수가 실제로 가리키고 있는 객체의 타입을 알아낼 수 있다.

자바의 instanceof에 해당하는 것!

 

// Person 클래스를 상속하는 Professor 클래스 선언
class Professor(name: String, age: Int): Person(name, age)

fun main() {
    val person: Person = Student("토니스타크", 33, 20171225)
    print("${person is Person} ")
    print("${person is Student} ")
    print("${person is Professor} ")

    val person2: Person = Professor("짱구", 5)
    print("${person2 is Person} ")
    print("${person2 is Student} ")
    print("${person2 is Professor}")
}
[결과]
true true false true false true

 

is 연산자는 when에서 다음과 같이 사용할 수 있다.

val person3: Person = Student("철수", 5, 121212)

when(person3) {
  is Person -> {println("Person 타입의 ${person3.name} 입니다.")}
  is Student -> {println("Student 타입의 ${person3.name} 입니다.")}
  is Professor -> {println("Professor 타입의 ${person3.name} 입니다.")}
}
[결과]
Person 타입의 철수 입니다.

3. as 연산자와 다운캐스팅

다운캐스팅이란? 업캐스팅과는 반대로 슈퍼클래스 타입을 서브클래스 타입으로 받는 것을 뜻한다.

 

다운캐스팅을 위해서는 as연산자를 사용한다.

왼쪽 피연산자(참조 변수)의 타입을 오른쪽 피연산자(타입)으로 캐스팅

fun main() {
    val person: Person = Student("John", 32, 20171218)
    val person2: Person = Person("Jack", 29)
    val person4: Person = Person("test", 29)

    var person5: Person?= person4 as? Student
    println(person5)

    // person 참조 변수가 가리키고 있는 객체는 Student 타입이므로 캐스팅 OK
    // 즉, Person -> Student로 다운캐스팅
    var person3: Student = person as Student
    println(person3)

    // person2 참조 변수가 가리키고 있는 객체는 Person 타입이므로 예외가 발생
    // Person -> Student로 캐스팅 X
    person3 = person2 as Student
    println(person3)

}

 

캐스팅에 실패했을 때 예외가 발생하는 것을 막고싶다면 as? 연산자를 사용하면 된다.

as? 연산자는 캐스팅에 실패하면 null을 돌려준다.

ex) person2 as? Student 표현식의 타입은 Studnet?이고, 캐스팅에 실패히면 null 성공하면 Student 타입으로 변환된 객체를 반환

 

728x90
반응형

'TIL > Kotlin' 카테고리의 다른 글

[TIL/Kotlin] 코틀린 고급문법_객체 선언과 동반자 객체  (0) 2023.05.17
[TIL/Kotlin] 코틀린 중급문법_접근지정자, 접근지정자 오버라이딩, 확장 함수, 확장 프로퍼티  (0) 2023.05.14
[TIL/Kotlin] 코틀린 중급문법_Nothing타입, Nullable, ?. 연산자, !! 연산자, ?: 연산자  (0) 2023.05.14
[TIL/Kotlin] 코틀린 중급문법_예외 처리, 예외 던지기  (0) 2023.05.14
[TIL/Kotiln] 코틀린 중급문법_생성자와 초기화(init)블록, 보조생성자, Getter/Setter, 연산자 오버로딩, 번호붙은접근연산자, 호출연산자, in연산자, 멤버함수의 중위표기법, 상속, 업캐스팅, 오버라..  (0) 2023.05.06
'TIL/Kotlin' 카테고리의 다른 글
  • [TIL/Kotlin] 코틀린 고급문법_객체 선언과 동반자 객체
  • [TIL/Kotlin] 코틀린 중급문법_접근지정자, 접근지정자 오버라이딩, 확장 함수, 확장 프로퍼티
  • [TIL/Kotlin] 코틀린 중급문법_Nothing타입, Nullable, ?. 연산자, !! 연산자, ?: 연산자
  • [TIL/Kotlin] 코틀린 중급문법_예외 처리, 예외 던지기
야리니
야리니
오늘보다 내일 더 성장하는 개발자가 되기 위한 야리니 블로그입니다 :)
    반응형
    250x250
  • 야리니
    야리니의 step by step
    야리니
  • 링크

    • GitHub
    • Linkedin
  • 전체
    오늘
    어제
    • 분류 전체보기 (478)
      • TIL (379)
        • Java (97)
        • Kotlin (28)
        • JPA (16)
        • Spring (37)
        • Oracle (22)
        • JDBC (7)
        • Web(HTML, CSS, JS, jQuery) (90)
        • View Template (31)
        • AWS (7)
        • HTTP (7)
        • CS (5)
        • Linux, Unix (2)
        • Python (20)
      • Trouble Shooting(Error) (37)
      • Algorithm (15)
      • Git,GitHub (8)
      • Diary (24)
      • 독서 (9)
      • Etc (6)
        • Mac (1)
        • 학원준비과정 (2)
  • 블로그 메뉴

    • 방명록
    • 태그
  • 공지사항

    • 안녕하세요 :)
  • 인기 글

  • 태그

    oracle
    CSS
    국비지원학원
    HTML
    java기초
    쌍용교육센터
    java
    백엔드 개발자
    코틀린
    Kotlin
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
야리니
[TIL/Kotlin] 코틀린 중급문법_스마트 캐스팅, is 연산자, as 연산자와 다운캐스팅
상단으로

티스토리툴바