본문 바로가기
Programming/Scala

[6강] 컴파일하기

by 유주원 2015. 4. 17.

Scalac로 컴파일을 하기 위해 아래의 두 코드를 작성하였다.

참고로 스칼라는 자바처럼 파일 이름과 클래스 이름을 동일하게 맞추지 않아도 동작한다.


Summer.scala


import ChecksumAccumulator.calculate


object Summer{

def main(args: Array[String]){

for(arg <- args)

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

}

}


ChecksumAccumulator.scala


import scala.collection.mutable.Map


object ChecksumAccumulator{

private val cache = Map[String, Int]()

def calculate(s: String): Int =

if (cache.contains(s))

cache(s)

else{

val acc = new ChecksumAccumulator

for(c <- s)

acc.add(c.toByte)

val cs = acc.checksum()

cache += (s->cs)

cs

}

}


class ChecksumAccumulator{

private var sum = 0

def add(b: Byte) { sum += b}

def checksum():Int = ~(sum & 0xFF) + 1

}


못보던 키워드들이 있다.


일단 ChecksumAccumulator.scala 파일을 살펴 보자.

우선 object..

object가 무었이냐면, java나 c의 static과 같은 개념이라고 생각하면 된다.

그리고 이름이 같은 class를 함께 선언할 수가 있다. 하지만 이렇게 선언하려할 때에는 한 파일 내에서 선언이 이루어져야 한다.

위의 예제에서는 ChecksumAccumulator.scala 파일 내에 두개의 클래스가 같이 선언되었다.


그리고 Summer.scala를 보자

main 함수가 눈에 띤다.

scala application의 시작 역할을 한다.


그럼 이제 컴파일을 해보자.


$> scalac Summer.scala ChecksumAccumulator.scala


이렇게 해주면 .class 파일과 파일명 끝이 $로 끝나는 파일들이 생성되는 것을 확인할 수 있다.

신기하게도 그냥 scala라고 치고 매개변수를 입력해주면 scala 인터프리터에서 알아서 main을 찾아서 실행을 해준다.

참 신기하다.