본문 바로가기

Programming/Scala

Scala - singleton object

Scala 언어가 Java 보다 객체 지향 언어의 개념이라고 할 수 있는 것은 singleton objects 라고 할 수 있다.

Scala 언어에서는 static member들을 가질 수 없다. 대신에 Scala 는 singleton objects 라는 것으로 이를 대신한다.

singleton objects 의 정의는 class 라는 키워드를 object 라는 키워드로 사용하는 것을 제외하고는 클래스 정의와 비슷하다. 


아래는 예제 코드이다.

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

        }

}


singleton object 가 클래스 이름과 같은 이름을 가지게 될때, singleton object 는 그 클래스의 companion object 라고 부른다. 그리고 그 클래스를 singleton object 의 companion class 라고 부른다. 이러할 경우 singleton object 와 class 는 같은 파일에 존재 해야한다.

클래스와 companion object 는 그들 각각의 private field 를 access 할 수 있는 권한이 있다.


singleton object 의 method 를 호출하는 방법은 Java 언어와 마찬가지로 아래와 같이 사용할 수 있다.

ChecksumAccumulator.calculate("Every value is an object.")


그러면 singleton object 는 왜 쓰냐? 라고 물어볼 수 있겠다.


1. Application 

2. Module

3. package 에 대한 대채


로 사용이 된다.


singleton object 가 companion class 와 같은 이름을 공유하지 않을 경우에는, standalone object 라고 불리운다.