본문 바로가기

JAVA/개별학습

[JAVA] 타입변환

1. 타입 변환 (Type Conversion)

  • 하나의 타입을 다른 타입으로 바꾸는 것(= 형변환) 
  • ex) byte → int  /  int → byte
  • 연산 수행시 같은 타입만 가능 → 형변환 필요
    - 낮은 자료형으로는 강제 형변환 (데이터의 손실 발생)
    - 높은 자료형으로는 자동 형변환
  • 기본 자료형 중 boolean 제외 모든 자료형은 형변환 가능

 


2. 자동 형변환 (Promotion)

  • 묵시적 / 암시적 형변환
  • 프로그램 실행 도중 자동으로 타입 변환
    - 작은 크기를 가지는 타입이 큰 크기를 가지는 타입에 저장될 때
    - 기존의 값을 최대한 보존할 수 있는 큰 타입으로는 자동 형변환 가능 (데이터 손실 최소화)
  • 자동형변환 가능 방향

 

 

2-1. long & float 타입 크기

  • 메모리 설계상 정수 타입보다 실수 타입이 더 큼

    double l = (Math.pow(2, 63))-1; 		// long
    double f = 3.4 * (Math.pow(10, 38));	// float

    System.out.println(l);		 // 9.223372036854776E18
    System.out.println(f); 		 // 3.4E38
    System.out.println(l < f);   // true

 

2-2. char & byte 타입 크기

  • char 타입은 문자 자료형이지만, 아스키 코드 숫자를 저장하기에 사실상 정수형 타입
  • byte → char 변환 불가
    ⇒ char 타입은 음수를 표현할 수 없기 때문
    short 타입은 음수 표현 가능하여 변환 가능

 

2-3. 연산식 자동 형변환

  • 데이터 연산은 같은 타입의 피연산자 간에만 수행
    ⇒ 서로 다른 타입의 피연산자가 있을 경우 두 피연산자 중 크기가 큰 타입으로 자동 변환된 후 연산 수행

 


3. 강제 형변환 (Casting)

  • 명시적 형변환
  • 개발자가 값의 타입을 강제적으로 변환
    - 큰 크기의 타입 → 작은 크기의 타입 (데이터 손실 발생)
  • 데이터의 손실 → 정확한 연산 수행 X → 예상하지 못한 결과 가능성
  • 실수 타입 → 정수 타입 : 소수점 이하 버림
  • 캐스트 연산자를 사용한 형변환은 일시적
    - 피연산자의 자체 자료형에는 영향 X

 

3-1. float 과 int 형변환 주의점

  • 정수 타입 → 실수 타입 : 정밀도 손실 발생 주의
    - 모든 int 값을 실수 타입으로 안전하게 변환시키는 double 타입 사용

 

3-2. 형변환 안전장치

  • 데이터 손실 방지를 위한 최대값(max) & 최소값(min)   /  boolean, char 타입 제외
기본 타입 최대값 상수 최소값 상수
byte Byte.MAX_VALUE Byte.MIN_VALUE
short Short.MAX_VALUE Short.MIN_VALUE
int Integer.MAX_VALUE Integer.MIN_VALUE
long Long.MAX_VALUE Long.MIN_VALUE
float Float.MAX_VALUE Float.MIN_VALUE
double Double.MAX_VALUE Double.MIN_VALUE

 

'JAVA > 개별학습' 카테고리의 다른 글

[JAVA] 추상클래스  (0) 2024.02.21
[JAVA] 배열  (0) 2024.02.21
[JAVA] 자료형  (0) 2024.02.21
[JAVA] 변수  (0) 2024.02.21
[JAVA] 자바 코드  (0) 2024.02.21