Scala case classes are syntactic sugar. When you create a case class the Scala compiler will create a companion object with an apply and an unapply method for you, which you can then use as if it simply exists. Here is a link to more in depth information on case classes.