▸JAVA/기본 문법

객체의 등가성(객체 비교)_instanceof 타입 비교 [2/4]

코데방 2019. 12. 10.
728x90

[ instanceof ]

  • 해당 객체의 타입 판별
  • 상속받은 부모 클래스도 같은 객체 타입으로 판단

 

instanceof는 좌측의 객체가 우측의 타입이 맞는지 확인해 줍니다. 자식클래스는 부모클래스의 타입이기 때문에 "자식클래스 객체 instanceof 부모클래스 타입"은 true가 됩니다. 하지만 당연히 반대는 성립하지 않습니다. 기준이 되는 좌측은 인스턴스가, 우측은 인스턴스가 아닌 타입이 명시돼야 합니다.

참고로 조건문에서 instanceof를 사용해 타입을 판별한 후, 해당 클래스의 메소드를 따로 호출하는 것은 객체지향 관점에서는 그리 좋지 못한 방식입니다. 그것보다는 오버라이딩을 사용해 같은 메소드를 가진 뒤, 객체만 호출하고 오버라이딩된 메소드를 실행하는 것이 보다 효율적입니다.

package study.first;

public class Main {

	public static void main(String[] args) {

		Parent p = null;
		Sub1 s1 = new Sub1();
		Sub2 s2 = new Sub2();

		System.out.println(s1 instanceof Sub1); // true
		System.out.println(s2 instanceof Parent); // true
		System.out.println(p instanceof Sub1); // false

		p = s1; // 부모 클래스에 s1을 오버라이딩 시킬 경우
		System.out.println(p instanceof Sub1); // true

		/* 오버라이딩 된 메소드 사용 */
		p = s1;
		p.print(); // "자식클래스1" 출력
		p = s2;
		p.print(); // "자식클래스2" 출력
	}

}

/* 인터페이스 */
interface Parent {

	public void print();

}

/* 자식 클래스 */
class Sub1 implements Parent {

	public void print() {

		System.out.println("자식클래스1");

	}
}

/* 자식 클래스 */
class Sub2 implements Parent {

	public void print() {

		System.out.println("자식클래스2");

	}
}

 

728x90

댓글

💲 추천 글