본문 바로가기
Language/Java

[Java 기초] 1. 데이터 타입과 형변환

by 잘 까먹는 다람쥐 2025. 2. 5.

Java 에서 데이터 타입은 크게

기본 타입 (Primitive Type)참조 타입 (Reference Type) 으로 나눌 수 있다.

 

그리고, 형 변환(Casting) 은 변수의 타입을 변환하는 행위인데,

이것또한, 암시적(Implicit) 변환명시적(Explicit) 변환이 존재한다.

 


1. Java 데이터 타입의 종류

1.1 기본 데이터 타입 (Primitive Types)

데이터 타입 크기 범위 기본값 예시
byte 1byte -128 ~ 127 0 byte b = 10;
short 2bytes -32,768 ~ 32,767 0 short s = 100;
int 4bytes -2,147,483,648 ~ 2,147,483,647 0 int i = 1000;
long 8bytes -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 0L long l = 100000L;
float 4bytes ±3.4x10^38 (7자리 정밀도) 0.0f float f = 3.14f;
double 8bytes ±1.7x10^308 (15자리 정밀도, float 보다 더 정밀함) 0.0d double d = 3.14159;
char 2bytes 0 ~ 65,535 (유니코드 문자) '\u0000' char c = 'A';
boolean 1bit true / false false boolean flag = true;

1.2 참조 데이터 타입 (Reference Types)

  • 클래스 (Class)
  • 배열 (Array)
  • 인터페이스 (Interface)
  • 열거형 (Enum)

2. 형 변환 (Casting)

2.1 암시적 형 변환 (Implicit Casting)

> 작은 크기의 타입에서 큰 크기의 타입으로 변환할 때, 자동으로 변환된다.

byte → short → int → long → float → double

 

ex) 

int num = 100;
double result = num;  // int에서 double로 자동 변환
System.out.println(result);  // 출력: 100.0

 

※  byte에서 char로 형 변환이 불가능한 이유

byte와 char는 메모리 크기는 비슷하지만, 값의 표현 범위의미적 차이 때문에 암시적 형 변환이 허용되지 않는다.

  1. 값의 범위 차이
    • byte: -128 ~ 127 (음수 포함)
    • char: 0 ~ 65,535 (양수만)
    byte는 음수값을 가질 수 있지만, char는 **양수값(유니코드 문자)**만 표현할 수 있다. 따라서 byte의 음수값을 char로 변환할 때 충돌이 발생할 수 있으므로 암시적 변환이 불가능하다!
  2. 의미적 차이
    • byte: 숫자 데이터 타입 (정수)
    • char: 문자 데이터 타입 (유니코드 문자)
    byte의 값은 숫자로 해석되지만, char는 해당 숫자를 유니코드 문자로 해석합니다. 이런 차이로 인해 명시적 형 변환이 필요합니다.

예제 코드 : byte → char 형 변환

public class ByteToCharExample {
    public static void main(String[] args) {
        byte b = 65;  // A의 유니코드 값
        char c = (char) b;  // 명시적 형 변환이 필요
        System.out.println("byte → char: " + c);  // 출력: A

        byte negativeByte = -1;
        char convertedChar = (char) negativeByte;
        System.out.println("byte(-1) → char: " + (int) convertedChar);  // 출력: 65535
    }
}

위 코드에서 -1을 char로 변환하면 65535로 변환된다.

이는 2의 보수 표현 방식 때문이며, char는 양수값만 표현하기 때문에 결과적으로 65535로 해석된 것이다.

 


2.2 명시적 형 변환 (Explicit Casting)

>큰 크기의 타입을 작은 크기의 타입으로 변환할 때에는 명시적으로 형 변환을 해야한다.

하지만, 이 경우 데이터의 손실이 발생할 수 있으니 주의해야 한다!

 

ex)

double pi = 3.14159;
int intPi = (int) pi;  // double을 int로 명시적 변환
System.out.println(intPi);  // 출력: 3 (소수점 이하 손실)

 


 

 

3. 예제 코드

public class CastingExample {
    public static void main(String[] args) {
        // 암시적 형 변환
        int a = 100;
        long b = a;
        double c = b;
        System.out.println("암시적 변환: " + c);

        // 명시적 형 변환
        double x = 123.456;
        int y = (int) x;
        System.out.println("명시적 변환: " + y);

        // char와 int 사이의 변환
        char ch = 'A';
        int ascii = ch;
        System.out.println("char → int: " + ascii);

        int num = 66;
        char convertedChar = (char) num;
        System.out.println("int → char: " + convertedChar);
    }
}

 


 

 

개발을 하며 데이터 타입과 형 변환은 가장 기초적이면서 중요한 내용이다.

 

메모리 관리와 성능에 직접적인 영향을 미칠 수 있으며,

 

혹시나 잘못된 형변환으로 예상치 못한 결과값을 받아볼 수도 있다!