티스토리 뷰

개요


scala는 특정 패턴을 검사할 수 있는 패턴 매칭 문법을 제공한다. 패턴 매칭이란 어떤 변수 또는 조건식이 만족하는 경우의 수에 따라 다르게 동작하도록 하는 것을 말한다.

match는 C++의 switch와 비슷하지만 훨씬 강력한 기능을 제공하며 이를 통해 더 추상적고 간결한 코드를 작성할 수 있다.






match


기본적인 match문법의 구조는 다음과 같다.


[matching object] match { case [case] => [do code] case [case 2] => [do code] ... }


scala는 위 문장에서 match object에 대해 일치하는 case를 순서대로 검사하다가 조건에 맞는 case를 만나면 해당 코드를 실행하고 match문을 탈출한다.

case로 검사할 수 있는 방법이 무궁무진하다는 것이 match문의 최대 장점이라고 할 수 있다. 기본적으로 특정 값이나 조건식으로 검사할 수 있다.


def func(v: Int) = {
v match {
case 1 => println("value is 1")
case (v%3==0) => println("value is multiple of 3")
}
}

func(6) // >value is multiple of 3


case에 자료형을 넣어서 검사하려는 값이 어떤 자료형인지도 검사할 수 있다. 이 때 검사할 자료형은 Any여야 한다.


def printSize(v: Any) = {
v match {
case i: Int => println(i)
case s: String => println(s.length())
case l: List[Any] => println(l.length)
}
}                                         //> printSize: (v: Any)Unit

printSize(5)                              //> 5
printSize("lannister")                    //> 9
printSize(List(1,2,3))                    //> 3


collection을 검사할 경우 collection을 필요한 특징에 맞게 검사하여 동작하게 할 수 있다.


def func(c: List[Any]) = {
c match {
case List(1, 2, a) => println("start with 1, 2")
case List(a, 3, c) => println("middle index is 3")
}
}                                         //> func: (c: List[Any])Unit

func(List(1, 2, 3))                       //> start with 1, 2
func(List(6, 3, 2))                       //> middle index is 3






마치며


패턴매칭을 사용해서 자료형에 따라 달라지는 표현들을 하나의 표현으로 묶어서 표현할 수도 있고, collection에서 특징을 가지는 collection들을 처리하는 코드를 작성할 수도 있다. 더 깊게 공부하면 할 수록 가장 자주 사용하게 될 문법인 것 같다.



'Programming > Language' 카테고리의 다른 글

C# Tutorial | 기본 문법  (0) 2018.10.29
Python Tutorial | 기본 문법  (0) 2018.09.17
스칼라(scala) - 함수  (0) 2017.09.12
스칼라(scala) - 변수(var) 또는 값(val)  (0) 2017.09.11
스칼라(scala) - List  (0) 2017.09.10
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함