JAVA 캐스팅을 하는 이유

2023. 4. 24. 02:50·JAVA
반응형

Casting
up casting :  자식 값을 부모 타입으로 형변환
down casting : up casting된 객체를 자식 타입으로 형변환
* 부모 값을 자식 타입으로 형변환 시 오류

Casting을 사용하는 이유
모든 자식 값을 전달받기 위해서는 동일한 타입의 저장공간으로 받아야 한다.
하지만 자식끼리는 서로 타입이 다르기 때문에 한 번에 전달 받을 수가 없다,
이 때 up casting을 사용하면, 모든 자식이 부모 타입이므로 하나의 저장공간에
모든 자식을 받을 수 있게 된다.
만약 up casting으로 자식 값을 전달 받았다면, 자식에서 새롭게 구현한 기능들은
사용할 수 없기 때문에 down casting을 통해서 복구하여 사용한다.

 

객체 간 타입 비교
→ instanceof
객체 instanceof 클래스 타입 : 조건식, 참 또는 거짓 중 하나가 나오는 식
- 객체가 클래스타입이면 true
- 객체가 클래스타입이 아니면 false

 

 

package Casting;

class Car{
    public void engineStart(){
        System.out.println("열쇠로 시동 킴");
    }
}

class SuperCar extends Car{
    @Override
    public void engineStart() {
        System.out.println("음성으로 시동 킴");
    }

    public void openRoof(){
        System.out.println("지붕 열림");
    }
}

public class CastingTest {
    public static void main(String[] args) {
        Car matiz = new Car();
        SuperCar ferrari = new SuperCar();

        // up casting
        Car noOptionFerrari = new SuperCar();
        // 자식에서 재정의된 값은 들어가지만
//        noOptionFerrari.engineStart();

        // 자식에서 추가로 만든 필드는 사용할 수 없다.
//        noOptionFerrari.openRoof();

        // 자식에 부모 값을 담을 수 없다.
//        SuperCar brokenFerrari = (SuperCar) new Car();


        // down casting
        SuperCar fullOptionFerrari = (SuperCar) noOptionFerrari;
//        fullOptionFerrari.openRoof();

        System.out.println(matiz instanceof Car); // true
        System.out.println(matiz instanceof SuperCar); // false
        System.out.println(ferrari instanceof Car); // true
        System.out.println(ferrari instanceof SuperCar); // true
        System.out.println(noOptionFerrari instanceof Car); // true
        System.out.println(noOptionFerrari instanceof SuperCar); // true
        System.out.println(fullOptionFerrari instanceof Car); // true
        System.out.println(fullOptionFerrari instanceof SuperCar); // true
    }
}
반응형

'JAVA' 카테고리의 다른 글

시큐리티(미완성)  (0) 2023.08.08
JAVA Object 클래스 란?  (0) 2023.04.27
JAVA 변수의 종류  (0) 2023.04.23
JAVA 클래스란?  (0) 2023.04.22
JAVA 메소드란?  (0) 2023.04.18
'JAVA' 카테고리의 다른 글
  • 시큐리티(미완성)
  • JAVA Object 클래스 란?
  • JAVA 변수의 종류
  • JAVA 클래스란?
JAVALA
JAVALA
워니‘s Diary
    반응형
  • JAVALA
    정신줄 JAVA라
    JAVALA
  • 전체
    오늘
    어제
    • 분류 전체보기 (84)
      • Codding_Test (11)
        • BaekJoon (7)
        • Programmers (3)
      • Algorithm (11)
      • Daily (4)
        • memoir (4)
      • Error (7)
        • InteliJ (1)
        • eclipse (0)
      • Computer Science (1)
      • JAVA (7)
      • Javascript (0)
      • Spring Boot (7)
      • API (2)
      • Server (0)
      • DB (2)
        • ORACLE (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    코딩테스트
    개발자
    개발자 국비
    자바 알고리즘
    springboot
    자바
    스프링부트
    자바 스프링부트
    개발자 비전공자
    spring boot
    프론트엔드 개발자
    트리 자료구조
    자바 스프링
    개발자 부트캠프
    백준
    백엔드 개발자
    자바 클래스
    제로베이스
    프로그래머스
    자바 메소드
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
JAVALA
JAVA 캐스팅을 하는 이유
상단으로

티스토리툴바