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

getOrElse와 fold

값을 추출합니다

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

값 꺼내기

결국 Option에서 일반 값을 꺼내야 하며, None일 때 사용할 적절한 값을 제공해야 합니다.

Scala에서는 이를 위해 getOrElse와 fold 같은 안전한 추출 방법을 제공합니다.

getOrElse 사용하기

getOrElse는 Some 안의 값을 반환하거나, None일 때 사용자가 제공한 기본값을 반환합니다.

항상 일반 값을 반환하며 Option을 반환하지는 않습니다.

object Main {
  def main(args: Array[String]): Unit = {
    val a: Option[Int] = Some(5)
    val b: Option[Int] = None
    println(a.getOrElse(0))
    println(b.getOrElse(0))
  }
}

기본값은 지연 평가됩니다

getOrElse의 기본값은 Option이 None일 때만 평가됩니다. 따라서 값이 있으면 계산 비용이 큰 기본값을 사용하더라도 비용이 발생하지 않습니다.

object Main {
  def expensiveDefault(): Int = { println("computing default"); 99 }
  def main(args: Array[String]): Unit = {
    val present: Option[Int] = Some(7)
    println(present.getOrElse(expensiveDefault()))
  }
}

get을 피해야 하는 이유

Option에는 get 메서드가 있지만, None에서 예외를 발생시킵니다. 이는 Option을 사용하는 목적에 어긋납니다.

대신 getOrElse, fold 또는 패턴 매칭을 사용하세요.

대체 Option을 위한 orElse

orElse는 다릅니다. 첫 번째 Option이 Some이면 이를 반환하고, 그렇지 않으면 대체 Option을 반환합니다.

비어 있을 수도 있는 대안을 차례로 시도할 때 사용하세요.

object Main {
  def main(args: Array[String]): Unit = {
    val primary: Option[Int] = None
    val backup: Option[Int] = Some(42)
    println(primary.orElse(backup))
  }
}

fold 소개

fold는 한 번의 호출로 두 경우를 모두 처리합니다. 먼저 None에 사용할 기본값을 지정하고, 그다음 Some의 값에 적용할 함수를 지정합니다.

하나의 결과를 반환하며, 값이 있으면 해당 값을 변환합니다.

object Main {
  def main(args: Array[String]): Unit = {
    val n: Option[Int] = Some(10)
    val result = n.fold(0)(x => x * 2)
    println(result)
  }
}

None에서의 fold

Option이 None이면 fold는 먼저 지정한 기본값을 반환하고 변환 함수는 무시합니다.

object Main {
  def main(args: Array[String]): Unit = {
    val empty: Option[Int] = None
    val result = empty.fold(-1)(x => x * 2)
    println(result)
  }
}

다른 타입으로 변환하는 fold

fold의 두 분기는 같은 타입을 반환해야 하지만, 그 타입은 Option의 값 타입과 달라도 됩니다.

여기서는 Option[Int]을 String으로 변환합니다.

object Main {
  def describe(o: Option[Int]): String =
    o.fold("missing")(x => s"value $x")
  def main(args: Array[String]): Unit = {
    println(describe(Some(8)))
    println(describe(None))
  }
}

방법 선택하기

간단히 정리하면 다음과 같습니다.

  • getOrElse: 같은 타입의 기본값 제공
  • orElse: 대체 Option 제공
  • fold: 한 단계에서 값을 변환하고 기본값 제공
  • 패턴 매칭: 각 경우에 더 많은 로직이 필요할 때 사용

map과 함께 사용하기

먼저 map으로 변환한 다음 getOrElse를 사용해 일반 값으로 마무리하는 방식이 자주 사용됩니다.

object Main {
  def main(args: Array[String]): Unit = {
    val name: Option[String] = Some("ada")
    val display = name.map(_.toUpperCase).getOrElse("ANON")
    println(display)
  }
}

하나로 연결하기

구성 값을 조회하고, 대체 Option을 제공한 다음, getOrElse로 기본값을 적용합니다.

object Main {
  val env = Map("timeout" -> "30")
  def main(args: Array[String]): Unit = {
    val timeout = env.get("timeout")
      .flatMap(_.toIntOption)
      .getOrElse(60)
    println(timeout)
    val retries = env.get("retries").fold(3)(_.toInt)
    println(retries)
  }
}

빠른 확인

Option 값 추출에 대한 이해도를 확인해 보세요.

복습

Option 값을 안전하게 추출하는 방법을 배웠습니다.

  • getOrElse(default)는 값 또는 기본값을 반환합니다(기본값은 지연 평가됨).
  • orElse(fallback)는 첫 번째 Some 또는 대체 Option을 반환합니다.
  • fold(default)(f)는 한 단계에서 Some을 변환하고 None에는 기본값을 적용합니다.
  • None에서 예외를 발생시키는 get은 피하세요.

자주 묻는 질문

“getOrElse와 fold” 강의는 무료인가요?

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

“getOrElse와 fold”에서 뭘 배우나요?

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

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

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

“getOrElse와 fold” 강의는 얼마나 걸리나요?

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

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

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

이 강의의 모든 강의

  1. null 피하기
  2. Option의 map과 flatMap
  3. getOrElse와 fold
  4. for-comprehension에서 Option 사용
← Scala for Backend Engineering & Functional Programming(으)로 돌아가기