Java 의 instanceof와 패턴 매칭(Pattern Matching)

CosmoNumb·2024년 10월 4일
0

java

목록 보기
23/24

패턴 매칭(Pattern Matching) for instanceof 라는 기능은 Java 16부터 도입된 새로운 문법입니다.

1. instanceof와 패턴 매칭(Pattern Matching)

기존의 instanceof 연산자는 객체가 특정 타입의 인스턴스인지 확인할 때 사용되었습니다. 하지만 기존 방식은 타입을 확인한 후 별도로 형변환(casting)을 해야 하는 불편함이 있었습니다.

기존 방식:

if (o instanceof Article) {
    Article article = (Article) o;  // 타입 캐스팅
    // 이제 article 변수를 사용 가능
}

위 코드에서는 oArticle의 인스턴스인지 확인한 후, 다시 명시적으로 타입 캐스팅을 해야 했습니다. 이 과정은 반복적이고 불필요한 코드가 될 수 있습니다.

2. 패턴 매칭 for instanceof

Java 16부터는 패턴 매칭을 이용하여 instanceof 연산자에서 타입을 확인함과 동시에 형변환까지 자동으로 처리할 수 있게 되었습니다. 즉, 타입을 검사한 후에 변수를 선언하고 사용할 수 있도록 한 것입니다.

새로운 방식:

if (o instanceof Article article) {
    // article 변수를 바로 사용 가능
}

여기서 o instanceof Article articleoArticle 타입의 인스턴스일 때, 자동으로 article이라는 변수형변환된 객체를 할당해 줍니다. 별도의 형변환 코드를 작성할 필요가 없어졌습니다.

3. 코드 설명

@Override
public boolean equals(Object o) {
    if (this == o) return true;  // 동일성 비교: 두 객체가 같은 메모리 주소를 가리키면 true 반환
    if (!(o instanceof Article article)) return false;  // o가 Article 타입이 아니면 false, 맞다면 article 변수로 사용
    return id == article.id;  // id 필드만을 기준으로 동등성 비교
}
  • this == o: 동일성(Identity) 비교로, 두 객체가 같은 메모리 주소를 가리키고 있으면 true를 반환합니다.
  • !(o instanceof Article article): oArticle의 인스턴스가 아니면 false를 반환하고, 맞다면 자동으로 형변환되어 article 변수에 할당됩니다.
  • return id == article.id;: id 필드만을 기준으로 동등성(Equality)을 비교합니다.

4. 장점

  • 간결한 코드: 패턴 매칭을 사용하면 형변환(casting)을 명시적으로 할 필요가 없고, 조건문 안에서 변수를 선언하여 바로 사용할 수 있기 때문에 코드가 간결해집니다.
  • 안전성: instanceof로 타입을 체크한 후 바로 해당 타입으로 형변환하기 때문에, 형변환 관련 오류가 줄어듭니다.

요약:

  • 패턴 매칭 for instanceofJava 16부터 도입된 기능으로, instanceof 연산자를 사용해 타입을 확인하면서 동시에 형변환까지 처리할 수 있습니다.
  • 코드를 간결하고 읽기 쉽게 만들어주며, 형변환(casting) 오류를 방지할 수 있습니다.

이 패턴 매칭 방식은 Java 16 이상에서만 사용 가능하니, 해당 버전을 사용하는지 확인해야 합니다.

0개의 댓글