본문 바로가기

Programming/Scala

Scala - Pattern matching

Scala 에는 pattern matching 이라는 기능이 있는데,

Java 언어와 마찬가지로 case 문을 쓰는 것이 비슷하긴 한데, 문법은 약간 틀리다.

기본적인 문법은 아래의 예제를 보면 이해가 쉬울 듯 하다.


1  val firstArg = if (!args.isEmpty) args(0) else ""

3  val friend =

4     firstArg match {

5        case "salt" => "pepper"

6        case "chips" => "salsa"

7        case "eggs" => "bacon"

8        case _ => "huh?"

9     }

10 

11  println(friend)


1 번째 라인에서는 프로그램의 command line argument 로부터 입력을 받는다. (def main(args: Array[String]) {} 생략)

그래서 얻은 String type 의 변수를 가지고 pattern matching을 하게 된다. 4번째 라인에서와 같이 "변수명 match" 로 시작하게 된다. 그리고 5 ~ 8 번째 줄처럼 "case" 를 사용하여 패턴 매칭을 하게 된다. case 바로 오른쪽에는 매칭되는 변수 오른쪽은 그 결과를 지정한다. "=>" 키워드는 왼쪽의 입력이면 오른쪽과 같은 결과를 낸다 라는 일종의 함수와 같다고 생각하면 편할 듯 싶다.


Scala 의 패턴 매칭은 Java 언어와 가장 큰 차이점은 Scala 는 match expression 이 값을 결과로 내 놓는다는 점이다.

다른 차이점은 Java 언어와 같이 fall through 가 없다는 점이다. Java 에서는 case 가 일치하면 "break" 키워드가 없으면 그 아래의 case 문이 실행이 되는데 반면, Scala 에서는 해당 패턴만 실행이 되고, 해당 사항이 없을 경우 어느 것도 실행 되지 않는다는 점이다.


다음에는 좀더 자세한 pattern matching 에 대한 글을 남겨볼까 한다.