반응형
해당 글에서는 Java에서 사용되는 다양한 형 변환(Type Conversion) 방법에 대해서 이해합니다.
1) 형 변환(Type Conversion) : 캐스팅(Casting)
💡 변환(Type Conversion) : 캐스팅(Casting)
- 변수의 자료형을 다른 자료형으로 변환하는 것을 의미합니다. 이때 변환되는 자료형은 변수가 담고 있는 값에 따라 결정됩니다.
- 형 변환은 암시적 형 변환과 명시적 형변환으로 나뉩니다.
[ 더 알아보기 ]
💡 암시적 형변환
- 자동으로 처리되는 형변환을 의미합니다.
💡 명시적 형 변환
- 개발자가 직접 코드를 작성하여 수행하는 형변환을 의미합니다.
2) [기초] 문자열 ↔ 래퍼 클래스
1. 문자열을 래퍼 클래스로 변환
번호 | 분류-1 | 분류-2 | 주요 메서드 |
1 | 문자열 ↔ 래퍼클래스(정수) | String ↔ int | Integer.parseInt(String) |
2 | 문자열 ↔ 래퍼클래스(실수) | String ↔ Double | Double.parseDouble(String) |
3 | 문자열 ↔ 래퍼클래스(진위형) | String ↔ Boolean | Boolean.parseBoolean(String) |
4 | 문자열 ↔ 래퍼클래스(부동소수점) | String ↔ Float | Float.parseFloat(String) |
5 | 문자열 ↔ 래퍼클래스(긴 정수) | String ↔ Long | Long.parseLong(String) |
6 | 문자열 ↔ 래퍼클래스(짧은 정수) | String ↔ Short | Short.parseShort(String) |
7 | 문자열 ↔ 래퍼클래스(바이트) | String ↔ Byte | Byte.parseByte(String) |
8 | 문자열 ↔ 래퍼클래스(문자) | String ↔ Character | Character.valueOf(String.charAt(0)) |
2. 래퍼 클래스를 문자열로 변환
💡 래퍼 클래스를 문자열로 변환하는 방법은 아래의 두 가지를 통해서 변환을 합니다.
1. 래퍼클래스.toString()을 이용하는 방법
2. String.valueOf()를 이용하는 방법
번호 | 분류 -1 | 분류 -2 | 주요 메서드 |
1 | 래퍼클래스(정수) ↔ 문자열 | int ↔ String | String.valueOf(int) |
2 | 래퍼클래스(실수) ↔ 문자열 | Double ↔ String | String.valueOf(double) |
3 | 래퍼클래스(진위형) ↔ 문자열 | Boolean ↔ String | String.valueOf(boolean) |
4 | 래퍼클래스(부동소수점) ↔ 문자열 | Float ↔ String | String.valueOf(float) |
5 | 래퍼클래스(긴 정수) ↔ 문자열 | Long ↔ String | String.valueOf(long) |
6 | 래퍼클래스(짧은 정수) ↔ 문자열 | Short ↔ String | String.valueOf(short) |
7 | 래퍼클래스(바이트) ↔ 문자열 | Byte ↔ String | String.valueOf(byte) |
8 | 래퍼클래스(문자) ↔ 문자열 | Character ↔ String | String.valueOf(char) |
3) 형 변환 요약
번호 | 분류-1 | 분류-2 | 주요 메서드 |
1 | 기본 자료형 ↔ 래퍼클래스 | int ↔ Integer | Arrays.stream().boxed().collect() / Arrays.stream().mapToInt() |
2 | 배열 ↔ 리스트 | Array ↔ List | Arrays.asList() / List.toArray() |
3 | 문자열 ↔ 문자열, 문자 배열 | String ↔ String[]/char[] | String.split(), String.toCharArray() |
4 | 배열/리스트 → 문자열 | Array/List → String | String.join() |
5 | 문자열 ↔ 정수 | String ↔ int | Integer.parseInt() / Math.abs() / String.valueOf() |
6 | 문자열 ↔ Date | String ↔ Date | SimpleDateFormat.format(), SimpleDateFormat.parse(), Calendar |
7 | 문자열 ↔ 아스키코드 | 문자열 ↔ ASCII Code | String.charAt() / (char) |
8 | 정수(10진법) ↔ N진법 | int ↔ N진법 | Integer.toString(num, n) / Integer.parseInt(str, n) |
9 | 문자열 배열 ↔ 정수 배열 | String[] ↔ int[] | Arrays.stream().mapToInt(Integer::parseInt).toArray() Arrays.stream().mapToInt(String::valueOf).toArray() |
4) 기본자료형 ↔ 래퍼클래스 간의 변환 : Boxing / Unboxing
1. 기본 자료형 ↔ 래퍼 클래스 변환
분류 | 기본 자료형 (Primitive Type) | 래퍼 클래스(Wrapper Class) | 오토 언박싱 |
진위형 | boolean | Boolean | a.booleanValue() |
문자형 | char | Character | a.charValue() |
정수형 | byte | Byte | a.byteValue() |
정수형 | short | Short | a.shortValue() |
정수형 | int | Integer | a.intValue() |
정수형 | long | Long | a.longValue() |
실수형 | float | Float | a.floatValue() |
실수형 | double | Double | a.doubleValue() |
💡 Java 1.5 이상부터는 별도의 형 변환 없이 ‘암시적 형변환’이 수행이 됩니다.
Integer integer = 1;
int intItem = integer;
int intItem = 1;
Integer integer = intItem;
💡 Java 1.5 미만 버전부터는 형변환을 수행하는 ‘명시적 형변환’으로 데이터 타입을 변형합니다.(래퍼클래스 → 기본자료형에 해당)
Integer integer = 1;
int intItem = integer.intValue();
2. 기본자료형 배열을 래퍼 클래스 배열로 변환(기본자료형 to 래퍼클래스) : Arrays.stream().boxed().collect()
// 1. Array Initialize
int[] boxedNumArr = {0, 1, 2, 3, 4};
// 2. Array to Stream<Integer>
List<Integer> boxedNumArrList = Arrays.stream(boxedNumArr).boxed().collect(Collectors.toList());
3. 래퍼 클래스 배열을 기본 자료형 배열로 변환(래퍼클래스 to 기본자료형) : Arrays.stream().mapToInt()
Integer[] unBoxedNumArr = {0, 1, 2, 3, 4};
int[] unBoxedNumArrList = Arrays.stream(unBoxedNumArr).mapToInt(i -> i).toArray();
5) 배열 ↔ 리스트 간의 변환 : Array ↔ List
1. 배열을 리스트로 변환(Array to List) : Arrays.asList()
import java.util.*;
// 1. Array Initialize
String[] strArr = {"one", "two", "three"};
// 1.1. [배열 -> 컬렉션 함수] 배열 리스트(ArrayList) 선언 및 초기화합니다.
List<String> strArrList = Arrays.asList(strArr); // ArrayList : ["one", "two", "three"]
// 1.2. [배열 -> 컬렉션 함수] 배열 리스트(ArrayList) 선언 및 초기화합니다.
List<String> strArrList = new ArrayList<>(Arrays.asList(strArr)); // ArrayList : ["one", "two", "three"]
2. 리스트를 배열로 변환(List to Array) : List.toArray()
List<String> strArrList = Arrays.asList("one", "two", "three");
String[] resultArr = new String[strArrList.size()];
resultArr = strArrList.toArray(new String[resultArr.length]);
6) 문자열 ↔ 문자열 배열, 문자 배열 : String ↔ String[]/char[]
1. 문자열을 문자열 배열로 변환 : String.split()
💡 split() 메서드를 이용하여서 ‘구분자(delimiter)’에 따라서 배열로 변환합니다.
String alphabet = "abcdefg";
String[] alphabetArr = alphabet.split("");
System.out.println("Array :: " + Arrays.toString(alphabetArr));// Array :: [a, b, c, d, e, f, g]
2. 문자열을 문자 배열로 변환: String.toCharArray()
💡 toCharArray()를 이용하여 문자열을 문자 배열로 변환합니다.
String alphabet = "abcdefg";
char[] alphabetCharArr = alphabet.toCharArray();
System.out.println("Char Array ::" + Arrays.toString(alphabetCharArr));// Char Array ::[a, b, c, d, e, f, g]
7) 배열/리스트 ↔ 문자열 변환 : Array/List ↔ String
💡 String.join 함수를 이용하여서 Array, List를 문자열로 변환하는 예시입니다.
// List to String
List<String> list = new ArrayList<>();
list.add("Java");
list.add("List");
list.add("String");
String resultList = String.join("", list);
System.out.println(resultList);// "JavaListString"// Array to String
String[] arr = {"java", "List", "String"};
String resultArr = String.join("", arr);
System.out.println(resultArr);
8) 문자열(String) ↔ 정수(int) 간의 변환
1. 문자열을 부호가 포함된 문자열을 정수로 변환(String to int) : Integer.parseInt()
/*
* String to Integer : 오토 언박싱으로 즉시 int 타입으로 반환 받습니다.
* 부호가 존재하는 문자열을 Integer.parseInt()로 변환하였을 시 "부호"는 유지가 됩니다
*/
String s1 = "-1234";
String s2 = "+1234";
int minusInt = Integer.parseInt(s1); // -1234
int plusInt = Integer.parseInt(s2); // +1234
2. 문자열을 부호가 포함되지 않은 정수로 변환(String to int) : Math.abs()
/*
* int to int : 부호가 존재하는 int 타입을 Math.abs() 함수를 사용하면 "부호"는 유지되지 않습니다.
*/
int i1 = +12000;
int i2 = -12000;
int absPlusInt = Math.abs(i1); // 12000
int absMinusInt = Math.abs(i2); // 12000
/*
* String to Integer : 오토 언박싱으로 즉시 int 타입으로 반환 받습니다.
* 부호가 존재하는 문자열을 Math.abs()로 변환하였을 시 "부호"는 유지되지 않습니다.
*/
String s3 = "+12000";
String s4 = "-12000";
int absPlusInt2 = Math.abs(Integer.parseInt(s3)); // 12000
int absMinusInt2 = Math.abs(Integer.parseInt(s4)); // 12000
3. 정수를 문자열로 변환(int to String) : String.valueOf()
int i1 = 12000;
String s1 = "+" + String.valueOf(i1);
String s2 = "-" + String.valueOf(i1);
9) 문자열 ↔ Date 변환
1. Date 타입을 문자열로 변환 : SimpleDateFormat.format()
/*
* Convert Date to String
*/
SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
SimpleDateFormat formatter3 = new SimpleDateFormat("HH");
String fullStr = formatter2.format(strToDate);
log.debug("fullStr :: " + fullStr); // 2019/05/01 00:59:29
String hourStr = formatter3.format(strToDate);
log.debug("hourStr :: " + hourStr); // 00
2. 문자열 Date 타입으로 변환 : SimpleDateFormat.parse()
String str4 = "2019/05/01 00:59:29";
SimpleDateFormat formatter4 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date strToDate2 = null; // Wed May 01 00:59:29 KST 2019
try {
strToDate2 = formatter4.parse(str4);
log.debug("strToDate :: " + strToDate2);
} catch (ParseException e) {
throw new RuntimeException(e);
}
3. Date 타입 연산 : Calendar
Calendar cal1 = Calendar.getInstance();
cal1.setTime(resultDate); // 시간 설정
cal1.add(Calendar.HOUR, 9); // 시간 연산
Date resultSumDate = new Date(cal1.getTimeInMillis()); // Wed May 01 09:59:29 KST 2019
10) 문자열 ↔ ASCII 코드 간의 변환
구분 | ASCII Code 범위 | 개발 코드 범위 |
대문자 | 65 ~ 90 | x >= 65 & x <= 90 |
소문자 | 97 ~ 122 | x >= 97 & x <= 122 |
숫자 | 48 ~ 57 | x >= 48 & x <= 57 |
알파벳 범위 | 65 ~ 90 && 97 ~ 122 | (x >= 65 & x <= 90) & (x >= 97 & x <= 122) |
1. 문자열을 ASCII 코드로 변환(String to ASCII Code) : String.charAt()
/*
* [CASE1] 문자열을 문자로 변환하고 다시 숫자(ASCII)로 변환하여 숫자 배열에 넣는 방식
* 주요 키워드 : charAt() 메서드를 이용하여 변환한다.
*/
String helloStr = "hello";
String[] helloStrArr = helloStr.split("");
int[] resultIntArr = new int[helloStrArr.length];
for (int i = 0; i < helloStrArr.length; i++) {
int helloItemNum = helloStr.charAt(i);
resultIntArr[i] = helloItemNum;
}
log.debug("resultIntArr :: " + Arrays.toString(resultIntArr)); // [104, 101, 108, 108, 111]
2. ASCII 코드를 문자열로 변환(ASCII Code to String) : (char)
/*
* 2. ASCII Code to String
*/
int asciiNumArr[] = {104, 101, 108, 108, 111};
char[] charArr = new char[asciiNumArr.length];
// int to String
for (int i = 0; i < asciiNumArr.length; i++) {
charArr[i] = (char) asciiNumArr[i];
}
log.debug("resultIntArr2 :: " + Arrays.toString(charArr)); // [h, e, l, l, o]
11) 정수(10진법) ↔ N진법 간의 변환
1. 정수(10진법)를 N진법으로 변환(Decimal to N 진법) : Integer.toString(num, n)
int num = 10;
/*
* [CASE1] 10진법을 2진법으로 변환 방법 : Decimal notation to binary notation
*/
String decimalToBinary1 = Integer.toString(num, 2); // "1010"
String decimalToBinary2 = Integer.toBinaryString(num); // "1010"
/*
* [CASE2] 10진법을 8진법으로 변환 방법: Decimal notation to octal notation
*/
String decimalToOctal1 = Integer.toString(num, 8); // "12"
String decimalToOctal2 = Integer.toOctalString(num); // "12"
/*
* [CASE3] 10진법을 16진법으로 변환 방법: Decimal notation to hexadecimal notation
*/
String decimalToHex1 = Integer.toString(num, 16); // "a"
String decimalToHex2 = Integer.toHexString(num); // "a"
/*
* [CASE3] 10진법을 n진법 변환 방법: Decimal notation to n notation
*/
String decimalToThree = Integer.toString(num, 3); // "101"
String decimalToFive = Integer.toString(num, 5); // "20"
String decimalToSeven = Integer.toString(num, 7); // "13"
2. N진법을 정수로 변환(N진법 to Decimal) : Integer.parseInt(str, n)
String bin = "1010"; // 2진법
String three = "101"; // 3진법
String five = "20"; // 5진법
String seven = "13"; // 7진법
String oct = "12"; // 8진법
String hex = "a"; // 16진법
int binarayToDecimal = Integer.parseInt(bin, 2); // 10
int threeToDecimal = Integer.parseInt(three, 3); // 10
int fiveToDecimal = Integer.parseInt(five, 5); // 10
int sevenToDecimal = Integer.parseInt(seven, 7); // 10
int octalToDecimal = Integer.parseInt(oct, 8); // 10
int hexToDecimal = Integer.parseInt(hex, 16); // 10
12) 문자열 배열 ↔ 정수 배열
1. 문자열 배열을 정수 배열로 변환 : Arrays.stream().mapToInt(Integer::parseInt).toArray()
String[] stringArray = {"1", "2", "3", "4", "5"};
int[] intArray = Arrays.stream(stringArray)
.mapToInt(Integer::parseInt)
.toArray();
2. 정수 배열을 문자열 배열로 변환: Arrays.stream().mapToInt(String::valueOf).toArray()
int[] intArray = {1, 2, 3, 4, 5};
String[] stringArray = Arrays.stream(intArray)
.mapToObj(String::valueOf)
.toArray(String[]::new);
오늘도 감사합니다. 😀
반응형
'Java > 이론 및 문법' 카테고리의 다른 글
[Java] 반복문의 제어문(Control Flow Statement) 이해하기 (0) | 2023.10.03 |
---|---|
[Java] 사용 목적에 따른 반복문(Loop) 이해하기 (0) | 2023.08.27 |
[Java] JDK(Java Development Kit), Open JDK 이해하기 (0) | 2023.06.25 |
[Java] UUID 이해 및 사용방법 (0) | 2023.03.09 |
[Java] Collection Framework(Queue, Stack, Deque)의 인터페이스와 구현체 이해하기 -2 : 정의 및 예시 (1) | 2023.03.08 |