Scala에서 case class
와 enum
은 둘 다 특정한 목적을 가지고 있지만, 각각의 기능적 차이점은 다음과 같습니다.
case class
는 불변 객체(immutable objects)를 쉽게 정의하고 패턴 매칭을 지원하는 클래스입니다. 주로 데이터 구조를 표현할 때 사용됩니다. case class
는 다음과 같은 특징을 가집니다:
case class
는 생성자, apply
메소드, unapply
메소드, toString
, hashCode
, equals
메소드 등이 자동으로 생성됩니다.case class
는 패턴 매칭에 매우 유용합니다.copy
메소드가 자동으로 제공됩니다.예시:
case class Person(name: String, age: Int)
val person = Person("Alice", 30)
val copyPerson = person.copy(age = 31)
Scala 3에서 도입된 enum
은 열거형(Enumeration)을 정의하는 데 사용되며, 상수 집합을 정의할 수 있습니다. enum
은 클래스의 상속 계층을 정의할 수 있으며, 각 enum
인스턴스는 고유한 경우를 나타냅니다.
특징:
enum
도 패턴 매칭을 지원하여 각 열거형 인스턴스에 대해 다양한 동작을 할 수 있습니다.enum
은 내부적으로 sealed trait
와 유사하게 동작하여 상속을 통한 다형성 구현이 가능합니다.예시:
enum Direction:
case North, South, East, West
val direction: Direction = Direction.North
direction match {
case Direction.North => println("Going North")
case Direction.South => println("Going South")
case Direction.East => println("Going East")
case Direction.West => println("Going West")
}