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
'자바 > 스프링입문객체지향' 카테고리의 다른 글
[4단원]Package 키워드 (0) | 2023.08.31 |
---|---|
[4단원]interface 키워드와 implements 키워드 (0) | 2023.08.31 |
[4단원]클래스 생성 시의 실행 블록, static 블록 (0) | 2023.08.28 |
[4단원]final 키워드 (0) | 2023.08.28 |
[4단원]생성자 (0) | 2023.08.28 |