YUYANE

JAVA/ 상속 - 캐스팅 (업캐스팅, 다운캐스팅) 본문

Programming Languages/JAVA

JAVA/ 상속 - 캐스팅 (업캐스팅, 다운캐스팅)

YUYA 2020. 10. 1. 10:39

1. 형변환(casting)

- 캐스팅 : '형변환'으로, 모든 변수에는 타입이 있다.(int, boolean, String 등) 

- 변수 또는 상수의 타입을 다른 타입으로 변환하는 것을 '형변환(casting)'이라고 한다.

- 예시

int a = (int) 1.3;

 (1.3은 원래 double의 형태이나, 변수 타입에 맞게 int로 형변환 시켜줌)

- 형변환의 규칙

 (1) boolean을 제외한 나머지 7개의 기본형은 서로 형변환 가능

 (2) 기본형과 참조형은 서로 형변환 불가

 (3) 서로 다른 타입 간의 변수를 연산 할 때 두 가지 변수의 타입을 일치 시켜주는 것이 원칙

     - 생략 시에도 컴파일러가 자동으로 형변환을 시켜주는 경우가 있다.

     - 단, 변수가 저장할 수 있는 값의 범위보다 더 큰 값을 저장하는 경우에는 명시적으로 형변환 해주지 않으면 에러 발생. 아래에서 더 살펴보자.

 

2. 업캐스팅

- 본래 타입보다 데이터를 많이 지닌 타입으로 형변환 하는 것

- 예시

자식클래스에서 포함하는 데이터는 부모클래스보다 범위가 넓다. 부모클래스 타입의 변수를 자식 클래스 타입으로 형변환하는 것은 업캐스팅의 예시가 될 수 있다.

Parent parent = new Child( );

Child 클래스가 저장하는 데이터의 범위가 더 넓으므로, 명시적으로 (Child)라고 형변환해주지 않았지만, 컴파일러가 자동형변환을 해줬다. 반대의 경우(Child->Parent)에는 오류 발생한다.

 

3. 다운캐스팅

- 위의 경우와 반대로 Child 클래스를 Parent클래스로 형변환 하는 것은 다운캐스팅의 예가 될 수 있다.

- Child child = (Child)new Parent( );

코드에 빨간 줄은 없지만, 실제로 동작 시 컴파일러는 Parent 클래스의 객체는 Child 클래스로 형변환이 불가한 것을 알고 런타임 오류 발생시킨다. 이유는, Child 클래스가 포함 할 데이터를 JVM이 추리하지 못하기 때문.

- 예외

Parent parent = new Child( ) ; // Parent 클래스의 객체를 Child 클래스로 인스턴스화 앞서 해준 경우에는

Child child = (Child)new Parent( ); // 오류 발생 x

 

** 참고사이트

mommoo.tistory.com/

 

개발자로 홀로 서기

 

mommoo.tistory.com

 

** 참고문헌

자바의정석 (남궁 성 지음)

Comments