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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- null 피하기
- Option의 map과 flatMap
- getOrElse와 fold
- for-comprehension에서 Option 사용