Scala에서 변수 유형 찾기

Suraj P 2023년6월21일
  1. Scala에서 패턴 일치 사용
  2. Scala에서 getClass 메소드 사용
  3. Scala에서 매니페스트 사용
Scala에서 변수 유형 찾기

이 기사에서는 Scala에서 변수 유형을 찾는 방법을 설명합니다. 런타임에 Scala에서 변수 유형을 가져오는 다양한 방법을 살펴보겠습니다.

Scala에서 패턴 일치 사용

변수 유형은 Scala에 항상 존재하며 매개변수로 전달할 수 있습니다.

예:

def fun[T](data : T) = data

val x = 10
fun(x)

위의 예에서 Tx의 유형인 int임을 알 수 있습니다. 그러나 런타임에 int, string, double 등과 같은 변수 유형을 가져오려면 위의 코드를 수정할 수 있습니다.

예제 코드:

object MyClass {
    def fun[T](data:T)= data match{
        case _:Int => "Int"
        case _:Double => "Double"
        case _:String => "String"
        case _ => "Undefined"

    }
    def main(args: Array[String]) {

     val x = 5.6
     val y = "hero"
     val z = 234

     println(fun(x))
     println(fun(y))
     println(fun(z))


    }
}

출력:

Double
String
Int

Scala에서 getClass 메소드 사용

Scala의 getClass 메소드는 Scala 객체의 클래스를 가져오는 데 사용됩니다. 이 방법을 사용하여 변수의 유형을 얻을 수 있습니다.

예제 코드 1:

object MyClass {

    def main(args: Array[String])
    {
    val x = 123;

    System.out.println(x.getClass)

    val y = "hero"

    System.out.println(y.getClass)

    val z = 34.56

    System.out.println(z.getClass)

    }
}

출력:

int
class java.lang.String
double

Scala 문자열은 java.lang.String 주변의 래퍼에 불과하기 때문에 위의 출력은 문자열에 대해 java.lang.String을 인쇄함을 보여줍니다.

따라서 java.lang.String 대신 보다 의미 있는 출력이 포함된 String을 원할 경우 getSimpleNamegetClass 메서드를 사용할 수 있습니다.

예제 코드 2:

object MyClass {

    def main(args: Array[String])
    {

    val y = "hero"

    System.out.println(y.getClass.getSimpleName)


    }
}

출력:

String

Scala에서 매니페스트 사용

‘Manifest’는 Scala의 기능입니다. 런타임 컴파일러에서 이것을 사용하면 generic 유형 정보를 얻을 수 있습니다. Scala에서는 def fun[T](data:T)= data와 같은 유형 매개변수를 사용하여 인스턴스를 만들 수 있습니다. 여기서 T는 유형 매개변수입니다.

따라서 Manifest[T] 유형의 개체를 생성하여 T 유형에 대한 완전한 정보를 얻을 수 있습니다.

예제 코드:

object MyClass {

def myFunc[T: Manifest](t: T): Manifest[T] = manifest[T]

    def main(args: Array[String])
    {

    val y =123

    println(myFunc(y))


    }
}

출력:

Int

매니페스트를 사용하는 주요 이점 중 하나는 변수가 목록 또는 시퀀스인 경우와 같이 기본이 아닌 유형의 유형을 찾는 것입니다.

예제 코드 2:

object MyClass {

def myFunc[T: Manifest](t: T): Manifest[T] = manifest[T]

    def main(args: Array[String])
    {

    val y = List(1,2,3,4)

    val z = Seq("apple","mango")

    println(myFunc(y))

    println(myFunc(z))


    }
}

출력:

scala.collection.immutable.List[Int]
scala.collection.immutable.Seq[java.lang.String]
작가: Suraj P
Suraj P avatar Suraj P avatar

A technophile and a Big Data developer by passion. Loves developing advance C++ and Java applications in free time works as SME at Chegg where I help students with there doubts and assignments in the field of Computer Science.

LinkedIn GitHub