IMCAT.DEV
로그인 가입
Scala 입문 문법

Scala 패턴 매칭 (Pattern Matching)

Scala 패턴 매칭 (Pattern Matching) — 초급

패턴 매칭 (Pattern Matching)

1. 도입 (왜 배워야 하는가)

패턴 매칭은 Scala에서 매우 중요한 기능으로, 프로그래밍에서 값을 분석하고 처리하는 데 강력한 도구입니다. 실무에서는 데이터의 형태에 따라 다른 처리를 해야 할 경우가 많습니다. 예를 들어, 쇼핑몰에서 장바구니에 담긴 물품의 종류에 따라 다른 할인 정책을 적용해야 할 때 패턴 매칭이 유용합니다. 만약 패턴 매칭을 모른다면, 복잡한 조건문(if-else)을 사용해야 하고, 이는 코드의 가독성을 떨어뜨리며 유지보수를 어렵게 만듭니다.

2. 핵심 개념 설명

패턴 매칭은 특정 값이 어떤 형태인지 검사하고, 그에 따른 처리를 수행하는 기능입니다. 이를 통해 복잡한 조건문을 간결하게 표현할 수 있습니다.

실생활 비유

패턴 매칭은 다양한 종류의 음식을 주문할 때와 비슷합니다. 예를 들어, 피자를 주문할 때 "치즈 피자", "페퍼로니 피자", "야채 피자"와 같이 서로 다른 종류의 피자를 선택할 수 있습니다. 각 피자에 대해 다른 가격이나 추가 토핑을 적용할 수 있는 구조가 패턴 매칭입니다.

관련 용어 정리

용어설명
패턴 매칭특정 값의 형태에 따라 분기하는 기능
케이스(case)매칭할 조건을 정의하는 부분
와일드카드(_)모든 경우를 포함하는 패턴

3. 기본 코드 예제

가장 기본적인 패턴 매칭 사용법을 아래에 보여드리겠습니다.

val number = 2

number match {
  case 1 => println("하나는 1입니다.")
  case 2 => println("두 번째 숫자는 2입니다.")
  case _ => println("다른 숫자입니다.")
}
  • 실행 결과: 두 번째 숫자는 2입니다.
  • 코드 한 줄씩 동작 설명

    1. val number = 2: 변수 number에 2를 할당합니다.
    2. number match {: number를 패턴 매칭합니다.
    3. case 1 => println("하나는 1입니다."): number가 1이면 이 코드를 실행합니다.
    4. case 2 => println("두 번째 숫자는 2입니다."): number가 2이면 이 코드를 실행합니다.
    5. case _ => println("다른 숫자입니다."): 위의 조건에 해당하지 않으면 이 코드를 실행합니다.
    6. 4. 실전 활용 예제

      예제 1: 쇼핑몰 장바구니에서 물품 분류하기

      쇼핑몰에서 장바구니에 담긴 물품의 종류에 따라 다른 처리를 할 수 있습니다.

      val item = "과일"
      
      item match {
        case "과일" => println("과일 할인 적용")
        case "채소" => println("채소 할인 적용")
        case "유제품" => println("유제품 할인 적용")
        case _ => println("적용할 할인 없음")
      }
    7. 이 예제는 장바구니에 담긴 물품이 과일일 때 할인 정책을 적용하는 코드입니다.
    8. 예제 2: 사용자 입력 처리

      사용자가 입력한 값에 따라 서로 다른 메시지를 출력할 수 있습니다.

      val userInput = "안녕하세요"
      
      userInput match {
        case "안녕하세요" => println("안녕하세요! 반갑습니다.")
        case "잘가요" => println("안녕히 가세요!")
        case _ => println("알 수 없는 입력입니다.")
      }
    9. 사용자가 "안녕하세요"를 입력하면 친절한 인사를 출력합니다.
    10. 5. 흔한 실수와 주의사항

      실수 1: 케이스의 순서

      조건문을 잘못된 순서로 작성하여 원하는 결과가 나오지 않을 수 있습니다.

      잘못된 코드

      val value = 1
      
      value match {
        case _ => println("기본 케이스")
        case 1 => println("하나는 1입니다.") // 이 줄은 실행되지 않음
      }

      올바른 코드

      val value = 1
      
      value match {
        case 1 => println("하나는 1입니다.")
        case _ => println("기본 케이스")
      }

      실수 2: 와일드카드(_)의 남용

      와일드카드를 너무 많이 사용하면 코드의 의도를 파악하기 어려워질 수 있습니다.

      잘못된 코드

      val number = 5
      
      number match {
        case _ => println("어떤 숫자이든지 처리")
      }

      올바른 코드

      val number = 5
      
      number match {
        case 1 => println("하나는 1입니다.")
        case 2 => println("두 번째 숫자는 2입니다.")
        case _ => println("다른 숫자입니다.")
      }

      6. 정리

    11. 패턴 매칭은 조건문을 간결하게 표현할 수 있는 강력한 도구입니다.
    12. 다양한 형태의 데이터를 처리할 수 있는 유연성을 제공합니다.
    13. 특정 값에 따라 분기 처리를 할 때 유용합니다.
    14. 다음에 학습하면 좋은 주제는 고급 패턴 매칭, 패턴 가드입니다.