스칼라에서도 전통적인 if-else 문을 지원하나, 더 간결하고 표현력이 좋으며 확장성이 높은 매치 표현식 match expressions 사용을 선호합니다. 자바의 switch-case 문과 비슷하게 동작하나, 0개 또는 단 하나의 패턴만 매칭할 수 있습니다.
//매치 표현식
표현식 match {
case 패턴매치 => 표현식
case _ => 표현식 //catch-all 패턴
}
와일드 카드를 사용하여 매치 표현식에서 catch-all 패턴을 사용할 수 있으며, 단 하나의 패턴만 매칭할 수 있어 자바처럼 여러 개의 패턴을 한 번에 매칭하는 형태로는 사용할 수 없습니다. 따라서 중간에 빠져 나오는 break문이 존재하지 않습니다.
매치 표현식에서는 값 바인딩을 사용하여 매치 표현식의 입력 패턴을 바인딩하여 case 블록의 본문에서 사용할 수 있습니다.
val x = 150
val status = x match {
case num => println(num) //값 바인딩 예제
}
위와 같이 값을 바인딩 할 수도 있으며, 와일드카드를 사용할 수도 있습니다. 하지만 와일드카드를 사용한 경우에는 화살표 오른쪽에서 매치 표현식의 입력 패턴을 사용할 수 없다는 점을 유의하여야 합니다.
값 바인딩 패턴에 if 문을 추가하여 매치 표현식에 조건부 로직을 추가할 수 있는데, 이를 패턴 가드 pattern guard 라고 합니다.
val x = 150
val status = x match {
case num if num > 100 => "Big"
case num if num > 0 => "Positive"
case _ => "Negative"
}
위 코드의 실행 결과는 status: String = Big 이 됩니다.
마찬가지로 입력 표현식의 타입을 매칭할 수 있는데, 스칼라는 다형적(polymorphic) 타입을 지원하므로 패턴 변수는 입력값을 다른 타입의 값으로 전환하여 사용할 수 있도록 합니다.
val y:Any = 15.0
val status = y match {
case num:Int => "Int"
case num:Double => "Double"
case _ => "Other"
}
위 코드의 실행 결과는 status: String = Double 이 됩니다.
매치 표현식에서 입력값이 어떤 패턴에도 매칭되지 않는다면 오류를 발생시킵니다.
이러한 특성은 후에 서술할 부분 함수 partial function 등에서 사용됩니다.
매치 표현식에서는 단순히 값 뿐만 아니라 정규표현식이나 컬렉션 등 다양한 입력값에 대한 패턴 매칭이 가능합니다.
스칼라에 익숙해지기 위해서는 if-else 구문보다 match 표현식을 사용하며 문법에 익숙해 지는 것을 권장합니다.
'Languages > Scala' 카테고리의 다른 글
[Scala Cats] 스칼라 타입 클래스 기초 (0) | 2020.11.13 |
---|---|
[스칼라] 함수 - 기초 (0) | 2020.07.21 |
[스칼라] 반복문 (0) | 2020.04.27 |
[스칼라] 데이터 타입, 표현식 (0) | 2020.03.18 |
[스칼라] 스칼라 개요 및 Mac에서 스칼라 개발환경 설정하기 (0) | 2020.03.16 |