Scala에서 변수 유형 찾기
이 기사에서는 Scala에서 변수 유형을 찾는 방법을 설명합니다. 런타임에 Scala에서 변수 유형을 가져오는 다양한 방법을 살펴보겠습니다.
Scala에서 패턴 일치 사용
변수 유형은 Scala에 항상 존재하며 매개변수로 전달할 수 있습니다.
예:
def fun[T](data : T) = data
val x = 10
fun(x)
위의 예에서 T
는 x
의 유형인 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
을 원할 경우 getSimpleName
및 getClass
메서드를 사용할 수 있습니다.
예제 코드 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]