[java] 기본 타입과 타입 변환

2022. 11. 12. 15:42BACKEND/JAVA

 

 

 

자바가 제공하는 기본 타입은 8개이다.

 

 

구분 분류 타입의 종류
기본 타입 정수 타입 byte, char, short, int, long
실수 타입 float, double
논리 타입 boolean

 

 

이 중 가장 많이 쓰는 것은 int 타입이고, int 타입에 들어갈 정수 리터럴의 허용 범위보다 더 큰 데이터는 long 타입을 쓴다.

char 타입은 음수 값은 사용이 불가하며 유니코드를 저장할 수 있는 타입이다. 하나의 문자를 작은따옴표(')로 감싼 것을 문자 리터럴이라고 하는데 이것은 유니코드로 변환되어 저장된다.

실수 타입에서는 허용하는 소수점 이하 자리가 double 타입이 더 길기 때문에 double 타입이 float 타입보다 많이 사용된다.

논리 타입으로는 boolean 타입이 있는데 참과 거짓을 의미하는 리터럴로 true와 false를 사용한다. 보통 조건문과 제어문의 실행 흐름을 변경하는 데 많이 쓰인다.

 

 


 

 

자동 타입 변환은 값의 허용 범위가 작은 타입이 허용 범위가 큰 타입으로 저장될 때 발생한다.

byte < short < int < long < float < double

그러므로 정수 타입이 실수 타입으로 저장될 경우에는 무조건 자동 타입 변환이 일어난다.

int i = 10;
double d = i;   // 자동 타입 변환

 

 

반대로 큰 허용 범위 타입은 작은 허용 범위 타입으로 자동 타입 변환이 될 수 없다. 될 수 있게 만드는 것을 강제 타입 변환(casting)이라고 한다. 실수 타입은 정수 타입으로 자동 변환되지 않기 때문에 강제 타입 변환을 사용해야 하는데 이 경우 소수점 이하 부분은 버려지고 정수 부분만 저장된다.

double d = 3.14;
int i = (int) d;		// 캐스팅 연산자 사용하여 강제 타입 변환
            		   	// i에는 3이 저장

 

 

 

정수 혹은 실수 타입 변수가 산술 연산식에서 피연산자로 사용될 경우 두 피연산자가 동일한 타입이라면 상관이 없지만 피연자의 타입이 다르다면 허용 범위가 더 큰 타입으로 자동 타입 변환되어 연산을 수행한다.

그리고 정수 연산의 결과는 정수가 된다. 그래서 결과를 실수 타입에 저장한다고 해도 변수 타입이 정수인 값들끼리 연산하면 정수이기 때문에 결과는 그대로 정수이다. 결과를 실수로 바꾸려면 연산하는 변수 중 하나 또는 모두를 실수 타입으로 변환해서 연산해야 한다.

int m1 = 10;
long m2 = 100;
long result = m1 + m2;			// 110 연산할 때 int가 long으로 자동 타입 변환

int n1 = 10;
double n2 = 5.5;
double result = n1 + n2;		// 15.5 연산 할 때 int가 double로 자동 타입 변환

int a = 1;
int b = 2;
double result = a / b;				// 0.0 정수끼리 연산하면 연산 결과도 정수
                                		// 실수 타입의 결과를 원한다면
double result = (double) a / b;			// 하나 또는 모두를 실수 타입으로 강제 타입 변환
double result = a / (double) b;
double result = (double) a / (double) b;

 

 


 

 

피연산자 중 하나가 문자열일 경우에는 나머지 피연산도 문자열로 자동 변환되어 문자열 결합 연산을 수행한다.

문자열을 기본 타입으로 변환하고 싶을 때는 강제 타입 변환을 사용한다.

 

변환 타입 예시
String -> int int i = Integer.parseInt(str);
String -> long long l = Long.parseLong(str);
String -> double double d = Double.parseDouble(str);

 

 

반대로 기본 타입을 문자열로 변환하고 싶을 때는 String.valueOf() 메소드를 이용한다.

String str = String.ValueOf(10);		// 문자열 "10"
                               		        // String.ValueOf(기본타입값);

 

 

 

* 참고자료 * 혼자 공부하는 자바 / 신용권 지음

 

 

 

 

 

'BACKEND > JAVA' 카테고리의 다른 글

[java] Operator(연산자)  (0) 2022.11.12
[java] Variable(변수)  (0) 2022.11.12