더북(TheBook)

12.6.2 case 레이블에서 생성한 패턴 변수의 사용 범위

만약 case의 본문에서 지역 변수를 직접 선언했다면 해당 변수의 사용 범위는 다른 case를 모두 포함하는 switch 문 전체가 된다. 이는 어찌 보면 불행한 사실이다(물론 개인적인 의견이다). 하지만 case 레이블에서 생성한 변수는 그렇지가 않다. 이 변수의 유효한 사용 범위는 해당 케이스 레이블의 본문으로 한정된다. 이는 패턴 내에서 선언한 패턴 변수, 가드 절 내에서 선언한 패턴 변수, 가드 절 내에서 선언한 out 변수(14.2절에서 살펴볼 것이다.)에 동일하게 적용된다.

대부분의 경우 이것이 우리가 원하는 동작 방식이며, 이 덕분에 Noda Time의 예에서 살펴본 것처럼 유사한 상황을 처리하는 여러 개의 case 문에서 동일한 패턴 변수를 반복해 사용할 수 있다. 하지만 이런 방식에도 단점이 존재한다. 일반적인 switch 문과 마찬가지로, 패턴을 사용할 때도 여러 개의 case 문에 걸쳐 하나의 본문을 사용할 수 있는데, 이 경우에는 패턴 변수의 이름을 각기 달리해야 한다(동일한 이름 공간을 사용하기 때문이다). 하지만 이처럼 이름을 달리한다 하더라도 case 본문 내에서는 해당 변수에 전혀 값을 할당할 수가 없다. 왜냐하면 여러 개의 레이블 중 어느 레이블이 매칭되었는지 알려줄 수 없기 때문이다. 이 경우에도 case 레이블에서 패턴 변수를 생성하는 것은 여전히 유용하지만, 대부분의 경우 가드 절에서 사용되는 정도일 것이다.

예를 들어 object 입력에 대해 패턴을 매칭시키는 예를 생각해 보자. 입력값이 숫자 타입이고 특정 범위 내에 포함되어 있는지 확인한다고 해보자. 이 경우 각각의 숫자 타입별로 타입 패턴과 가드 절을 사용할 수 있을 것이다. 다음 예는 intlong 두 가지 타입만을 다루지만, 더 많은 타입을 다루도록 확장할 수도 있을 것이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.