Menu
Coddy logo textTech

패턴 매칭

Coddy Java 여정의 논리와 흐름 섹션에 포함된 레슨 — 59개 중 37번째.

Java의 패턴 매칭은 객체가 특정 타입인지 테스트하고 그로부터 구성 요소를 추출할 수 있게 합니다. 이는 타입 검사 및 캐스팅 작업을 단순화합니다.

instanceof와 함께 패턴 매칭을 사용하는 방법을 살펴보겠습니다:

Object obj = "Hello";
if (obj instanceof String str) {
   // str은 자동으로 String으로 캐스팅됩니다
   System.out.println(str.toUpperCase());
}

위의 코드를 실행한 후, 출력은 다음과 같습니다:

"HELLO"

switch 표현식에서도 패턴 매칭을 사용할 수 있습니다:

Object value = 42;
String result;
if (value instanceof Integer i) {
    result = "Number: " + i;
} else if (value instanceof String s) {
    result = "Text: " + s;
} else {
    result = "Unknown";
}

위 코드를 실행한 후, result에는 다음이 포함됩니다:

“Number: 42”

challenge icon

챌린지

쉬움

processValue라는 이름을 가진 메서드를 생성하세요. 하나의 인수를 받습니다:

  1. 다양한 타입일 수 있는 Object (value)

이 메서드는 instanceof를 사용한 패턴 매칭을 통해 값을 처리하여 다음 규칙에 따라 문자열을 반환해야 합니다:

  • Integer인 경우: "Number: " 다음에 값의 두 배를 반환
  • String인 경우: "Text: " 다음에 대문자로 변환된 값을 반환
  • Boolean인 경우: "Boolean: " 다음에 반대 값 (true는 false가 되고 그 반대도 마찬가지)을 반환
  • 기타 모든 타입: "Unknown"을 반환

치트 시트

Java의 패턴 매칭은 instanceof를 사용하여 객체가 특정 타입인지 테스트하고 그로부터 구성 요소를 추출할 수 있게 합니다:

Object obj = "Hello";
if (obj instanceof String str) {
   // str is automatically cast to String
   System.out.println(str.toUpperCase());
}

여러 패턴 매칭 검사를 체인으로 연결할 수 있습니다:

Object value = 42;
String result;
if (value instanceof Integer i) {
    result = "Number: " + i;
} else if (value instanceof String s) {
    result = "Text: " + s;
} else {
    result = "Unknown";
}

직접 해보기

import java.util.Scanner;

public class Main {
    public static String processValue(Object value) {
        // TODO: instanceof를 사용한 패턴 매칭으로 값을 처리하세요
        // Integer인 경우: return "Number: " + (value * 2)
        // String인 경우: return "Text: " + value.toUpperCase()
        // Boolean인 경우: return "Boolean: " + (!value)
        // 그 외 모든 타입의 경우: return "Unknown"
        
    }
    
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String type = scanner.nextLine();
        String inputValue = scanner.nextLine();
        
        Object value = switch(type) {
            case "Integer" -> Integer.parseInt(inputValue);
            case "String" -> inputValue;
            case "Boolean" -> Boolean.parseBoolean(inputValue);
            default -> inputValue;
        };
        
        System.out.println(processValue(value));
    }
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

논리와 흐름의 모든 레슨