Scala에서는 기본적으로 다음 3가지를 자동적으로 임포트 합니다.
- java.lang
- scala
- scala.Predef
// in Java
import java.util.*;
// in Scala
import java.util._
같은 팩키지의 여러 클래스를 임포트 할때는 하나로 묶을 수 있습니다.
// in Java
import java.util.Date;
import java.util.Collection;
import java.util.List;
// in Scala
import java.util.{Date, Collection, List}
임포트 하면서 다른 이름으로 변경할 수도 있습니다.
// in Scala
import java.util.{Collection => Coll}
// Coll을 사용합니다.
또한 Static 메서드와 변수에 접근하기 위해서 사용하는 자바5의 import static은 import문으로 동일하게 사용합니다.
// A.scala
package Test
class A {
def methodA() {
println("in methodA")
}
}
// B.scala
package Demo
import Test.A
object B extends App {
val a = new A
a.methodA()
}
$ scalac A.scala B.scala
$ scala B
in methodA
일반적인 import의 사용입니다. B 오브젝트에서 A 클래스를 임포트해서 객체를 생성하고 A 클래스의 메서드를 실행합니다. 컴파일하고 실행하면 정상적으로 출력이 됩니다.
// A.scala
class A {
def methodA() {
println("in methodA")
}
}
object A {
def methodB() {
println("it's static method")
}
}
// B.scala
import A.methodB
object B extends App {
mehtodB()
}
$ scalac A.scala B.scala
$ scala B
it's static method
A 클래스의 companion object를 생성해서 static 메서드 methodB를 정의하였습니다. 그리고 B.scala에서 이 static 메서드를 static import하고 호출하였습니다. 정상적으로 static 메서드라 실행되었습니다.
// C.scala
import A.methodB
object C extends App {
def doSomething(a: A) {
import a.methodA
methodA()
methodB()
}
doSomething(new A)
}
$ scalac A.scala B.scala
$ scala B
in methodA
it's static method
여기서 더 나아가 Scala는 static 메서드가 아닌 경우에도 static import를 할 수 있는데 위 코드가 그 예제입니다. C 오브젝트를 정의하여 앞서 정의한 A 클래스를 사용하였습니다. static 메서드인 methodB의 사용은 동일한데 보는 것처럼 doSomething에서 A 객체를 파라미터로 받아서 그 안에서 이 객체를 static import하면 그 다음부터는 리시버없이 static 메서드처럼 메서드를 호출할 수 있습니다.
추가적으로 REPL에서 현재 import된 클래스를 확인하고 싶으면 :import를 사용합니다.
Comments