[JDK 16] Pattern Matching for instanceof
2022. 5. 6. 14:36ㆍJava/Basic
반응형
JDK 16 부터 instanceof의 패턴 매칭을 지원합니다.
패턴 매칭은 타입을 강제로 설정해줌으로써 캐스팅을 잘못하여 발생되는 에러를 방지할 수 있습니다.
instanceof 테스트를 하기 위해 먼저 아래와 같은 클래스를 선언했습니다.
@Getter abstract static class Figure { protected String name; } @Getter static class Circle extends Figure { public Circle() { this.name = "원"; } } @Getter static class Square extends Figure { private final int line; public Square() { this.name = "사각형"; this.line = 4; } public Square(String name) { this(); this.name = name; } }
JDK 16 이전 버전에서 instanceof를 아래와 같이 사용하여, if 블럭 내에서 Cast 후 변수를 이용했었다면
if(figure instanceof Square) { Square square = (Square) figure; ... }
JDK 16 이후 버전 부터는 아래와 같이 if 문 내에서 바로 캐스팅을 할 수 있습니다.
if(figure instanceof Square square) { ... }
예제 1. Pattern Matching Test
먼저, instanceof 테스트를 위해 클래스를 정의합니다.
Square타입일 경우, 이름과 line 수
를 출력하고, Circle타입일 경우 이름
만 출력합니다.
instanceof 가 쓰여진 if문 내에서 패턴매칭을 이용하여 바로 캐스팅합니다.
이름: 사각형, line 수: 4 이름: 원 이름: 네모, line 수: 4
예제 2. && 연산자와 함께 활용
if 구문 내에서 instanceof 패턴매칭 할때, && 연산자는 사용할 수 있지만 || 연산자는 사용할 수 없습니다.
앞선 구문이 참이 아닐 경우에는 패턴매칭으로 cast될 수 없기 때문에 or 연산자의 경우 컴파일 에러가 발생됩니다.
또 instanceof 로 패턴매칭될 경우 && 연산자를 이용하여 객체 내의 메서드를 활용할 수 있습니다.
if(number instanceof Double d && d.floatValue() > 10) { }
instanceof 패턴매칭과 && 논리연산자를 함께 활용한 예제입니다.
++ References
728x90
반응형
'Java > Basic' 카테고리의 다른 글
[JCA] Cipher 클래스를 이용한 AES 대칭키 암복호화 (0) | 2022.07.22 |
---|---|
[JDK 14] Switch 문에서 arrow operator 이용하기 (0) | 2022.05.06 |
[JDK 9] Immutable Collection 생성하기 (0) | 2022.05.06 |
[Java] Gson을 이용한 Json Serialization & Deserialization (2) | 2022.04.29 |
[Java] long에서 int로 안전하게 형변환하기 (0) | 2020.05.04 |