자바 묵시적 형변환 - jaba mugsijeog hyeongbyeonhwan

형변환(Type Conversion)이란?

int a = 10;
float b = 1.2;
printf("%d", a+b);

형변환이란 데이터의 타입을 변경하는 것이다. 예를 들어 위와 같이 데이터 타입이 다른 두 변수를 더하는 연산을 하려고 하면 어떻게 될까? 오류가 발생하지는 않고 묵시적 형변환이 일어나게 된다. 

묵시적 형변환(Implicit Type Conversion)이란?

묵시적 형변환이란 컴파일러에 의해 자동으로 형변환이 이루어지는 것을 말한다. 

예를 들어 int a 와 float b를 더할 때 int a는 자동으로 float형으로 형변환이 이루어진다. 

자바 묵시적 형변환 - jaba mugsijeog hyeongbyeonhwan

묵시적 형변환은 위 그림처럼 표현 범위가 좁은 데이터 타입에서 -> 넓은 데이터 타입으로의 변환만 허용된다. 예를 들어 int 형은 double 형으로 형변환 될 수 있지만 double 형은 int형이 될 수 없다. 

명시적 형변환(Explicit Type Conversion)이란?

int a = 10;
double b = 1.3;

int result = a + (int)b;	// 결과 : 11

명시적 형변환이란 사용자가 직접 데이터의 타입을 변경하는 것이다. 위 코드와 같이 사용자가 double 형을 int 형으로 형변환 할 수 있다. 묵시적 형변환과 다르게 표현 범위가 넓은 데이터 타입에서 좁은 데이터 타입으로의 변환이 허용된다. 하지만 데이터의 값이 손실될 수 있다. double 값이 1.3일 때 int형으로의 변환이 이루어지면 값은 1이 된다. 소수부가 손실된 것이다.

이번 포스팅은 묵시적 형 변환과 명시적 형 변환에 대해서 다뤄보겠습니다

(1) 묵시적 형 변환 : 큰 <= 작은

(2) 명시적 형 변환 : 작은 <= (작은)큰

클래스 : 고객, VIP고객(고객으로부터 상속받음)

VIPCustomer 클래스로 인스턴스를 생성할 때

이 인스턴스의 자료형을 Customer형으로 클래스 형 변환하여 선언할 수 있습니다.

※ 묵시적 형변환

자바 묵시적 형변환 - jaba mugsijeog hyeongbyeonhwan

Customer : 선언된 클래스형(상위 클래스형)

VIPCustomer : 생성된 인스턴스의 클래스형(하위 클래스형) -> (Customer) 생략됨

모든 하위 클래스는 상위 클래스 자료형으로 형 변환될 수 있지만 그 역은 성립하지 않습니다.

VIPCustomer는 상위 클래스 Customer형을 내포하고 있기 때문에 Customer형으로 형 변환할 수 있습니다.

안녕하세요 .

국비 기록용으로 남길려고합니다 

참고 하실때 도움되셨으면좋겠습니다 ..!(너무믿지 말아주세요 ...)


형변환

값의 기본자료형을 바꾸는것(int > long), 단 boolean(논리형) 은 형변환을 사용할수가 없다. 

형변환은 자동형변환과 강제형변환 2종류가 있다 .

값의 범위

자바 묵시적 형변환 - jaba mugsijeog hyeongbyeonhwan
학원.pdf 참조하였습니다.

자동형변환

컴파일러가 자동으로 값의 범위가 작은 자료형을 큰자료형으로 변환 해주는것

위에 표처럼 작은타입에서 큰타입으로 변경할때는 자동형변환이 되어서 따로 형타입 작성안해도됩니다.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

package com.test;

public class Test {

public static void main(String[] args) {

//자동 형변환

//작은 자료형의 타입을 큰 자료형타입으로 컴파일러가 자동적으로 변경해준다.

int iNum = 1;

double dNum = iNum;

//원래 형변환시 변수타입과 리터럴타입이 똑같아야 하는데, int가 double보다 공간이더 작기때문에 자동형변환이일어난다.

//원래는 아래와 같이 변환해야할 타입을 (타입) <<안에 표시해줘야한다 .

//자동형변환은 컴파일러가 대신 처리해준다.

double dNum2 = (double)iNum; 

}

}

cs

강제형변환

값의 범위가 큰자료형값은 작은자료형으로 변경하는것

이럴때는 항상 (자료형타입) 으로 표시를해주어야한다.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

package com.test;

public class Test {

public static void main(String[] args) {

//강제 형변환

// 큰자료형 값을 작은자료형으로 대입을할때 (형변환자료형) 값; 이런식으로 표시를해주어야한다.

double dNum = 30.5;

//        int iNum = dNum; //에러, 값보다 작은자료형이기 때문에 자동형변환불가 이럴경우 강제형변환해주어야함

int iNum = (int)dNum; //주의 : double형에서 int 형으로 변환할때는 int는 정수이기떄문에 double의 소수점 버려지게됨 30.5 > 30;

char ch = 'A';

int iNum2 = ch;

//char보다 int형의 자료형 범위가 더크기때문에 자동형변환 되지만 'A' 문자값은 숫자 65로변경된다.

//왜 65가 나오냐하면 유니코드 값 에 의해결정된다.

//아래에 유니코드 이미지 첨부참조

}

}

cs

유니코드 표

자바 묵시적 형변환 - jaba mugsijeog hyeongbyeonhwan
출처 : https://m.blog.naver.com/PostView.nhn?blogId=kyuhgmi&logNo=220073551241&proxyReferer=https:%2F%2Fwww.google.com%2F