일반적인 클래스와 비슷하나 몇가지 차이점이 임ㅆ다. 불변 데이터를 모델링할때 유용하다, 패턴매칭과도 유용하다
최소한의 선언 방법은 case class 와 선언자를 활용하고 인자리스트를 활용
case class Book(isbn: String)
val frankenstein = Book("978-0486282114")
→ 키워드 new가 쓰이지 않는다.
apply 메소드가 기본적으로 있고 오브젝트 생성을 담당하고 있기 때문이다.
파라미터들이 기본적으로 public val이 된다. 그리고 불변하다
case class Message(sender: String, recipient: String, body: String)
val message1 = Message("[email protected]", "[email protected]", "Ça va ?")
println(message1.sender) // prints [email protected]
message1.sender = "[email protected]" // this line does not compile
var로 정의해서 가변하게 쓸 수있으나 권장하지 않는다.
참조가 아니라 구조에 대해서 비교가 된다. 인스턴스가 있는 메모리 공간이 아니라 각 값들을 자동으로 비교해 준다.
case class Message(sender: String, recipient: String, body: String)
val message2 = Message("[email protected]", "[email protected]", "Com va?")
val message3 = Message("[email protected]", "[email protected]", "Com va?")
val messagesAreTheSame = message2 == message3 // true
shallow 카피를 쉽게 할 수 있다.