MENU

Java 変数の型を instanceof で確認する

목차

변수의 유형 확인

Java 에서 변수의 형태를 확인하는 샘플 프로그램을 소개합니다.

Java 는 형태를 명시적으로 선언하는 정적 형태 붙이 언어이므로, 거기까지 형태를 확인할 기회는 없습니다. 그러나 상속 개체를 사용하는 경우 형식 확인이 필요할 수 있습니다.

Java에서 유형을 확인하려면 instanceof 연산자를 사용해, 다음과 같이 클래스나 인터페이스에 대해서 if문등으로 평가할 수 있습니다.

변수 instanceof クラス

변수 instanceof インターフェース

instanceof 오른쪽에 클래스 이름 또는 인터페이스 이름을 지정할 수 있습니다.instanceof 의 반환값은 boolean 이고, true 라면 변수는 지정한 클래스나 인터페이스, 라고 하게 됩니다.

Chat&Messenger 는 비즈니스 채팅, 웹 회의, 파일 공유, 일정 관리, 문서 관리, 회의실 예약, 근태 관리를 사용하기 쉽게 통합한 그룹웨어입니다. 기업용 보안도 만전으로,무료로 사용할 수 있습니다!

샘플 프로그램

우선 가장 간단한 패턴. 변수 i가 Integer이면 true 그렇지 않으면 false를 반환합니다.

샘플 코드

public static void integerSample() {
    Integer i = 100;
    boolean result = i instanceof Integer;
    System.out.println(result);
}

출력 결과

true

変数 i は Integer なので、結果は true になります。しかし、これでは当たり前すぎて instanceof がなんのためにあるか分かないので、もう少し複雑にします。

instanceof の効果的な使い方

instanceof の効果的な使い方の一つに、その変数がどの子クラスなのかを判定する場合があります。

샘플 코드

샘플 코드에서는 동물 클래스 Animal 과, 동물 클래스를 계승한 Dog 클래스, Cat 클래스를 작성해, 인스턴스를 작성한 후에, play 메소드내에서 변수를 instanceof 로 판정해 콘솔 출력을 분기하고 있습니다.

class Animal {} 
class Dog extends Animal {}
class Cat extends Animal {}

public class Main {
    public static void main(String[] args) {
        instanceofSample();
    }
    
    static void instanceofSample() {
        Animal dog = new Dog();
        play(dog);
        Animal cat = new Cat();
        play(cat);
    }
    
    static void play(Animal animal) {
        if (animal instanceof Dog) {
            System.out.println("お散歩する");
        } else {
            System.out.println("猫じゃらしで遊ぶ");
        }
    }
}

출력 결과

お散歩する
猫じゃらしで遊ぶ

play 메소드 내에서는 인수에 건네받은 animal 가 dog인지 cat인지 모르는 것이 포인트입니다.

instanceof 그럼 슈퍼 클래스(Animal) 안에 들어 있는 서브 클래스의 인스턴스(Dog 또는 Cat)와도 체크할 수 있으므로, 이런 사용법도 할 수 있네요.

특정 인터페이스가 구현되었는지 확인

instanceof の対象となる変数に、ある特定のインターフェースが実装されているか確認できます。例えばこのような使い方ができます。

샘플 코드

次のサンプルコードでは、佐藤さん、鈴木さんクラスを作成し、鈴木さんだけが車を持っている想定で、インターフェース Car を implements しています。goShopping() メソッドは買い物に行く処理を仮定していますが、Car を implements しているか、instanceof で判定してコンソール出力を分岐しています。

interface Car {}
class Sato {}
class Suzuki implements Car {}

public class Main {
    public static void main(String[] args) throws Exception {
        instanceofSample();
    }
    
    static void instanceofSample() {
        Sato sato = new Sato();
        goShopping(sato);

        Suzuki suzuki = new Suzuki();
        goShopping(suzuki);
    }
    
    static void goShopping(Object human) {
        if (human instanceof Car) {
            System.out.println("車で行く");
        } else {
            System.out.println("歩いて行く");
        }
    }
}

출력 결과:

歩いて行く
車で行く

Car 가 구현되고 있는 경우와 그렇지 않은 경우로, 처리가 분기하고 있는 것을 알 수 있습니다.

  • URL을(를) 확인했습니다!
목차