[4단원]instanceof 연산자

Instanceof

  • 자바에서 특정 객체가 어떤 클래스 또는 인터페이스의 인스턴스인지 확인하는 연산자
  • 다형성을 관리할 때 용이하다.

동작 원리

System.out.println(동물객체 instanceof 동물);  // 결과는 true
  • instanceof 연산자는 동물객체동물 클래스의 인스턴스인지 판별한다.

객체지향 설계 5대 원칙과의 관계

  • 객체지향 설계 5원칙 중 하나의 LSP ( 리스코프 치환 원칙 ) 을 어길 수 있다.
  • LSP
    • 슈퍼 클래스와 서브 클래스 사이에 성립해야하는 원칙
    • 서브 클래스는 언제나 슈퍼 클래스로 대체할 수 있어야 한다.
  • 하지만, instanceof 로 분기를 처리해버리는 경우 해당 원칙을 어기는 경우가 생길 수 있다.

예제

  • 출력 결과는 모두 true 이다.
  • 이 예제도 모두 true 를 출력한다.

주의

  • instanceof 연산자가 나타나면, 그것이 정말 필요한 경우인지, 아니면 객체지향적 설계를 해치는 지를 잘 고려해야함
  • 냄새 나는 코드 ? 를 피하기 위해서 사용을 신중해야함. ⇒ 냄새 나는 코드 는 5장에서 다룰 예정이다.

인터페이스의 instanceof

  • instanceof 는 클래스 뿐만 아니라 인터페이스에서도 사용이 가능함
interface 날수있는 {
}
class 박쥐 implements 날수있는 {
}
class 참새 implements 날수있는 {
}
날수있는 박쥐객체 = new 박쥐 ();
날수있는 참새객체 = new 참새();
  • 뭐야 인터페이스 타입으로도 생성자를 호출할 수 있는 건 첨 알았다..
System.out.println(박쥐객체 instanceof 날수있는);
System.out.println(박쥐객체 instanceof 박쥐);
System.out.println(참새객체 instanceof 날수있는);
System.out.println(참새객체 instanceof 참새);
  • 모두 true 를 반환할 수 있음.


Uploaded by N2T