MENU

instanceof로 Java 변수의 타입 확인하기

목차

변수의 유형 확인

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을(를) 확인했습니다!
목차