instanceof 패턴 매칭
타입을 검사하면서 변수를 바인딩합니다
instanceof 패턴 매칭은(는) CoddyKit의 무료 Java Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Java Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Java Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
형 검사 패턴 매칭
이전에는 instanceof를 사용하려면 먼저 테스트한 다음 형 변환을 해야 했습니다. 패턴 매칭은 테스트와 형 변환을 한 단계로 결합하고, 테스트가 성공하면 타입이 지정된 변수를 바인딩합니다.
기존의 반복 코드
기존 코드는 타입을 확인한 다음 새 변수로 형 변환합니다. 이런 코드는 반복적이고 실수하기 쉽습니다.
public class Main {
public static void main(String[] args) {
Object obj = "hello";
if (obj instanceof String) {
String s = (String) obj;
System.out.println(s.length());
}
}
}새로운 형식
타입 패턴은 변수를 인라인으로 선언합니다. 예를 들어 if (obj instanceof String s)와 같이 작성합니다. 조건이 참이면 s는 이미 형 변환된 값입니다.
public class Main {
public static void main(String[] args) {
Object obj = "hello";
if (obj instanceof String s) {
System.out.println(s.length());
}
}
}바인딩 변수
변수 s를 패턴 변수라고 합니다. 컴파일러가 패턴의 일치 여부를 증명할 수 있는 모든 곳에서 이 변수의 범위를 사용할 수 있으므로 코드가 더 짧고 안전해집니다.
조건에서 사용하기
같은 if 조건 안에서 && 뒤에 패턴 변수를 사용할 수 있습니다. 해당 분기에서는 일치가 보장되기 때문입니다.
public class Main {
public static void main(String[] args) {
Object obj = "developer";
if (obj instanceof String s && s.length() > 5) {
System.out.println("Long string: " + s);
}
}
}부정과 흐름에 따른 범위
부정을 사용하면 범위가 지능적으로 바뀝니다. if (!(obj instanceof String s)) return; 뒤에서는 일치할 때만 코드가 계속 실행되므로 메서드의 나머지 부분에서 변수 s를 사용할 수 있습니다.
public class Main {
static int safeLength(Object obj) {
if (!(obj instanceof String s)) {
return -1;
}
return s.length();
}
public static void main(String[] args) {
System.out.println(safeLength("abc"));
System.out.println(safeLength(42));
}
}equals와 형 변환 대체하기
대표적인 사용 예는 깔끔한 equals 재정의입니다. 한 줄에서 타입을 테스트하고 변수를 바인딩한 다음 필드를 비교할 수 있습니다.
public class Main {
static final class Point {
final int x, y;
Point(int x, int y) { this.x = x; this.y = y; }
public boolean equals(Object o) {
return o instanceof Point p && p.x == x && p.y == y;
}
public int hashCode() { return x * 31 + y; }
}
public static void main(String[] args) {
System.out.println(new Point(1, 2).equals(new Point(1, 2)));
System.out.println(new Point(1, 2).equals(new Point(3, 4)));
}
}혼합 타입 처리
패턴을 사용하는 else if 분기를 연결하면 여러 가능한 형식을 깔끔하게 분기 처리할 수 있습니다.
public class Main {
static String describe(Object obj) {
if (obj instanceof Integer i) {
return "int " + (i * 2);
} else if (obj instanceof String s) {
return "string of length " + s.length();
} else {
return "unknown";
}
}
public static void main(String[] args) {
System.out.println(describe(21));
System.out.println(describe("hello"));
System.out.println(describe(3.14));
}
}널 값은 절대 일치하지 않음
instanceof 패턴은 기존 연산자와 마찬가지로 null일 때 false입니다. 따라서 패턴 변수는 절대 null에 바인딩되지 않으며, 흔히 발생하는 널 포인터 예외의 원인을 제거할 수 있습니다.
public class Main {
public static void main(String[] args) {
Object obj = null;
if (obj instanceof String s) {
System.out.println("matched: " + s);
} else {
System.out.println("null or not a String");
}
}
}더 깔끔하고 안전한 코드
패턴 매칭은 불필요한 형 변환을 없애고, 변수를 잘못 사용할 수 없도록 범위를 좁히며, 영어 문장처럼 자연스럽게 읽힙니다. 현대적인 Java에서 권장되는 방식입니다.
하나로 합쳐 보기
패턴을 사용해 서로 다른 입력값의 형식을 지정하는 간단한 분기 처리기입니다.
public class Main {
static String format(Object o) {
if (o instanceof Double d) return String.format("%.1f", d);
if (o instanceof Integer i) return Integer.toString(i);
if (o instanceof String s && !s.isBlank()) return s.trim();
return "n/a";
}
public static void main(String[] args) {
System.out.println(format(3.14159));
System.out.println(format(99));
System.out.println(format(" spaced "));
System.out.println(format(null));
}
}빠른 확인
instanceof 패턴에 대한 이해도를 확인해 보세요.
복습
instanceof를 위한 패턴 매칭을 배웠습니다.
- 형식 검사와 형 변환을 하나의 표현식으로 합칩니다.
- 패턴 변수의 범위는 일치가 입증된 부분으로 제한됩니다.
- 패턴은 null에 대해 false이므로 널 포인터 예외를 방지합니다.
- equals 재정의와 형식별 분기 처리를 단순화합니다.
자주 묻는 질문
“instanceof 패턴 매칭” 강의는 무료인가요?
네 — “instanceof 패턴 매칭” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Java Academy 강의 전체를 잠금 해제할 수 있습니다. Java Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“instanceof 패턴 매칭”에서 뭘 배우나요?
타입을 검사하면서 변수를 바인딩합니다 브라우저에서 직접 실행하는 실습 코드로 Java Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Java Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Java Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.
“instanceof 패턴 매칭” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Java Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Java Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- instanceof 패턴 매칭
- 레코드 패턴
- 중첩 레코드 패턴
- switch의 패턴