제거됨: DelayedInit

제거됨: DelayedInit

DelayedInit 트레이트에 대한 특별 처리(special handling)는 더 이상 지원되지 않아요. 이 변화가 App 클래스에 어떤 영향을 주는지, 그리고 그 대안은 무엇인지 살펴볼게요.

출처: Scala 3 Reference

본문

DelayedInit 트레이트에 대한 특별 처리는 더 이상 지원되지 않아요.

그 결과 중 하나는, DelayedInit를 사용하던 App 클래스가 이제 부분적으로 망가졌다는 거예요. App은 여전히 main 프로그램을 간단하게 설정하는 방법으로 쓸 수 있어요. 예를 들어 볼게요.

object HelloWorld extends App {
  println("Hello, world!")
}

하지만 이제 코드는 object의 초기화자(initializer)에서 실행돼요. 어떤 JVM에서는 이것이 코드가 오직 인터프리트(interpret)된다는 뜻이에요. 그러니 벤치마킹에는 쓰지 않는 게 좋아요! 또한 명령줄 인자에 접근하고 싶다면 그 목적을 위해 명시적인 main 메서드를 써야 해요.

object Hello:
  def main(args: Array[String]) =
    println(s"Hello, ${args(0)}")

한편 Scala 3는 그런 "프로그램" object에 대한 편리한 대안으로 @main 메서드를 제공해요.