Home Case Class
Post
Cancel

Case Class

Case Class

regular class와 몇가지 특성을 제외하고 비슷하다. immutable data를 모델링하는데 좋다.

case class 정의하기

1
2
3
case class Book(isbn: String)

val frankenstein = Book("978-0486282114")

Book case class를 생성할때 new 키워드가 사용이 되지 않음을 알수 있다. 이유는 case class가 apply method를 기본적으로 가지고 있어서, object 생성을 하기 때문이다.

1
2
3
4
5
case class Message(sender: String, recipient: String, body: String)
val message1 = Message("guillaume@quebec.ca", "jorge@catalonia.es", "Ça va ?")

println(message1.sender)  // prints guillaume@quebec.ca
message1.sender = "travis@washington.us"  // this line does not compile

val로 message1이 선언되었기 때문에, message1.sender 에 값을 재할당해줄수는 없다. var로 선언할순 있지만 추천하지 않는다.

비교

case class들은 reference가 아닌 structure로 비교된다.

1
2
3
4
5
case class Message(sender: String, recipient: String, body: String)

val message2 = Message("jorge@catalonia.es", "guillaume@quebec.ca", "Com va?")
val message3 = Message("jorge@catalonia.es", "guillaume@quebec.ca", "Com va?")
val messagesAreTheSame = message2 == message3  // true

복사

copy 함수를 이용해서 case class의 객체를 (shallow)copy 할수 있다.

1
2
3
4
5
6
case class Message(sender: String, recipient: String, body: String)
val message4 = Message("julien@bretagne.fr", "travis@washington.us", "Me zo o komz gant ma amezeg")
val message5 = message4.copy(sender = message4.recipient, recipient = "claire@bourgogne.fr")
message5.sender  // travis@washington.us
message5.recipient // claire@bourgogne.fr
message5.body  // "Me zo o komz gant ma amezeg"

여기서는 body는 직접 복사되고 나머지 필드는 새로 값이 할당된다.

출처

https://docs.scala-lang.org/tour/case-classes.html

This post is licensed under CC BY 4.0 by the author.

Trending Tags