Scala에서 이중(또는 다중) 패턴 매칭을 간단하게 작성하는 방법은 코드의 가독성을 높이고 중첩된 패턴 매칭의 복잡성을 줄여줍니다. 아래에 몇 가지 방법을 소개하겠습니다.

1. 중첩을 피하고 패턴을 한 줄로 작성하기

Scala에서는 패턴 매칭을 중첩하지 않고도 여러 레벨의 패턴을 한 번에 매칭할 수 있습니다.

예시:

case class Person(name: String, address: Address)
case class Address(city: String, zip: String)

// 중첩된 패턴 매칭
person match {
  case Person(name, address) =>
    address match {
      case Address(city, zip) => // 처리 로직
    }
}

// 간단하게 작성하기
person match {
  case Person(name, Address(city, zip)) => // 처리 로직
}

2. @ 기호를 사용하여 부분 패턴에 이름 부여하기

@ 기호를 사용하면 매칭된 부분을 이름으로 참조할 수 있어 중첩을 줄일 수 있습니다.

예시:

expr match {
  case UnOp("abs", e @ UnOp("abs", _)) => e
}

위 코드에서 e @ UnOp("abs", _)UnOp("abs", _)에 매칭되는 부분을 e로 이름지어 참조합니다.

3. 패턴 가드 사용하기

패턴 가드를 사용하면 추가적인 조건을 명시하여 중첩을 피할 수 있습니다.

예시:

list match {
  case head :: tail if head > 0 => // 처리 로직
}

4. 변수 바인딩 활용하기

변수 바인딩을 통해 패턴 매칭 결과를 변수에 할당하고 재사용할 수 있습니다.

예시:

tree match {
  case node @ Node(left, right) => // node를 사용하여 처리 로직
}

5. unapply 메서드와 추출자 사용하기

추출자를 사용하면 복잡한 패턴 매칭을 단순화할 수 있습니다.