Scala for Backend Engineering & Functional Programming · 강의

for-comprehension에서 Option 사용

옵션을 연결합니다

레슨 4/413개 단계

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

Option을 깔끔하게 연결하기

여러 flatMap 및 map 호출을 연결하면 읽기 어려워질 수 있습니다. Scala의 for-comprehension은 같은 작업을 더 깔끔한 문법으로 작성하게 해 줍니다.

이는 컴파일러가 flatMap 및 map 호출로 다시 작성하는 문법적 편의 기능입니다.

기본 for-comprehension

for { ... } yield ... 안에서 각 x <- option은 값이 있으면 그 값을 꺼냅니다. yield는 최종 결과를 만듭니다.

모든 Option이 Some이면 결과의 Some을 얻게 됩니다.

object Main {
  def main(args: Array[String]): Unit = {
    val a: Option[Int] = Some(3)
    val b: Option[Int] = Some(4)
    val sum = for {
      x <- a
      y <- b
    } yield x + y
    println(sum)
  }
}

None에서 단축 평가하기

생성기 중 하나라도 None이면 전체 컴프리헨션의 결과가 None이 됩니다. 나머지 단계는 건너뜁니다.

이는 flatMap이 제공하는 것과 같은 단축 평가이지만 더 읽기 쉽습니다.

object Main {
  def main(args: Array[String]): Unit = {
    val a: Option[Int] = Some(3)
    val b: Option[Int] = None
    val sum = for {
      x <- a
      y <- b
    } yield x + y
    println(sum)
  }
}

문법이 어떻게 단순화되는가

컴파일러는 for-comprehension을 flatMap과 map으로 다시 작성합니다. 다음 두 코드는 동일합니다.

이를 이해하면 결과 타입을 예측하는 데 도움이 됩니다.

object Main {
  def main(args: Array[String]): Unit = {
    val a: Option[Int] = Some(3)
    val b: Option[Int] = Some(4)
    val viaFor = for { x <- a; y <- b } yield x + y
    val viaFlatMap = a.flatMap(x => b.map(y => x + y))
    println(viaFor)
    println(viaFlatMap)
  }
}

앞에서 얻은 값 사용하기

뒤의 생성기에서는 앞에서 바인딩한 값을 참조할 수 있습니다. 따라서 각 단계가 이전 단계에 의존하도록 만들 수 있습니다.

object Main {
  def main(args: Array[String]): Unit = {
    val base: Option[Int] = Some(10)
    val result = for {
      x <- base
      y <- Some(x * 2)
    } yield x + y
    println(result)
  }
}

중간 바인딩

=(화살표 없음)를 사용하면 컴프리헨션 안에서 일반 값을 도입할 수 있습니다. 중간 계산에 유용합니다.

object Main {
  def main(args: Array[String]): Unit = {
    val a: Option[Int] = Some(6)
    val result = for {
      x <- a
      doubled = x * 2
    } yield doubled + 1
    println(result)
  }
}

if를 사용한 조건

컴프리헨션에는 if 필터를 포함할 수 있습니다. 조건을 만족하지 못하면 결과는 None이 됩니다.

object Main {
  def main(args: Array[String]): Unit = {
    val a: Option[Int] = Some(8)
    val even = for {
      x <- a
      if x % 2 == 0
    } yield x
    println(even)
    val b: Option[Int] = Some(7)
    println(for { x <- b if x % 2 == 0 } yield x)
  }
}

여러 조회 조합하기

일반적인 사용 방법은 여러 키를 조회한 뒤, 모든 키가 존재할 때만 이를 조합하는 것입니다.

object Main {
  val data = Map("a" -> 1, "b" -> 2)
  def main(args: Array[String]): Unit = {
    val combined = for {
      x <- data.get("a")
      y <- data.get("b")
    } yield x + y
    println(combined)
    val missing = for {
      x <- data.get("a")
      z <- data.get("c")
    } yield x + z
    println(missing)
  }
}

for-comprehension을 사용하는 이유

다음과 같은 이점이 있습니다.

  • 서로 의존하는 Option을 읽기 쉽게 순서대로 처리
  • None에서 자동으로 단축 평가
  • flatMap/map과 같은 기능을 더 평평한 형태로 제공
  • if를 사용한 필터링 및 중간 = 바인딩

값으로 마무리하기

컴프리헨션은 Option을 반환하므로, 일반 값을 얻으려면 getOrElse 또는 fold로 마무리합니다.

object Main {
  def main(args: Array[String]): Unit = {
    val a: Option[Int] = Some(3)
    val b: Option[Int] = Some(4)
    val total = (for { x <- a; y <- b } yield x + y).getOrElse(0)
    println(total)
  }
}

하나로 연결하기

전체 처리 흐름은 두 입력을 파싱하고, 조건을 확인한 뒤, 결합하고, 기본값을 제공하는 것입니다.

object Main {
  def parse(s: String): Option[Int] = s.toIntOption
  def main(args: Array[String]): Unit = {
    val result = for {
      x <- parse("10")
      y <- parse("5")
      if y != 0
    } yield x / y
    println(result.getOrElse(-1))
  }
}

빠른 확인

Option에 대한 for-comprehension의 이해도를 확인해 보세요.

복습

for-comprehension으로 Option을 연결하는 방법을 배웠습니다.

  • for { x <- a; y <- b } yield ...는 Option을 읽기 쉽게 순서대로 처리합니다.
  • 이는 flatMap/map으로 단순화됩니다.
  • 어떤 None이든 전체 결과를 None으로 단축 평가합니다.
  • 뒤의 생성기는 앞에서 얻은 값을 사용할 수 있고, =는 바인딩을 추가하며, if는 필터링합니다.
  • 일반 값을 얻으려면 getOrElse 또는 fold로 마무리합니다.
무료로 시작

AI 튜터와 함께 Scala을(를) 배우세요 — 무료

브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.

코스
39
레슨
143

자주 묻는 질문

“for-comprehension에서 Option 사용” 강의는 무료인가요?

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

“for-comprehension에서 Option 사용”에서 뭘 배우나요?

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

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

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

“for-comprehension에서 Option 사용” 강의는 얼마나 걸리나요?

대부분의 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(으)로 돌아가기