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 라고 불리운다.
'Programming > Scala' 카테고리의 다른 글
Scala - Pattern matching (0) | 2011.11.10 |
---|---|
Scala - IDE recommendation (scala 를 위한 개발 IDE 추천) (0) | 2011.11.10 |
Scala - syntax highlighting for vi vim (0) | 2011.11.10 |
Scala - side effect 란 무엇인가? (0) | 2011.11.10 |
Scala 컴파일러 설치 (0) | 2011.11.10 |