[Scala] 내장 제어 구문

smlee·2023년 8월 9일
0

Scala

목록 보기
7/37
post-thumbnail

이 글은 Programming in Scala 4/e를 읽고 정리한 내용입니다.


스칼라가 제공하는 내장 제어 구문은 몇 가지 없다. if, while, for, try, match, 함수 호출이 전부이다. 스칼라에 제어 구문의 수가 적은 이유는 설계 초기부터 함수 리터럴을 포함했기 때문이다.

앞으로 자주 사용할 것으로 예상되는 내장 제어 구문을 위주로 정리하려고 한다.

1. if 표현식

스칼라의 if는 다른 여러 언어와 마찬가지로, 조건을 테스트하고 결과가 참인지 여부에 따라 분기를 실행하는 구문이다. 즉 if문 안의 조건이 참이면 해당 블록을 실행하는 내장 제어 구문이다.

var filename = "default.txt"
if(!args.isEmpty)
	filename = args(0)

위의 코드는 filename을 선언하고, 디폴트값으로 초기화한 코드이다. 그리고, if문을 사용해서 인자가 있는지 여부를 조사해서 만약 인자가 있다면 filename 변수에 인자 목록의 값을 할당하는 코드이다. 즉, if문에서 인자가 비어있지 않은 것이 참이면, filename에 값을 할당하는 코드인 것이다.

하지만, Scala에서는 val 사용이 권장된다. 더 가독성이 높고 리팩토링이 쉽기 때문이다. 위의 코드를 변경하면 다음과 같다.

val filename = if(!args.isEmpty) args(0) else "default.txt"

2. try 표현식으로 예외 다루기

try 표현식은 다른 여타 언어와 유사하게 동작한다. 메서드는 보통의 경우 값을 반환하지만, 예외를 발생시키며 종료할 수도 있다. 메서드를 호출한 측에서는 발생한 예외를 잡아서 처리할 수도 있고, 그냥 종료할 수도 있다.

val half = if(n%2 ==0) n/2 else throw new RuntimeException("n must be even")

위와 같은 코드는 n이 짝수이면 정확히 절반을 리턴하고, n이 짝수가 아니라면 초기화하지 않고, 예외를 발생시킨다.

발생한 예외 잡기

import java.io.FileReader
import java.io.FileNotFoundException
import java.io.IOException

try{
	val f = new FileReader("input.txt")
} catch{
	case ex: FileNotFoundException
    case ex: IOException
}

스칼라는 타 언어와 마찬가지로 본문을 수행하다가 예외가 발생하면 각 catch 절을 차례대로 시도한다. 스칼라의 경우, Checked Exception을 catch를 이용해 잡거나 메서드 선언 시 throws로 선언하지 않아도 된다는 점이다.

📚 Reference

  • Programming in Scala 4/e - Chapter.7

0개의 댓글