약 2주 전쯤 업캐스팅과 다운캐스팅에 관한 글을 올리면서 instanceof 연산자에 관한 글을 올리겠다고 했었지만, 그동안 다른 내용으로 글을 적기도 했었고 정보처리기사 필기시험 준비를 하느라 미루고 미루다
드디어!! 오늘 시험치고와서(가채점결과 합격하였음^^) 적습니다.
사실 내내 맘속에 불편함으로 자리잡고 있었던 instanceof관한 포스팅에 대한 약속을 드디어 지키려합니다.
"instanceof는 무엇일까요??"
이 전의 글에서 업캐스팅과 다운캐스팅을 설명하면서 마지막에 instanceof를 언급했다.
업캐스팅과 다운캐스팅↓↓
2021/02/22 - [개발/JAVA] - JAVA 업캐스팅, 다운캐스팅
업캐스팅과 다운캐스팅을 사용하다보면 혼동된다. 이게 이놈인가 저게 저놈인가 하는 뭐 그런거??
물론 아직 그런 복잡한 프로그램을 만든적도 본적도 없긴하다.. 아직 나는 코린이니깐...ㅋㅋ
어쨌든 그럴때 instanceof 요놈으로 어떤 객체인지 구분해줄 수가 있다.
instanceof 연산자
- 형변환이 가능한지 여부를 알려주는 연산자이다.
- 가능하면 true, 불가능일 경우 false를 반환한다.
이렇게 말할 수도 있고,
그 객체가 어떤 클래스인지 어떤 클래스를 상속받았는지 확인할 수 있습니다.
instanceof는 어떤 타입의 대한 instanceof 연산의 결과가 true일 경우 검사한 타입으로 형변환이 가능하다는 뜻을 내포합니다.
무슨 말인지 나도 잘 모르겠으니 역시 예제를 통해 살펴보도록 하자.
사용방법은 간단합니다.
object instanceof type
object가 type이거나 type을 상속 받는 클래스일 경우 true를 반환하고 아닐경우 fasle를 반환합니다.
위 예제를 보면 Person3 클래스가 있고 Person3 클래스를 상속 받는 Student, Researcher클래스와 Researcher클래스를 상속받는 Professor 클래스가 있다.
InstanceOfEx클래스에서 static을 준 print 메서드를 만든다. print메서드는 Person3 p라는 객체 레퍼런스 변수를 받아서 사용한다.
그리고 if문을 통해 받아서 사용하는 p라는 object가 해당 클래스의 type일 경우 해당 글자들을 출력하라고 설정 해준다.
이렇게 print메서드에 각 클래스 객체를 집어 넣어서 출력 해주면
위와 같은 결과를 얻을 수 있는데 즉, Student 클래스는 Person과 Student로의 형변환이 가능하다.
true를 반영했다는 말인데 true를 따로 출력안했지만 해당 클래스에서 멤버를 받아서 사용 할수 있다는 것을 말합니다.
Professor 클래스의 경우 Researcher를 상속 받았지만 Researcher가 Person클래스를 상속받았기 때문에 Professor에서도 Person을 참조할수 있습니다.
instanceof는 보통 위처럼 조건문에 많이 사용되기 때문에 유용하게 사용할 수 있습니다.
'개발 > JAVA' 카테고리의 다른 글
[JAVA]컬렉션 HashMap(해쉬맵)의 사용 (0) | 2021.03.09 |
---|---|
[JAVA] 자바 컬렉션 프레임워크(collection framework) - List (0) | 2021.03.08 |
[JAVA]자바 Random 클래스를 활용한 로또 프로그램(중복제거, 순서정렬) (0) | 2021.03.05 |
[JAVA] 자바 객체배열을 사용한 전화번호 출력 프로그램2 (0) | 2021.03.03 |
[JAVA] 자바의추상클래스 (0) | 2021.03.01 |