본문 바로가기

JAVA/개별학습

[JAVA] UpCasting & DownCasting

1. 자바의 참조형 캐스팅

1-1. 캐스팅

  • 형변환(캐스팅, 타입변환)
    ⇒ 하나의 데이터 타입을 다른 타입으로 바꾸는 것
    ⇒ Why? 대입 연산자(=) 에서 변수와 값의 타입이 일치하지 않으면 할당이 불가능하기 때문
📌 자바의 데이터형 (타입간의 형변환(casting) 가능)
기본형(primitive type) - Boolean Type(boolean) - Numeric Type(short, int, long, float, double, char)
참조형(reference type) - Class Type - Interface Type - Array Type - Enum Type - 그 외 다른 것들

 

1-2. 참조형 캐스팅

  • 클래스 자료형변환
  • 상속 관계에 있는 부모(슈퍼 클래스)와 자식(서브 클래스) 간에는 서로 형변환 가능
    ⇒ 클래스는 reference 타입 → 참조형 캐스팅(업캐스팅 / 다운캐스팅)
  • 자식 클래스의 객체는 부모 클래스를 상속 → 부모의 멤버를 모두 가짐 (부모 클래스보다 범위 확장)
  • 부모 클래스의 객체는 자식 클래스의 멤버를 모두 가지고 있지는 않음
  • 형제 클래스끼리는 참조 형변환 불가
  • 참조변수의 형변환 : 사용할 수 있는 멤버의 개수 조절
    ⇒ 기본형 타입의 형변환 (실수 → 정수) : 값 변경
    객체 형변환 : 멤버 개수 변경

UpCasting & DownCasting 개념도


2. 업캐스팅(UpCasting)

2-1. 정의와 특징

  • 자식 클래스 타입 → 부모 클래스 타입
    상위클래스형 참조변수 = 하위클래스형 객체
  • 캐스팅 연산자 괄호 생략 가능
  • 자동형변환(멤버 개수 감소로 메모리 접근에 문제가 없기 때문)
    ⇒ 자식과 부모의 공통된 범위만 접근 가능
    ⇒ 자식 클래스에만 있는(확장된) 속성(멤버변수)과 메서드(멤버메서드)에 접근 불가
  • 자식 클래스에서 오버라이딩(재정의)한 메서드에는 접근 가능
    ⇒ 부모 클래스의 메서드가 아닌 오버라이딩 된 메서드가 실행

 

2-2. 사용 이유

  • 상위클래스가 상속관계에 있는 하위클래스들을 연결하기위해 사용
    ⇒ 공통적인 부분을 하나로 묶어 간단하게 다루기 위함
  • for 간단한 코드 & 가독성 & 유지보수성

 

💡 부모 클래스 타입에서 자식 클래스의 메소드를 실행하는 방법
1. 오버라이딩
2. 다운캐스팅

 

 


3. 다운 캐스팅(DownCasting)

3-1. 정의와 특징

  • 부모 클래스 타입 → 자식 클래스 타입
  • 캐스팅 연산자 괄호 생략 불가
  • 객체 멤버 증가 → 불안정(참조변수가 가리키는 객체 파악 불가) → 강제형변환
    ⇒ 강제형변환시 instanceof 선행 필수

 

3-2. 사용 이유

  • 업캐스팅한 객체를 다시 자식 클래스 타입의 객체로 되돌리기 위함 (복구)
    ⇒ 확장된 부분에 접근하기위해 사용(자식 본인의 필드와 기능 회복)
    ⇒ 복구의 개념이므로 UpCasting 전제

 

3-3. instanceof 연산자

  • 다운 캐스팅 할 객체가 오리지날 부모 객체인지, 업캐스팅된 부모 객체인지 구별하는 연산자
  • 어느 객체 변수가 어느 클래스 타입인지 판별해 true/false 반환
  • 객체에 대한 클래스(참조형) 타입에만 사용 가능 (int, double 등 primitive 타입에는 사용 불가능)

 

'JAVA > 개별학습' 카테고리의 다른 글

[JAVA] 추상클래스  (0) 2024.02.21
[JAVA] 배열  (0) 2024.02.21
[JAVA] 타입변환  (0) 2024.02.21
[JAVA] 자료형  (0) 2024.02.21
[JAVA] 변수  (0) 2024.02.21