본문 바로가기
Algorithm/Java

Java - 형변환 (cast, parse)

by ZaRi 2025. 9. 20.

아무래도 코테 전에 형변환을 확실히 하고 가는 게 좋을 것 같아 정리하려고 한다.

 

자료형

우선 자료형부터 집고 넘어가자.

구분 타입 크기 범위 기본값 설명
정수형 byte 1 byte -27 ~ 27 - 1 0 -
short 2 bytes -215 ~ 215 - 1 0 -
int 4 bytes -231 ~ 231 - 1 0 정수 연산의 기본 단위
long 8 bytes -263 ~ 263 - 1 0L int 범위를 넘는 큰 정수 (값 뒤에 L 붙임)
실수형 float 4 bytes (IEEE 754 표준) 0.0f 소수점 (값 뒤에 f 붙임)
double 8 bytes (IEEE 754 표준) 0.0 실수 연산의 기본 단위, 더 정밀함
문자형 char 2 bytes 0 ~ 216 - 1 \u0000 문자 하나 (작은따옴표 '' 사용)
논리형 boolean 1 byte true, false false 참 또는 거짓

 

우선 기본 자료형의 범위 형태는 위와 같다.

참고로 String 문자열은 클래스다. 객체이다.

 

 

 

자동 형변환

크기가 작은 타입에서 큰 타입으로 넘어갈 때는 자동형 변환이 일어난다.

int numInt = 10;
long numLong = numInt;      // int(4) -> long(8), 자동 변환
double numDouble = numInt;  // int(4) -> double(8), 자동 변환
// numDouble은 이제 10.0 이라는 값을 가집니다.

char charA = 'A';
char char_a = 'a';

int intA = charA; // 'A'의 유니코드(이자 ASCII) 값인 65가 저장됨
int int_a = char_a; // 'a'의 유니코드(이자 ASCII) 값인 97이 저장됨

 

 

 

강제 형변환

자동 형변환과는 반대로 크기가 큰 타입에서 작은 타입으로 넘어갈 때 발생한다. 데이터 손실이 발생한다.

double numDouble = 10.5;
// int numInt = numDouble; // 컴파일 에러! 자동으로 안 해줌

int numInt = (int) numDouble; // (int)를 붙여 강제로 변환
// numInt는 이제 10 이라는 값을 가집니다. (소수점 0.5가 손실됨)

long bigNumLong = 3000000000L; // 30억 (int 범위 초과)
int numInt2 = (int) bigNumLong;
// numInt2는 30억이 아닌, 전혀 다른 이상한 값을 가집니다. (데이터 손실)

 

 

 

파싱 parse

문자열을 다른 타입으로 변환하는 것을 말한다.

 

숫자형으로 파싱

String strNum = "123";
String strDouble = "3.14";

// String "123"을 int 123으로 변환
int num1 = Integer.parseInt(strNum);

// String "123"을 long 123으로 변환
long num2 = Long.parseLong(strNum);

// String "3.14"를 double 3.14로 변환
double num3 = Double.parseDouble(strDouble);

// num1과 100을 더하는 계산이 가능해짐
System.out.println(num1 + 100); // 출력: 223

 

 

Boolean 파싱

// --- true가 되는 경우 ---
String strTrue1 = "true";
String strTrue2 = "True"; // 대소문자 구분 없음
String strTrue3 = "TRUE";

boolean bool1 = Boolean.parseBoolean(strTrue1); // true
boolean bool2 = Boolean.parseBoolean(strTrue2); // true
boolean bool3 = Boolean.parseBoolean(strTrue3); // true


// --- false가 되는 경우 ( "true"가 아닌 모든 것 ) ---
String strFalse1 = "false"; // "false"라는 문자열도 false가 됩니다.
String strFalse2 = "1";     // 숫자 1도 false 입니다. (C언어 등과 다름)
String strFalse3 = "hello"; // 아무 문자열
String strFalse4 = "";      // 빈 문자열
String strFalse5 = null;    // null 값 (에러가 나지 않고 false가 됨)

boolean bool4 = Boolean.parseBoolean(strFalse1); // false
boolean bool5 = Boolean.parseBoolean(strFalse2); // false
boolean bool6 = Boolean.parseBoolean(strFalse3); // false
boolean bool7 = Boolean.parseBoolean(strFalse4); // false
boolean bool8 = Boolean.parseBoolean(strFalse5); // false

System.out.println("strTrue1 -> " + bool1);
System.out.println("strFalse1 -> " + bool4);
System.out.println("strFalse2 -> " + bool5);

 

 

Char 파싱

String str = "Hello";
// H e l l o
// 0 1 2 3 4  <- 인덱스 번호

// 0번째 문자 'H'를 추출
char ch1 = str.charAt(0);

// 2번째 문자 'l'를 추출
char ch2 = str.charAt(2);

System.out.println("0번째 문자: " + ch1); // 출력: 0번째 문자: H
System.out.println("2번째 문자: " + ch2); // 출력: 2번째 문자: l




// char 배열과 다르다
char[] charArray = {'H', 'e', 'l', 'l', 'o'};
char firstCharFromArray = charArray[0]; // 'H'
charArray[0] = 'J'; // 배열의 내용을 직접 수정 가능 ('Jello')

이건 진짜 많이 쓰니까 중요하게 보자!!

 

 

 

정리

구분 형변환 (Type Casting) 파싱 (Parsing)
목적 숫자 타입 간의 범위 변경 문자열(String)을 실제 숫자/다른 타입으로 변환
원본 데이터 int, long, double 등 숫자 타입 오직 String
문법 (바꿀타입) 변수명; 래퍼클래스.parse타입(문자열);
예시 int i = (int) 3.14; int i = Integer.parseInt("3");
사용 상황 정수/실수 계산 시 타입을 일치시킬 때 콘솔/파일 입력을 계산 가능한 숫자로 바꿀 때

 

댓글