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"))
'scala' 카테고리의 다른 글
[scala] 스칼라 스크립트 실행 코드 예시 (0) | 2016.12.16 |
---|---|
[scala] 쉘 실행하기 (0) | 2016.12.13 |
[scala] 부모 클래스를 상속받고 트레이트를 믹스인한 클래스의 생성 순서 (0) | 2016.12.13 |
[scala] for 내장 (0) | 2016.12.08 |
[scala] try-catch/Try-match/Either/Validation (0) | 2016.12.06 |