타입 변환[이것이 자바다]

SUUUI·2025년 4월 5일

java

목록 보기
8/16

자동 타입 변환

자바의 기본 타입들은 자동으로 타입을 변환할 수 있다 .
주로 값의 허용 범위가 작은타입이 허용 범위가 큰 타입으로 대입될 때 발생한다

자동 형 변환의 순서
byte(1) → short(2) → int(4) → long(8) → float(4) → double(8)

ex)int num = 12;
   Long num1 = num;
   //int 타입인 num은 Long 타입으로 자동으로 타입이 변환된다 

정수타입이 실수 타입으로 대입될 경우엔 무조건 자동 타입 변환이 된다.
실수타입 > 정수 타입 (표현 가능한 값의 범위 가 실수타입이 더 크기 때문)

long value1 = 10000000000L; 
float value2 = value1; // long -> float 
double value3 = value1; // long -> double 

✅byte -> char 타입 변환은 X
: char 타입의 허용범위는 음수를 포함하지 않지만, byte 타입은 음수를 포함하기 때문에 안된다

강제 타입 변환

: 큰 허용 범위 타입을 작은 허용 범위 타입으로 쪼개어서 저장하는 것
-> 큰 케이크를 작은 조각케이크로 쪼개어 한 조각만 작은 그릇에 넣는 느낌

작은 허용 범위 타입 = (작은 허용 범위 타입)큰 허용 범위 타입

큰 허용 범위 타입이 작은 허용 범위 타입으로 형변환이 이루어진다
() -> 캐스팅 연산자 라고 하며 괄호안에 들어가는 타입이 캐스팅 될 타입이다 .

int -> byte 형변환 예시

int a = 20;   //int 4byte
byte b = (byte)a; //byte 1byte

강제 타입 변환의 목적은 원래 값이 유지되면서 타입만 바뀌는 것이다.
그렇기 때문에 변환할 작은 허용 범위 타입에 저장될 수 있는 값을 가지고 형변환을 해야 한다.

int a = 130;   // int는 4바이트
byte b = (byte)a;  // byte는 1바이트(범위: -128~127)
System.out.println("원래 값: " + a);
System.out.println("변환 값: " + b);  // 결과: -126

1바이트에 담을 수 있는 값은 -128~127 이기 때문에 130의 값을 가지고 형변환을 하면
overflow 가 발생하게 된다 .
오버플로우 계산: 130 - 256 = -126 (256은 byte의 범위 크기)

✅바이트 오버플로우
바이트(byte)는 자바에서 1바이트(8비트)를 차지하는 정수 타입으로,
-128부터 127까지의 값을 저장할 수 있다.
바이트 타입의 범위를 초과하는 값을 저장하려고 할 때 오버플로우가 발생함.

작동 원리:

바이트는 8비트로 구성되어 있어 2^8 = 256개의 서로 다른 값을 표현할 수 있다.
이 256개의 값은 -128부터 127까지의 범위가 있다 .
오버플로우가 발생하면 값이 범위의 한쪽 끝에서 다른 쪽 끝으로 "순환"하게 된다 .

문자타입에서 기본타입으로 형변환 하기

문자열을 숫자타입으로 변환하여 숫자 연산을 하는 경우도 흔하다 .
String(문자열 , 참조타입) 을 기본타입 으로 변환하는 예제를 알아보자

String strNum = "100";
int num = Integer.parseInt(strNum);
System.out.println("변환된 정수: " + num);  // 출력: 변환된 정수: 100

✅만약 변환 불가능한 문자열을 변환하려고 하면 NumberFormatException이라는 예외가 발생한다.
쉽게 말하자면 , 문자열의 값이 숫자가 아니면 정수형으로 변환이 안된다는뜻

ex) String str = "취업이 안돼" ;
long choeup = Long.parseLong(str);

//NumberFormatException 발생

JAVA 의 2가지 타입 구분 (유의)
기본 타입(primitive types): int, double, boolean, char, byte, short, long, float
참조 타입(reference types): 모든 객체(Integer, Double, String 등)
"참조 타입"은 "기본 타입" 에 대응하는 wrapper class 이다 .
기본 타입의 값을 객체로 감싸서 연산을 할 수 있게 다양한 메서드를 제공해준다 .


기본 타입 <-> 래퍼 클래스(참조 타입)
int <-> Integer
long <-> Long
double <-> Double
boolean <-> Boolean
char <-> Character
byte <-> Byte
short <-> Short
float <-> Float


기본 타입 -> 문자열 변경

기본타입을 문자열로 변경할땐 String.ValueOf() 을 사용하게 된다

int a = 10;
String str = String.ValueOf(a);
System.out.println("str" + str);
//str = "10"; 
profile
간단한 개발 기록

0개의 댓글