Scala3 main method 작성 법

View: 288 0 0
작성자: 달빛제이크
카테고리: Scala Language
발행: 2023-12-01 수정 2024-06-19

안녕하세요. 달빛제이크 입니다.

Scala 3 기준으로 main method에 대해 알아 보겠습니다.

1. main method 기본형

가장 기본이 되는 main method 형식은 다음과 같습니다.
이 기본형은 Scala2와 Scala3 모두 유효한 형식입니다.

object Hello:
  def main(args: Array[String]): Unit = println("Hello, World!!")

2. main Annotation 활용

다음으로 main annotation을 활용한 형식입니다.

단일 함수

@main
def hello() = println("Hello, World!!")

main annotation을 활용하면 method 이름과 동일한 class가 생성되고 그 안에 main method가 만들어집니다.
따라서 기본형에서 처럼 object 안에 main method를 만들 필요가 없이 독립적으로 작성할 수 있습니다.

Method

물론 object 안에 main annotation과 함께 main method를 작성할 수도 있습니다.

object Hello:
  @main
  def hello2(): Unit = println("Hello, World!!")

이와 같이 작성을 하면 Hello라는 object*와 hello2라는 class가 만들어지고 main method는 hello2 class 안에 생성됩니다.
따라서 중복이 되는 구조로 작성이 되기 때문에 굳이 main method를 object 안에 넣을 필요가 없습니다.
또한 object 이름과 main method 이름이 같을 경우 동일한 이름의 class가 중복해서 만들어지기 때문에 에러가 발생됩니다.
*Hello라는 object가 만들어진다고 했는데 실제로는 java bytecode로 변환되면서 Hello class가 생성이 되고 내부는 static method를 가지게 됩니다.

3. Scala2 trait App

참고로 Scala2에서는 다음과 같이 작성을 했는데 deprecated 될 예정입니다.

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

trait App 내부에 main method가 정의되어 있어서 App을 상속받으면서 main method를 Skip하는 형식입니다.
command line arguments는 args: Array[String]로 받게됩니다.

4. Scala Script

마지막으로, main method는 scala script (.sc 파일)에서는 사용하지 않습니다.
몇가지 실험을 해보았는데 기본형으로 main method를 정의해보니 컴파일 및 실행은 되지만 정상적인 출력이 되지 않았습니다.
main annotation은 scala script에서는 지원하지 않습니다.

script에서도 command line argument를 받을 때에는 args: Array[String]을 사용하고 scala-cli를 실행시킵니다.

// Hello.sc
def hello() = println(s"Hello, ${args(0)}!!")
hello()

$ scala-cli Hello.sc -- World
Hello, World!!

Scala Script는 Scala-cli 또는 Ammonite에서 실행이 되고 scala 명령어로는 정상적으로 실행이 되지 않습니다.

이상으로 main method에 대해 알아 보았습니다.

comments 0