0Pricing
Scala for Backend Engineering & Functional Programming · 강의

Scala 3의 열거형

새 열거형 문법

Scala 3의 열거형은(는) CoddyKit의 무료 Scala for Backend Engineering & Functional Programming 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Scala for Backend Engineering & Functional Programming 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Scala for Backend Engineering & Functional Programming 강의에는 총 4개의 강의가 포함되어 있습니다.

새 열거형 키워드

Scala 3에는 일급 열거형 구성이 추가되었습니다. Scala 2의 장황한 봉인 트레이트와 케이스 객체 조합을 간결한 구문으로 대체합니다.

  • 각 케이스는 열거형 타입의 값이 됩니다.
  • 컴파일러가 유용한 도우미를 자동으로 생성합니다.
enum Color:
  case Red, Green, Blue

object Main:
  def main(args: Array[String]): Unit =
    println(Color.Red)

모든 값 나열

모든 단순 열거형에는 values(모든 케이스의 배열)와 valueOf(이름으로 조회)를 제공하는 동반 객체가 생깁니다.

enum Color:
  case Red, Green, Blue

object Main:
  def main(args: Array[String]): Unit =
    Color.values.foreach(println)
    println(Color.valueOf("Green"))

순서와 이름

각 열거형 값에는 ordinal(0부터 시작하는 위치)이 있으며, 케이스 이름을 사용하는 생성된 toString도 제공됩니다.

enum Color:
  case Red, Green, Blue

object Main:
  def main(args: Array[String]): Unit =
    println(Color.Blue.ordinal)
    println(Color.Red.ordinal)

매개변수가 있는 열거형

열거형 케이스는 생성자 매개변수를 받을 수 있으므로 각 값에 관련 데이터를 지정할 수 있습니다. RGB 코드나 행성 질량 같은 상수를 저장할 때 유용합니다.

enum Planet(val mass: Double):
  case Earth extends Planet(5.97e24)
  case Mars  extends Planet(6.42e23)

object Main:
  def main(args: Array[String]): Unit =
    println(Planet.Earth.mass)
    println(Planet.Mars.mass)

열거형의 메서드

열거형 본문 안에 메서드를 정의할 수 있습니다. 클래스의 메서드처럼 모든 값에서 사용할 수 있습니다.

enum Direction:
  case North, South, East, West
  def opposite: Direction = this match
    case North => South
    case South => North
    case East  => West
    case West  => East

object Main:
  def main(args: Array[String]): Unit =
    println(Direction.North.opposite)

제네릭 ADT 열거형

열거형은 제네릭하고 매개변수화할 수 있어 대수적 데이터 타입을 모델링할 수 있습니다. 다음은 단순화한 Option 타입입니다.

enum Maybe[+A]:
  case Just(value: A)
  case Nothing

object Main:
  def main(args: Array[String]): Unit =
    val a: Maybe[Int] = Maybe.Just(42)
    println(a)

재귀적 ADT 열거형

열거형은 재귀적 구조에서 특히 유용합니다. 이진 트리나 연결 리스트를 케이스 집합으로 깔끔하게 표현할 수 있습니다.

enum Tree[+A]:
  case Leaf(value: A)
  case Branch(left: Tree[A], right: Tree[A])

object Main:
  def main(args: Array[String]): Unit =
    val t = Tree.Branch(Tree.Leaf(1), Tree.Leaf(2))
    println(t)

열거형에 대한 패턴 매칭

열거형은 봉인되어 있으므로 컴파일러가 match의 모든 경우 처리 여부를 검사할 수 있습니다. 케이스가 누락되면 경고가 발생합니다.

enum Light:
  case Red, Yellow, Green

object Main:
  def action(l: Light): String = l match
    case Light.Red    => "stop"
    case Light.Yellow => "slow"
    case Light.Green  => "go"

  def main(args: Array[String]): Unit =
    println(action(Light.Green))

Java 호환 열거형

scala.reflect.Enum에서 자동으로 파생하여 extends java.lang.Enum 동작을 추가할 수 있습니다. 진정한 Java 상호 운용성이 필요하다면 enum X extends Enum[X]...을 작성하면 되지만, 대부분의 코드는 필요할 때 Java와 잘 상호 운용되는 일반 형식을 사용합니다.

enum Suit:
  case Hearts, Diamonds, Clubs, Spades

object Main:
  def main(args: Array[String]): Unit =
    println(Suit.values.length)
    println(Suit.Spades.ordinal)

필드와 메서드 결합

매개변수가 있는 케이스와 공통 메서드를 결합하여 풍부한 도메인 모델을 만들 수 있습니다.

enum Currency(val symbol: String):
  case USD extends Currency("$")
  case EUR extends Currency("\u20ac")
  def format(amount: Double): String = s"$symbol$amount"

object Main:
  def main(args: Array[String]): Unit =
    println(Currency.USD.format(9.99))

열거형을 사용할 때

선택지가 제한되어 있거나 대수적 데이터 타입이 필요할 때 enum을 사용하세요.

  • 일반 열거에는 단순 케이스를 사용합니다.
  • ADT와 합 타입에는 매개변수가 있는 케이스를 사용합니다.
  • 자동으로 제공되는 모든 경우 처리 검사가 리팩터링을 안전하게 해 줍니다.
enum Result[+E, +A]:
  case Ok(value: A)
  case Err(error: E)

object Main:
  def main(args: Array[String]): Unit =
    val r: Result[String, Int] = Result.Ok(7)
    println(r)

빠른 확인

Scala 3 열거형에 대한 이해도를 확인해 보세요.

복습

Scala 3 열거형을 배웠습니다.

  • 간결한 enum이 봉인 트레이트의 반복 코드를 대체합니다.
  • 단순 열거형에는 values, valueOf, ordinal이 제공됩니다.
  • 케이스는 관련 데이터를 위한 매개변수를 받을 수 있습니다.
  • 제네릭 및 재귀 열거형으로 ADT를 모델링할 수 있습니다.
  • 봉인된 특성 덕분에 모든 경우를 처리하는 패턴 매칭이 가능합니다.
enum Weekday:
  case Mon, Tue, Wed, Thu, Fri
  def isStart: Boolean = this == Mon

object Main:
  def main(args: Array[String]): Unit =
    println(Weekday.Mon.isStart)
    println(Weekday.values.length)

자주 묻는 질문

“Scala 3의 열거형” 강의는 무료인가요?

네 — “Scala 3의 열거형” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Scala for Backend Engineering & Functional Programming 강의 전체를 잠금 해제할 수 있습니다. Scala for Backend Engineering & Functional Programming 강의에는 총 4개의 강의가 포함되어 있습니다.

“Scala 3의 열거형”에서 뭘 배우나요?

새 열거형 문법 브라우저에서 직접 실행하는 실습 코드로 Scala for Backend Engineering & Functional Programming을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Scala for Backend Engineering & Functional Programming을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Scala for Backend Engineering & Functional Programming은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“Scala 3의 열거형” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Scala for Backend Engineering & Functional Programming 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Scala for Backend Engineering & Functional Programming 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 의미 있는 들여쓰기
  2. Scala 3의 열거형
  3. 불투명 타입
  4. 합집합 타입과 교집합 타입
← Scala for Backend Engineering & Functional Programming(으)로 돌아가기