강잇
강이의 개발블로그
강잇
전체 방문자
오늘
어제
  • 분류 전체보기 (102)
    • Langauge (32)
      • Java-basic (29)
      • Java (3)
    • SpringBoot (7)
    • Algorithm (5)
      • BAEKJOON (5)
    • WEB (7)
      • HTML & CSS (7)
    • DB (1)
      • MySQL (1)
    • OS (17)
      • Mac (2)
      • Linux (4)
      • Terminal Command (11)
    • Computer Science (7)
      • Hard ware (1)
      • Database (1)
      • Data structure (2)
      • Algorithm (2)
      • Network (1)
    • Git (5)
      • 개념 (1)
      • 활용 (1)
      • Trouble Shooting (2)
    • ETC. (13)
      • Install (6)
      • IntelliJ (1)
      • Eclipse (2)
      • Error (3)
      • Tip (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 자바
  • 알고리즘 공부
  • 메소드
  • til
  • CSS 속성
  • 백준
  • 메서드
  • CSS 박스 크기 설정

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
강잇
Langauge/Java-basic

[Java] instanceof : 캐스팅 가능 여부 확인

[Java] instanceof : 캐스팅 가능 여부 확인
Langauge/Java-basic

[Java] instanceof : 캐스팅 가능 여부 확인

2022. 7. 30. 23:32

instanceof

  • 캐스팅의 가능 여부를 판단하기 위해서는 '클래스 사이의 상속 관계', '어떤 생성자로 인스턴스를 생성했는가?'를 판단해야 한다.
  • 프로젝트의 규모가 커지고, 클래스가 많아지면 이러한 조건을 매순간 판단하는 것이 어려워진다.
  • 이를 해결하기 위해 Java에서는 캐스팅 가능 여부를 boolean 타입으로 반환해주는 instanceof라는 연산자를 제공한다.
  • 소스 코드가 길어져 일일이 생성 객체의 타입을 확인하기 어려운 상황에서 에러를 최소화하는 유용한 수단이 될 수 있다.
    -> 캐스팅 가능 여부를 확인하고, 가능한 때만 캐스팅을 수행해 실행 예외로 프로그램이 종료되는 것을 방지할 수 있다.
참조 변수 instanceof 타입명

예시

public class Test {
    public static void main(String[] args) {
        Animal animal1 = new Animal();
        Animal cat1 = new Cat();
        Cat cat2 = new Cat();

        System.out.println("캐스팅 가능 여부");
        System.out.println(animal1 instanceof Cat); // animal1이 Cat으로 형변환 가능?
        System.out.println(cat1 instanceof Cat); // cat1가 Cat으로 형변환 가능?
        System.out.println(cat2 instanceof Animal); // cat2가 Cat으로 형변환 가능?

        Cat cat3 = null;
        if (cat1 instanceof Cat) { // Animal cat1이 Cat으로 캐스팅 가능?
            cat3 = (Cat)cat1; // 가능하면 형변환
            cat3.grooming(); // Cat의 기능 그루밍() 호출
        } else { // 다운 캐스팅을 할 수 없으면 오류 메세지 출력
            System.out.println("Animal cat1은 Cat으로 캐스팅할 수 없습니다.");
        }
        Cat cat4 = null;
        if (animal1 instanceof Cat) { // Animal animal1이 Cat으로 캐스팅 가능한가?
            cat4 = (Cat) animal1;
            cat4.grooming();
        } else {
            System.out.println("Animal animal1은 Cat으로 캐스팅할 수 없습니다.");
        }

    }
}
class Animal {
    public void sleep() {
        System.out.println("잠을 잡니다.");
    }
}
class Cat extends Animal {
    public void grooming() {
        System.out.println("그루밍을 합니다.");
    }
}

저작자표시 (새창열림)

'Langauge > Java-basic' 카테고리의 다른 글

[Java] super 키워드와 super() 메서드  (0) 2022.08.03
[Java] 메서드 오버라이딩(Method Overriding)  (0) 2022.07.31
[Java] 업 캐스팅과 다운 캐스팅  (0) 2022.07.30
[Java] 상속 관계와 포함 관계  (0) 2022.07.29
[Java] final 키워드  (0) 2022.07.25
  • instanceof
'Langauge/Java-basic' 카테고리의 다른 글
  • [Java] super 키워드와 super() 메서드
  • [Java] 메서드 오버라이딩(Method Overriding)
  • [Java] 업 캐스팅과 다운 캐스팅
  • [Java] 상속 관계와 포함 관계
강잇
강잇
학습한 내용을 정리 및 기록하는 블로그

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.