[Kotlin][언어공부-4] Any형

2020. 6. 10. 17:27Android/Kotlin

  • 코틀린에서 Any형은 동적타입을 지원한다.
  •  
  • 어떤 형을 대입시켜도 처리가능한 변수형
  • 최종 대입된 값으로 형이 결정된다.
  • null은 구분된다. null 허용은 ? 사용

코틀린의 변수 선언을 기억해보자.

var a = 1

var b = "String"

 

위와 같이 값을 대입시나 선언할 때 데이터 타입이 결정된다.

 

코틀린에서 모든 형을 선언 가능하게 해준다는 Any를 들었을때 들은 생각은 자바의 Object 클래스 였다.

https://opentutorials.org/module/516/6241

 

Object 클래스 - Java

상속 자바에서 상속이란 필수적이다. 여러분이 상속하건 하지 않았건 기본적인 상속을 하게 된다. package org.opentutorials.javatutorials.progenitor; class O {} 위의 코드는 아래와 코드가 같다. package org.opent

opentutorials.org

 

 

근데 그것보다는 파이썬,자바스크립트의 var 변수 선언과 비슷한것 같다.

어떤 데이터 타입도 올수 있고, 다른 데이터 타입이 들어올 경우 변수의 데이터 타입이 바뀌는것이 가능하다.

 

코틀린에서 처음 var를 배웠을때 자바스크립트 변수 선언과 비슷한데 형이 결정되어서 다른 데이터를 집어 넣을 수 없다는것이 차이점이라고 생각 했다.

 

그런데 이를 Any를 통해서 해결 가능하다

즉 자바스크립트에서 사용하는

var a = 1;

a = "test" ; 과 같이 쓸 수 있게 된다는 말이다.

 

또한 변수의 데이터 자료형이 무엇이 될지 모르기 때문에 데이터 자료형을 체크하는 방법도 존재한다.

 

자바로 따지면 instanceof 가 존재하는데 코틀린은 is로 사용한다.

 

------자바코드----------(instanceof 대신 is를 사용한다)

    if (anyVar instanceof Int) {
        System.out.println("숫자형입니다.")
    } else if (obj instanceof String) {
        System.out.println("문자열입니다.")
    } else if (obj instanceof String[]) {
        System.out.println("문자열 배열입니다.")
    }

 

 

위에서 확인한 것을 실제로 코드로 확인해보도록 하자

 

fun main(args: Array<String>) {
    var noAnyVar = 1;
     // noAnyVar = "테스트"; 얘는 당연히 오류다 이미 noAnyVar의 형이 Int 형으로 결정되었다.

    var anyVar : Any

    anyVar = 1 //anyVar : Int
    anyVar = "문자" //anyVar : String
    anyVar = 10.00f // anyVar : Float
    anyVar = "문자" // anyVar : String

    //위처럼 모든 데이터형을 대입 가능하고 최종 대입한 형으로 결정이 된다
    // anyVar = null -> 오류다 코틀린에서는 null 을 허용하고 싶으면 var anyVar : Any? 처럼 ? 를 선언해줘야한다.



    //자바의 instanceof 대신 is를 사용하여서 데이터 형을 체크 가능하다
    //!is 를 이용해 아닌것도 체크 가능
    if(anyVar !is Double) {
        println("문자열이 아닙니다.")
    }
    if(anyVar is String) {
        println("문자열입니다")
    }

    //둘다 된다
    println(anyVar == "문자")
    println(anyVar.equals("문자"))

}
반응형