본문 바로가기

Programming/Scala

Scala - Application (Scala 언어 응용프로그램)

Scala 로 응용프로그램을 만들기위해서는 standalone singleton object 를 사용하여 main method 를 제공해야 한다. 이 main method 는 parameter 한개를 입력 받는데, Java 의 main 과 유사하다. main method 를 가지고 있는 모든 standalone object 는 응용프로그램을 실행 할 수 있다. 아래의 코드는 응용프로그램의 인자로 들어온 값들의 check sum 을 알려주는 프로그램이다.


import ChecksumAccumulator.calculate


object Summer {

    def main(args: Array[String]) {

        for (arg <- args)

            println(arg + ": " + calculate(arg))

    }

}


compile 하는 방법은 간단하다.

$ scalac Summer.scala


실행방법도 간단하다.

$ scala Summer How are you doing?


여기서 main method 안에 들어오는 인자의 이름은 args 이고 type 은 String 의 배열이다. 그러므로 인자가 가질 수 있는 것이 가변적으로 여러개라는 의미이다.


Scala 에서는 method 의 인자의 이름이 먼저 오고 그 다음에 ":" (콜론) 이 오고 다음에 Type 이 오게 된다.


또 다른 방법으로도 응용프로그램을 만들 수 있다. 바로 Application trait 을 이용하는 방법이다.



import ChecksumAccumulator.calculate


object Summer extends Application {

    for (arg <- args)

        println(arg + ": " + calculate(arg))

}


간단하다. main method 를 바로 없애고, Application 이라는 trait 을 상속한다는 의미에서 extends 키워드를 사용하면 끝이다.

Scala 에서는 Java 와 달리, Class 혹은 Interface 를 상속받을 경우, 키워드는 항상 extends 를 사용한다.

대신 코드에서 알 수 있듯이 프로그램 실행과 같이 들어오는 command line 인자값들을 이용할 수 없다는 단점이 존재한다.

그리고, JVM 의 thread 에 관한 제약사항들이 있어서 multi -threaded 프로그램을 작성을 하려면 Application trait 을 이용할 수 없다.

마지막으로 JVM 의 몇가지 구현은 Application trait 을 이용해서 실행하는 프로그램을 최적화를 잘 하지 못한다. 그래서 성능상의 문제가 될 수 있다.


결론은 Scala 로 응용프로그램을 만들기 위해서는 main method 를 사용하는 방법을 선택하는 것이 multi-threaded성능인자값을 받을 수 있다 는 측면에서 유리하다는 사실을 알 수 있다. 돌려말하면, 아주 간단하고 single-threaded 프로그램에만 Application trait 을 사용하라는 말이다. :)