English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Scala 예외 처리

Scala의 예외 처리는 Java와 같은 다른 언어와 유사하다.

Scala의 메서드는 예외를 투출하는 메서드를 통해 관련 코드의 실행을 종료할 수 있으며, 반환 값이 필요하지 않다.

캡처 예외

Scala에서는 Java와 같이 throw 메서드를 사용하여 예외를 투출한다. 예를 들어, 새로운 파라미터 예외를 투출하는 예제:

throw new IllegalArgumentException

캡처 예외

캡처 메커니즘은 다른 언어와 같다. 예외가 발생하면 catch 문은 순서대로 캡처된다. 따라서 catch 문에서는 더 구체적인 예외는 앞쪽에, 더 일반적인 예외는 뒤쪽에 위치해야 한다. 만약 캡처 문에 없는 예외가 발생하면, 해당 예외는 처리할 수 없으며, 호출자로 전달된다.

캡처 예외의 catch 문은 다른 언어와 다르다. Scala에서는 패턴 매칭 아이디어를借用하여 예외를 매칭하므로, catch 코드에서는 다음과 같은 case 문이 일련으로 들어가 있다:

import java.io.FileReader
import java.io.FileNotFoundException
import java.io.IOException
object Test {
   def main(args: Array[String]) {
      try {
         val f = new FileReader("input.txt")
      }
         case ex: FileNotFoundException => {
            println("Missing file exception")
         }
         case ex: IOException => {
            println("IO Exception")
         }
      }
   }
}

위 코드를 실행하면 다음과 같은 결과가 출력됩니다:

$ scalac Test.scala 
$ scala Test
Missing file exception

catch 문 안의 내용은 match 문의 case와 완전히 동일합니다. 예외 잡기는 순서대로 이루어지므로 가장 일반적인 예외인 Throwable을 가장 먼저 작성하면 그 이후의 case는 잡을 수 없으므로 마지막에 작성해야 합니다.

finally 문

finally 문은 정상 처리나 예외가 발생했을 때 모두 필요한 단계를 수행하는 데 사용됩니다. 예제는 다음과 같습니다:

import java.io.FileReader
import java.io.FileNotFoundException
import java.io.IOException
object Test {
   def main(args: Array[String]) {
      try {
         val f = new FileReader("input.txt")
      }
         case ex: FileNotFoundException => {
            println("Missing file exception")
         }
         case ex: IOException => {
            println("IO Exception")
         }
      } finally {
         println("Exiting finally...")
      }
   }
}

위 코드를 실행하면 다음과 같은 결과가 출력됩니다:

$ scalac Test.scala 
$ scala Test
Missing file exception
Exiting finally...