변수나 리터럴의 타입을 다른 타입으로 변환하는 것을 형 변환 (casting)이라고 한다.
자바를 쓰다 보면 자료형 간에 형 변환을 해야 하는 경우가 생긴다. 이번 글에서는 형 변환하는 방법을 정리해 보겠다.
1. 정수형 ↔️ 실수형
정수형 변수(byte, short, int, long)와 실수형 변수(float, double)는 기본형 변수에 속하기 때문에 자유롭게 형 변환이 가능하다. 기본형 변수 간에 형 변환은 형 변환하고자 하는 변수나 리터럴의 앞에 변환하고자 하는 타입을 괄호와 함께 붙여주기만 하면 된다.
Integer ➡ Double, Float
int i = 3;
float f = (float) i; //Integer to Float
double d = (double) i; //Integer to Double
System.out.println("Integer to Float : " + f); //Integer to Float : 3.0
System.out.println("Integer to Double : " + d); //Integer to Double : 3.0
Double, Float ➡ Integer
float f = 3.54f;
int i1 = (int) f; //Float to Integer
double d = 4.75d;
int i2 = (int) d; //Double to Integer
System.out.println("Float to Integer : " + i1); //Float to Integer : 3
System.out.println("Double to Integer : " + i2);//Double to Integer : 4
이 때, 소수점 뒷 부분은 반올림되는 것이 아니라 아예 삭제가 되기 때문에 유의해야 한다.
2. 정수형 ↔️ 문자
int i = 65;
char ch = (char) i;
System.out.println("Integer to Character : " + ch); //Integer to Character : A
65라는 숫자를 Character형으로 변환했는데 A가 출력되었다. 이는 65가 A의 아스키 코드 값이기 때문이다.
이 방법으로는 정수를 그대로 Character형으로 담을 수 없다.
Integer ➡ Character
int i = 5;
char ch1 = (char) (i + '0'); //Integer to Character1
char ch2 = Character.forDigit(i,10); //Integer to Character2
System.out.println("Integer to Character1 : " + ch1); //Integer to Character1 : 5
System.out.println("Integer to Character2 : " + ch2); //Integer to Character2 : 5
첫번째 방법
아스키 코드를 활용한 방법이다.
문자 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
10진수 값 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 |
문자 '0'에 해당하는 아스키 코드 값은 48이다. 여기에 5를 더하면 53이 된다. 문자 5에 해당하는 아스키 코드 값이 되는 것이다. 이 방식으로 정수를 문자로 바꿀 수 있다.
두번째 방법
Character.forDigit()메서드를 활용하는 것이다.
Character.forDigit(바꾸려는 수, 진법)
위의 형태로 활용한다. 위 예제에서는 변수 i(5)를 10진법 수로 변환하기 위해 Character.forDigit(i, 10)이라고 작성했다.
Character ➡ Integer
int ch = '4';
int i1 = (int) (ch - '0'); //Character to Integer1
int i2 = Character.getNumericValue(ch); //Character to Integer2
System.out.println("Character to Integer1 : " + i1); //Character to Integer1 : 4
System.out.println("Character to Integer2 : " + i2); //Character to Integer2 : 4
첫번째 방법
아스키 코드를 활용한 방법이다. 정수를 문자로 바꾸는 방법과 동일한 방법이니 설명은 생략하겠다.
두번째 방법
Character.getNumericValue() 메서드를 활용하는 방법이다.
Character.getNumericValue(변수)
이 메서드를 이용해서 Character형을 Integer형으로 변환할 수 있다.
3. 정수형 ↔️ 문자열
Integer ➡ String
int i = 3450;
String s1 = Integer.toString(i); //Integer to String(10진수)
String s2 = Integer.toBinaryString(i); //Integer to String(2진수)
String s3 = Integer.toOctalString(i); //Integer to String(8진수)
String s4 = Integer.toHexString(i); //Integer to String(16진수)
System.out.println("Integer to String : " + s1);//Integer to String : 3450
System.out.println("Integer to String : " + s2);//Integer to String : 110101111010
System.out.println("Integer to String : " + s3);//Integer to String : 6572
System.out.println("Integer to String : " + s4);//Integer to String : d7a
Integer 클래스의 메서드를 잘 활용하면 Integer형을 String으로 변함함과 동시에 진수 변환까지 할 수 있다.
String ➡ Integer
String s = "1234";
int i = Integer.parseInt(s); //String to Integer
System.out.println("String to Integer : " + i); //String to Integer : 1234
Integer 클래스의 parseInt() 메서드를 활용하여 변환한다.
4. 실수형 ↔️ 문자열
Float, Double ➡ String
float f = 3.14f;
double d = 3.141592;
String s1 = Float.toString(f); //Float to String
String s2 = Double.toString(d); //Double to String
System.out.println("Float to String : " + s1); //Float to String 3.14
System.out.println("Double to String : " + s2); //Double to String 3.141592
자료형의 wapper 클래스에 맞게 toString() 메서드를 활용하여 변환할 수 있다.
String ➡ Float, Double
String s = " 3.141592";
float f = Float.parseFloat(s); //String to Float
double d = Double.parseDouble(s); //String to Double
System.out.println("String to Float : " + f); //String to Float : 3.141592
System.out.println("String to Double : " + d); //String to Double : 3.141592
String을 Float으로 변환할 시 Float.parseFloat() 메서드를, Double로 변환할 시에는 Double.parseDouble()메서드를 활용한다.
5. 문자 배열 ↔️ 문자열
Character ➡ String
char[] ch = {'h', 'e', 'l', 'l', 'o'};
String s1 = new String(ch); //Character to String1
String s2 = String.valueOf(ch); //Character to String2
System.out.println("Character to String1 : " + s1);//Character to String1 : hello
System.out.println("Character to String2 : " + s2);//Character to String2 : hello
Character형 배열을 String으로 변환하고 싶다면 위와 같은 방법으로 변환할 수 있다.
첫번째 방법
String 클래스의 생성자를 사용하여 변환하는 방법이다. String 변수를 생성할 때 생성자의 매개변수아 문자 배열을 넣어준다.
두번째 방법
String 클래스의 valueOf() 메서드를 활용한다.
String ➡ Character
String s = "hello coco";
char[] ch1 = s.toCharArray(); //String to Character
char ch2 = s.charAt(8); //s[8] to Character
System.out.println("String to Character : " + Arrays.toString(ch1));
//String to Character : [h, e, l, l, o, , c, o, c, o]
System.out.println("s[8] to Character : " + ch2); //s[8] to Character : c
String을 Character형 배열로 변환하고 싶다면 String.toCharArray()메서드를 활용하면 된다.
만약 원하는 인덱스의 한 글자만 Character형으로 변환하고 싶다면 charAt(index)메서드를 활용하자.
총평
자꾸 찾아보게 되길래 한번 정리를 해봤다.
플로팅 목차를 적용한 것이 이 글을 쓸 때만큼 뿌듯한 적은 없었다.
'✏️Java 공부 > 기타 등등' 카테고리의 다른 글
[Java 공부/기타] 객체 정렬하기 (Comparable & Comparator) (0) | 2022.08.01 |
---|---|
[Java 공부/ 기타] 클래스 내에서 데이터에 제약조건 걸기 (3) | 2022.03.08 |
댓글