프로그래밍/Scala

[Scala] 와일드카드, 패턴가드 및 반복자가드 매칭

Dibrary 2022. 8. 31. 09:50
반응형

안녕하세요 Dibrary입니다.

이번에는 여러가지 매치되는 것만 걸러내는 방법을 배워보겠습니다. 책에는 단어가 '가드'라고 나오는데, 처음에 이게 왜 가드라고 하는걸까~ 싶었는데, 다음 단계로 진행하지 못하게 막는 의미로 본다면 '가드'를 쓸 수 있는거 같네요.

조건에 맞게 걸러내는 방법이 몇 가지 있는데, 그 중에 와일드카드 패턴매칭은 모든 입력 패턴을 매치시킴으로써 scala.MatchError가 발생하는 것을 방지합니다.

먼저 OK라는 문자를 가진 message 변수를 선언해보고 status에서 match를 해 보겠습니다.

OK는 200에 매치 되므로 결과는 200이 나왔습니다. 만일 다른 값이라면 어떨까요?

예상한 대로 -1로 빠집니다. 결국 OK를 제외한 그 어떤 경우라도 other로 빠져서 -1이 됩니다.

어 근데 $other가 정상적으로 표현되지 않네요. 제가 출력 코드에 s를 빼먹어서 그렇습니다. 하핫...

 


패턴 가드는 값 바인딩 패턴에 if 표현식을 추가해 match 표현식에 조건부 로직을 섞어 쓸 수 있게 한 것입니다.

무슨말이냐면, 위에서 [ case "변수" => 결과 ] 이렇게 표현한 "변수" 부분에 조건식이 들어간 꼴이라는 것이죠. 

물론, 굳이 XX 방법 이렇게 나눌 필요 없이, "이런 방법도 가능하구나~" 하고 넘어가시면 됩니다.

temp라는 변수가 null이 아니라면 <= 가 나타나는 출력을 하고, 그게 아니라면 "Error" 문구를 내보내는 코드 입니다.

case s 뒤에 if가 쓰이고 조건식이 들어갈 수 있음을 잘 보시면 됩니다.

 

for문에도 매치식을 적용해 볼까요? 먼저 1부터 7까지 순회해서 출력하는 for문은 아래와 같습니다.

 

이 for문에 2로 나누어서 떨어지면 Sucess, 나누어 떨어지지 않으면 Fail이 출력되는 코드는 아래와 같습니다.
그저 for문을 돌면서 변수값이 할당된 x에 매치식이 적용되면서 출력이 나타나는 것이죠.

 


마지막으로 반복자가드 입니다. 반복자 가드는 필터라고도 불리며, 반복문에 if 표현식이 추가된 꼴입니다. 즉, if 표현식이 True인 경우에만 해당 값을 담기 때문에 조건에 맞는 값만 담고자 할 때 유용합니다. (파이썬에서 리스트 컴프리헨션과 비슷하죠)

아래 코드는 1부터 20까지의 숫자 중에 3으로 나누어서 떨어지는 값만 threes라는 변수에 담는 것입니다.

굉장히 간단하죠?

 

그럼 숫자 말고 문자로 반복자가드를 사용해보겠습니다.

먼저 주어진 temp라는 변수를 콤마를 기준으로 분류한 후에, 해당 각 값들이 null이 아니고 길이를 가지고 있다면 출력하라는 코드 입니다.

하나의  for문 안에 순서대로 '조건문'을 여러 개 넣을 수 있다는 점에서 파이썬과는 꽤나 다르다는 생각이 듭니다.

728x90
반응형

'프로그래밍 > Scala' 카테고리의 다른 글

[Scala] 중첩함수, 매개변수 사용하기  (0) 2022.09.06
[Scala] 재귀함수  (0) 2022.09.01
[Scala] 표현식 과 조건문  (0) 2022.06.10
[Scala] 데이터 및 변수 타입  (0) 2022.05.12
[Scala] Windows에 Scala 설치하기  (0) 2022.05.07