scala에서 클래스를 생성하는 방법이다.


class Person {
}
new Person()


class Person(id: Int)
new Person(1)


클래스는 this라는 보조 생성자로 객체를 생성할 수 있다. 


그리고, Option 타입을 사용하면 풍부한 생성이 가능하다. 


하지만, case class를 사용하여 new 객체를 하지 않도록 할 때 일부 코드에서는 컴파일 에러가 발생한다. 

case class Person(id: Int, name: String, department: Option[String]) {
def this(id: Int) = this(id, "no-name")

def this(id: Int, name: String) = this(id, name, Some("no-name"))
}

new Person(1, "matt")
new Person(2)
new Person(3, "samuel", Some("develop"))

//Person(1) // compile error
//Person(2, "jack") // compile error
Person(3, "samuel", Some("develop"))


보조 생성자의 한계가 보이기 때문에, 이때 동반자 객체(companion object)를 활용한다.


이전에 컴파일 에러가 발생했던 부분이 사라지고 더욱 Rich하게 사용할 수 있다. 




case class Person(id: Int, name: String, department: Option[String]) {
def this(id: Int) = this(id, "no-name")

def this(id: Int, name: String) = this(id, name, Some("no-name"))
}

object Person {
def apply(id: Int) = new Person(id)

def apply(id: Int, name: String) = new Person(id)
}

new Person(1, "matt")
new Person(2)
new Person(3, "samuel", Some("develop"))


Person(1)
Person(2, "jack") Person(3, "samuel", Some("develop"))





Posted by '김용환'
,