※해당 글은 신용권님의 혼자 공부하는 자바의 책으로 공부하며 참고한 글입니다.
타입 변환
이란 A로 선언된 데이터 타입을 B 데이터 타입으로 변환하는 것을 일컷는다.
예를 들어 byte를 int로 char을 String으로 변환하는 경우가 있다.
//example code
byte a = 10
int b = a;
자동 타입 변환
은 말 그대로 자동으로 타입 변환이 일어나는 것이다.
자동 타입 변환은 범위가 작은 타입에서 큰 범위의 타입으로 일방적으로만 변환이 된다.
타입별 범위 크기는 아래와 같다.
byte < short < int < long < float < double
char은 본인보다 허용 범위가 작은 byte타입이여도 char로 자동 변환 될 수 없다.
char 타입의 허용 범위는 다른 타입들과 달리 유니코드로 이루어져 있어 유니코드는 음수를 포함하지 않기 때문이다.
(다른 타입들은 전부 음수까지 범위에 포함되기에 char로 자동 변환이 불가능하다.)
강제 타입 변환
위에서 말했듯 일반적이라면 본인보다 큰 범위인 타입으로만 타입 변환이 가능하다.
하지만 강제 타입 변환은 큰 범위에 속한 타입이 본인 보다 작은 타입으로 타입 변환하는것을 일컷는다.
하지만 큰 컵에 담긴 물이 작은 컵에 전부 안들어가듯 작은 크기로 나눠서 한 부분만 작은 타입에 담는 것만 가능하다.
강제 타입 변환은 캐스팅 연산자 괄호 ()를 사용하는데, 괄호 안에 들어가는 타입은 나누는 단위가 된다.
//example code
int intValue = 10;
byte byteValue = (byte) intValue;
char로 강제 타입 변환을 사용하게 되면 char는 유니코드로 받아들여 문자를 출력하는 모습도 볼 수 있다.
//example code
int intValue = 65;
char charValue = (char) intValue;
System.out.println(charValue); //65를 유니코드로 가진 문자 "A"가 출력됨.
실수 타입을 정수 타입으로 강제 타입 변환을 한다면 정수 타입은 소수점과 소수점 아래 숫자를 가질 수 없기에
정수 부분만 출력된다.
//example code
double doubleValue = 3.14;
int intValue = (int) doubleValue;
System.out.println(intValue); //3
위에서 말한 자동 타입 변환이 어디서 이행되는지 알아보자.
정수 연산에서의 자동 타입 변환
산술 연산식에서 피연산자로 서로 다른 정수 타입의 변수들이 사용되면 둘 중 큰 타입으로 자동 타입 변환이 된다.
int보다 작은 타입들끼리는 서로 같은 타입이더라도 연산식을 이행하면 int로 타입이 변환된다.
//example code
byte num01 = 10;
byte num02 = 12;
byte result = num01 + num02; //컴파일 에러!
int result = num01 + num02; //정상 실행
//=====
int num03 = 123;
long num04 = 1234L;
int result = num03 + num04; //컴파일 에러!
long result = num03 + num04; //정상 실행
(변수 초기화할때의 연산은 선언할때 선언할 때 사용된 정수 타입에 저장된다.)
실수 연산에서의 타입 변환
실수 타입의 변수도 정수 타입의 자동 타입 변환과 마찬가지로 연산 시 서로 다른 타입의 피연산자라면 피연산자중 더 큰 타입인 double로 자동 변환된다.
int 타입과 double 타입을 연산해도 동일한 과정을 거치며, int 타입의 피연산자가 double 타입으로 자동 변환되고 연산을 수행한다. 따라서 연산값을 저장하는 데이터는 double 타입이 되어야 한다.
소수를 표현 못하는 int 타입끼리의 연산(ex: 1/2)을 double에 저장하면 어떤 값이 출력될까?
먼저 int끼리의 연산 1 / 2는 수학적 관념에서 보면 0.5이지만 정수밖에 표현하지 못하는 int는 0으로 출력된다.
따라서 double에 대입된 값은 0.0이된다.
실수 타입에서 정수 타입으로 강제 타입 변환을 하게되면, 소우점 이하 부분은 버려지고, 정수 부분만 저장된다.
//example code
double doubleValue = 3.14;
int intValue = (int) doubleValue; //intValue는 정수부분인 3만 저장된다.
+ 연산에서 문자열 자동 타입 변환
피연산자 중 하나가 문자열일 경우 나무지 피연산자도 문자열로 자동 변환이 된다.
//example code
int number = 1;
String name = "홍길동"
String explane = "저의 이름은" + name + "이고, 번호는" + number + "번 입니다."
//출력: "저의 이름은 홍길동이고, 번호는 1번 입니다."
만약 여러 연산을 수행할 때면 연산 순위는 순차적으로 실행된다.
//아래와 같이 연산을 수행한다.
//example code1
String str = 1 + 2 + "3";
String str = 3 + "3";
String str = "6";
//example code2
String str = 1 + "2" + "3";
String str = "12" + "3";
String str = "123";
여러 연산을 수행할 때 우선순위를 두고싶다면 괄호()로 감싸면 괄호 안의 연산식은 최우선으로 수행된다.
//example code
String str = "1" + (2+3);
String str = "1" + 5;
String str = "15";
문자열을 기본 타입으로 강제 타입 변환
프로그램에서 문자열을 기본 타입으로 변환하는 경우가 많다. 이를 수행하는 방법은 아래와 같다.
변환 타입 | 사용 예 |
String > byte | String str = "10"; bytr value = Byte.parseByte(str); |
String > short | String str = "200"; short value = Short.parseShort(str); |
String > int | String str = "300000"; int value = Intrger.parseInt(str); |
String > long | String str = "4000000000"; long value = Long.parseLong(str); |
String > float | String str = "12.345"; float value = Float.parseFloat(str); |
String > double | String str = "12.345"; double value = Double.parseDouble(str); |
String > boolen | String str = "true"; boolen value = Boolen.parseBoolen(str); |
반대로 기본 타입값을 문자열로 변경하는 경우도 있는데, 이는 간단히 String.valueOf() 메소드를 사용할 수 있다.
String str = String.valueOf(기본타입값);
읽어주셔서 감사합니다(#..#)
'📖혼자공부하는자바' 카테고리의 다른 글
Chapter 03-1 연산자 (0) | 2022.11.12 |
---|---|
Chapter 02-4 변수와 시스템 입출력 (0) | 2022.11.10 |
Chapter 02-2 기본 타입 (0) | 2022.11.08 |
Chapter 02-1 변수 (0) | 2022.11.08 |
Chapter 01-2 자바 프로그램 개발 과정 (0) | 2022.11.07 |