Try, Success, Failure
예외 처리를 알아봅니다
Try, Success, Failure은(는) 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개의 강의가 포함되어 있습니다.
Try란 무엇인가요?
Try[T]는 값이 반환되거나 예외가 발생할 수 있는 계산을 나타냅니다. 두 하위 타입이 있습니다.
Success[T]는 정상적인 결과를 감쌉니다.Failure는Throwable을 감쌉니다.
예외를 발생시키는 코드를 조합할 수 있는 값으로 바꿔 줍니다.
Try 가져오기
Try는 scala.util에 있습니다. 예외를 발생시킬 수 있는 표현식을 Try { ... } 안에 넣으면 치명적이지 않은 예외를 대신 잡아 줍니다.
import scala.util.Try
@main def run(): Unit = {
val ok = Try(10 / 2)
val bad = Try(10 / 0)
println(ok)
println(bad)
}Success와 Failure
정상적으로 완료된 Try는 값을 담은 Success가 되고, 예외를 발생시키면 예외를 담은 Failure가 됩니다.
import scala.util.{Try, Success, Failure}
@main def run(): Unit = {
val result = Try("123".toInt)
result match {
case Success(n) => println(s"parsed: $n")
case Failure(e) => println(s"failed: ${e.getMessage}")
}
}실패 패턴 매칭하기
감싼 코드에서 예외가 발생하면 Failure 안의 예외를 살펴볼 수 있습니다. 여기서는 잘못된 분석 결과를 깔끔하게 포착합니다.
import scala.util.{Try, Success, Failure}
@main def run(): Unit = {
val result = Try("abc".toInt)
result match {
case Success(n) => println(s"got $n")
case Failure(e) => println(s"error type: ${e.getClass.getSimpleName}")
}
}Try에서 getOrElse 사용하기
getOrElse는 성공 값을 반환하고, Try가 실패하면 기본값을 반환합니다. 따라서 예외를 다시 발생시키지 않아도 됩니다.
import scala.util.Try
@main def run(): Unit = {
val n = Try("oops".toInt).getOrElse(-1)
println(n)
}Try에서 map 사용하기
map은 Success의 값을 변환합니다. 원래 값이 Failure이거나 매핑 함수에서 예외가 발생하면 결과도 Failure로 유지됩니다.
import scala.util.Try
@main def run(): Unit = {
val doubled = Try("21".toInt).map(_ * 2)
val failed = Try("x".toInt).map(_ * 2)
println(doubled)
println(failed)
}recover: 예외 처리하기
recover를 사용하면 부분 함수로 특정 예외를 처리하여 Failure를 다시 Success로 바꿀 수 있습니다.
import scala.util.Try
@main def run(): Unit = {
val safe = Try("x".toInt).recover {
case _: NumberFormatException => 0
}
println(safe)
}recoverWith
recoverWith는 처리기가 일반 값을 반환하는 대신 또 다른 Try를 반환한다는 점을 제외하면 recover와 같습니다. 복구 과정 자체도 실패할 수 있을 때 사용합니다.
import scala.util.Try
@main def run(): Unit = {
val result = Try("x".toInt).recoverWith {
case _: NumberFormatException => Try("42".toInt)
}
println(result)
}toEither와 toOption
Try는 다른 오류 타입으로 깔끔하게 변환할 수 있습니다.
toOption:Success는Some이 되고Failure는None이 됩니다.toEither:Success는Right가 되고Failure는Left(throwable)이 됩니다.
import scala.util.Try
@main def run(): Unit = {
println(Try("5".toInt).toOption)
println(Try("x".toInt).toOption)
println(Try("5".toInt).toEither.isRight)
}flatMap으로 연결하기
flatMap은 각각 Try를 반환하는 계산을 순서대로 실행합니다. 어느 단계에서든 실패하면 전체 연결이 해당 Failure에서 즉시 중단됩니다.
import scala.util.Try
object Main {
def half(n: Int): Try[Int] = Try(if (n % 2 == 0) n / 2 else throw new RuntimeException("odd"))
def main(args: Array[String]): Unit = {
println(Try("8".toInt).flatMap(half))
println(Try("7".toInt).flatMap(half))
}
}Try와 try/catch 비교
Try는 예외를 값으로 바꾸므로 중첩된 try/catch 블록 없이 map, flatMap을 사용하고 결과를 결합할 수 있습니다. 단, 치명적이지 않은 예외만 잡습니다. OutOfMemoryError 같은 심각한 오류는 여전히 전파됩니다.
빠른 확인
Try에 대해 배운 내용을 확인해 보세요.
복습
Try를 사용한 예외 처리를 학습하셨습니다.
Try { ... }는 치명적이지 않은 예외를Failure로, 정상 결과를Success로 포착합니다.map/flatMap으로 변환하고,recover/recoverWith로 복구합니다.getOrElse로 기본값을 제공합니다.toOption과toEither로 변환합니다.
자주 묻는 질문
“Try, Success, Failure” 강의는 무료인가요?
네 — “Try, Success, Failure” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Scala for Backend Engineering & Functional Programming 강의 전체를 잠금 해제할 수 있습니다. Scala for Backend Engineering & Functional Programming 강의에는 총 4개의 강의가 포함되어 있습니다.
“Try, Success, Failure”에서 뭘 배우나요?
예외 처리를 알아봅니다 브라우저에서 직접 실행하는 실습 코드로 Scala for Backend Engineering & Functional Programming을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Scala for Backend Engineering & Functional Programming을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Scala for Backend Engineering & Functional Programming은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“Try, Success, Failure” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Scala for Backend Engineering & Functional Programming 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Scala for Backend Engineering & Functional Programming 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 오류를 위한 Either
- Try, Success, Failure
- Either 조합
- 타입 간 변환