Casting

똘이주인·2021년 5월 18일
0

<—— 강제형변환 / 자동형변환 —–>

byte < short, char < int < long < float < double

  1. 자동 변환 (묵시적 ) - promotion

크기가 작은 타입을 크기가 더 큰 타입으로 바꿀 때에는 묵시적으로 형을 바꾸어 준다.

"큰 변수 = 작은변수" 이렇게 바로 대입이 가능

// 1. 정수를 실수형 자료형으로 넣으면 (프로모션하면) 기존 정수형 값은 소숫점이 붙습니다.
int i = 100; 

float f = i; //f의 값이 100.0 나온다

// 2. char형을 int에 넣으면
char c = '가';

int ii = c;//ii에는 44032 라는 숫자가 저장되어 있습니다.(유니코드)

2.강제 변환 (명시적) - casting

큰 것을 작은 것에 넣을때 문제 발생

크기가 더 큰 타입을 작은 타입으로 바꿀 때에는 명시적으로 변환 해주어야 한다.

float f = 100325198712124.1123f;

int i = (int) f;

System.out.println("값은? " + i); //i가 2147483647 출력

// float값이 int의 값의 범위를 넘어서 담지 못하고 숫자가 날아가버림
// int의 최대값(2,147,483,647)까지만 담았다.

클래스끼리의 형 변환

부모타입으로 자식객체를 참조하게 되면 부모가 가지고 있는 메소드만 사용할 수 있다. 자식객체가 가지고 있는 메소드나 속성을 사용하고 싶다면 형변환 해야 한다.

// class make / call - 객체 생성
GrandFather g = new GrandFather();

Father f = new Father();

Me m = new Me();

// UP - cast

GrandFather gg = new Father();
Father ff = new Me();

// Down - cast
// Father ff = (Father) new GrandFather();
// err 런타임에러, new로 생성하자마자 갑자기 자식으로 내려가는 것은 불가능

Father f4 = (Father) gg;

*요약*
// 부모 클래스는 자식클래스에 extends라고 적힌 "내 부모는 당신" 이라는 정보를
// 일단 알아야 자바가 자동으로 형변환(업캐스팅)을 시켜주면서 정보를 들고 다녀야만,
// 다시 자식으로 돌아가는 형변환(다운 캐스팅)을 할때 "아 내 자식이다." 라고
// 에러 없이 돌아갈 수 있는 것이죠.

0개의 댓글