형변환(Type Conversion)이란?
int a = 10; float b = 1.2; printf("%d", a+b);형변환이란 데이터의 타입을 변경하는 것이다. 예를 들어 위와 같이 데이터 타입이 다른 두 변수를 더하는 연산을 하려고 하면 어떻게 될까? 오류가 발생하지는 않고 묵시적 형변환이 일어나게 된다.
묵시적 형변환(Implicit Type Conversion)이란?
묵시적 형변환이란 컴파일러에 의해 자동으로 형변환이 이루어지는 것을 말한다.
예를 들어 int a 와 float b를 더할 때 int a는 자동으로 float형으로 형변환이 이루어진다.
묵시적 형변환은 위 그림처럼 표현 범위가 좁은 데이터 타입에서 -> 넓은 데이터 타입으로의 변환만 허용된다. 예를 들어 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형으로 클래스 형 변환하여 선언할 수 있습니다.
※ 묵시적 형변환
Customer : 선언된 클래스형(상위 클래스형)
VIPCustomer : 생성된 인스턴스의 클래스형(하위 클래스형) -> (Customer) 생략됨
모든 하위 클래스는 상위 클래스 자료형으로 형 변환될 수 있지만 그 역은 성립하지 않습니다.
VIPCustomer는 상위 클래스 Customer형을 내포하고 있기 때문에 Customer형으로 형 변환할 수 있습니다.
안녕하세요 .
국비 기록용으로 남길려고합니다
참고 하실때 도움되셨으면좋겠습니다 ..!(너무믿지 말아주세요 ...)
형변환
값의 기본자료형을 바꾸는것(int > long), 단 boolean(논리형) 은 형변환을 사용할수가 없다.
형변환은 자동형변환과 강제형변환 2종류가 있다 .
값의 범위
자동형변환
컴파일러가 자동으로 값의 범위가 작은 자료형을 큰자료형으로 변환 해주는것
위에 표처럼 작은타입에서 큰타입으로 변경할때는 자동형변환이 되어서 따로 형타입 작성안해도됩니다.
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 |