Scala case classes let us model immutable data. For object construction, these classes have an apply() method to handle object construction. These classes have all vals, and so prove useful with pattern-matching.
Let’s take an example:
scala> case class Book(title:String, author:String, ISBN: String)
defined class Book