본문 바로가기

이론/Java

Java 형변환

728x90
반응형

1. 기본형(Primitive Type) 형변환

기본형: byte, short, int, long, float, double, char, boolean 등
이 중 boolean은 형변환이 불가능

1-1. 자동 형변환

작은 타입 → 큰 타입으로 변환할 때 자동으로 이루어짐.

int i = 100; long l = i; // int → long (자동 형변환) 
float f = l; // long → float (자동 형변환) 
System.out.println(f); // 출력: 100.0

1-2. 강제 형변환

큰 타입 → 작은 타입으로 변환할 때 (타입)을 명시해야 함.

double d = 3.14; 
int i = (int) d; // double → int (소수점 제거됨) 
System.out.println(i); // 출력: 3

 데이터 손실 가능성 있음


🔹 2. 참조형(Reference Type) 형변환

객체들 간의 형변환. 상속 관계나 인터페이스 구현 관계가 있어야 가능.

2-1. 업캐스팅 (Upcasting)

하위 클래스 → 상위 클래스
자동 형변환이 이루어짐

package test;

class Animal {
    void sound() {
        System.out.println("동물 소리");
    }
}

class Dog extends Animal {
    void bark() {
        System.out.println("멍멍");
    }
}

public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog();
        Animal animal = dog;  // 업캐스팅 (자동)

        animal.sound();       // "동물 소리"
        dog.bark();
        // animal.bark();     // 오류: Animal 타입에는 bark() 없음
    }
}

2-2. 다운캐스팅 (Downcasting)

상위 클래스 → 하위 클래스
강제 형변환이 필요함 (하위타입)

package test;

class Animal {
	void sound() {
		System.out.println("동물 소리");
	}
}

class Dog extends Animal {
	void bark() {
		System.out.println("멍멍");
	}
}

public class Main {
	public static void main(String[] args) {
		// 업캐스팅: Dog → Animal (자동)
		Dog d = new Dog();
		Animal a1 = d; // 업캐스팅
		a1.sound(); // "동물 소리" (Animal 메서드 호출)

		// 다운캐스팅: Animal → Dog (강제)
		Dog d2 = (Dog) a1; // 실제 인스턴스가 Dog이므로 안전
		d2.bark(); // "멍멍"

		// 잘못된 다운캐스팅: Animal → Dog (런타임 오류)
		Animal a2 = new Animal(); // 실제 인스턴스는 Animal
		// Dog d3 = (Dog) a2; // 런타임 오류 발생!
		// d3.bark();

		// 위 코드 실행 시 ClassCastException 발생
	}
}
실제 인스턴스가 Dog가 아닐 경우 ClassCastException 발생

instanceof로 타입 체크

if (animal instanceof Dog) {
    Dog dog = (Dog) animal;
    dog.bark();
}

3. 문자열과 숫자 간 형변환

문자열 → 숫자 등

 
int i = 123;
double d = 3.14;
boolean b = true;
char c = 'A';

System.out.println(String.valueOf(i));  // "123"
System.out.println(String.valueOf(d));  // "3.14"
System.out.println(String.valueOf(b));  // "true"
System.out.println(String.valueOf(c));  // "A"

숫자 → 문자열

 
int i = 456;
String str = String.valueOf(i);   // "456"

정리 표

형변환 종류자동/강제예시 코드
int → long 자동 long l = 10;
double → int 강제 int i = (int) 3.14;
Dog → Animal 자동 Animal a = new Dog();
Animal → Dog 강제 Dog d = (Dog) a;
String → int 강제(메서드) int i = Integer.parseInt("123");
int → String 강제(메서드) String s = String.valueOf(123);

 

728x90
반응형

'이론 > Java' 카테고리의 다른 글

Java static  (0) 2025.07.06
Java 배열  (0) 2025.07.06
OOP) 변수 (Instance, Parameter, Local, Global)  (0) 2024.01.02
OOP) 클래스와 객체  (0) 2024.01.02
Java) 변수와 데이터 타입, 연산자  (0) 2023.12.27