티스토리 뷰
반응형
동반 객체 혹은 짝 객체라고 불린다.
동반 객체는 class나 trait과 동일한 이름을 가지는 object가 Class나 trait과 같은 파일에 있을 때 동반 객체라고 한다.
class LearnScala {
}
object LearnScala { // 동반 객체
}
혹은
trait LearnScala {
}
object LearnScala { // 동반 객체
}
object는 class의 private 한 변수나 함수에 접근할 수 있다.
class LearnScala {
private val privateValue: Int = 1
}
object LearnScala {
val learnScala = new LearnScala
def hardStudy: Int = {
learnScala.privateValue
}
}
object에서 apply 메서드를 정의하여 클래스인 TestClass를 new를 통해서 생성되도록 하면 new를 사용하지 않아도 클래스인 TestClass를 생성하여 사용할 수 있다.
class TestClass {
}
object TestClass {
def apply() = new TestClass
}
class Main {
val a: TestClass = TestClass()
}
Scala에는 static 키워드가 없고 object를 통해서 Java의 클래스의 static을 대체할 수 있다.
class LearnScala {
}
object LearnScala {
val StaticValue: String = "Static Value"
def StaticDef: String = "Static Def"
}
object Main extends App {
LearnScala.StaticValue
LearnScala.StaticDef
}
위에서 private 한 변수나 함수에 접근할 수 있다고 적혀있는데 접근할 수 없는 예외가 있다.
class TestClass(b: Int) {
private[this] def a = 1
private val c = 3
}
object TestClass {
val test = new TestClass(1)
def aaa: Int = test.b // 생성자의 파라미터는 접근할 수 없다. "Cannot resolve symbol b" 라는 에러 발생
def aaaa: Int = test.a // private[this] 한 변수는 접근할 수 없다. "Symbol a is inaccessible from this place" 라는 에러발생
def aaaaa: Int = test.c // 접근 가능하다.
}
object를 통해서 객체가 생성되기 때문에 클래스 메서드 패턴을 사용하는 것과 같은 효과를 가진다.
반응형
'scala' 카테고리의 다른 글
[Scala] sealed 제어자 (0) | 2018.06.23 |
---|---|
[Scala] unapply 메서드 (0) | 2018.05.05 |
[Scala] apply 메서드 (0) | 2018.03.24 |
[Scala] val, var, def의 차이 (0) | 2018.02.28 |
[Scala] Option (0) | 2017.11.11 |
댓글