Scala의 컴패니언 객체

Mohammad Irfan 2023년6월21일
Scala의 컴패니언 객체

이 튜토리얼에서는 Scala에서 예제를 실행하는 동반 객체에 대해 설명합니다.

Scala의 컴패니언 객체

컴패니언 객체는 클래스와 이름이 같은 객체로 비슷한 파일에서 클래스로 선언됩니다.

예를 들어 클래스 이름과 같은 이름을 가진 Color 개체가 있고 파일이 Color.scala로 저장되면 이 개체는 Scala에서 동반 개체로 간주됩니다.

예:

class Color {
}
object Color {
}
// Color.scala

컴패니언 개체를 사용하면 클래스와 개체가 이제 서로의 전용 멤버에 액세스할 수 있다는 이점이 있습니다. Scala는 정적 개념을 사용하지 않지만 유사한 개념을 수집하기 위해 컴패니언 객체를 사용할 수 있습니다.

new 키워드를 사용하지 않고 개체 만들기

컴패니언 객체에 apply() 메서드를 추가하면 new 키워드를 사용하지 않고도 객체를 생성할 수 있습니다.

예:

class Color(val name: String){
    private  var _defaultname: String = "White"
     def get():String = _defaultname
}

object Color {
  def apply(name: String): Color = new Color(name)
}

object MyClass {

    def main(args: Array[String]) {
        val color = Color("Red")
        println(color.name)
    }
}

출력:

Red

클래스의 인스턴스 해체

마찬가지로 unapply() 메서드를 사용하여 클래스의 인스턴스를 분해할 수 있습니다. unapply() 함수 이후에 해당 멤버에 액세스하려고 하면 오류가 발생합니다.

예:

class Color(val name: String){
    private  var _defaultname: String = "White"
     def get():String = _defaultname
}

object Color { // unapply function
  def unapply(name: String): Color = new Color(name)
}

object MyClass {

    def main(args: Array[String]) {
        val color = Color("Red")
        println(color.name)
    }
}

출력:

error: Color.type does not take parameters
        val color = Color("Red")
                         ^