JAVA

형변환

🤖 Play with Android 🤖 2021. 7. 2. 11:22
728x90


형변환(캐스팅, casting)이란?

프로그램을 작성하다 보면 같은 타입뿐만 아니라 서로 다른 타입 간의 연산자를 수행해야 하는 경우도 있다. 이럴 때는 연산자를 수행하기 전에 타입을 일치시켜야 하는데, 변수나 리터럴의 타입을 다른 타입으로 변환하는 것을 '형변환(casting)'이라고 한다.

 

 

 

 

형변환 방법

형변환하고자 하는 변수나 리터럴의 앞에 변환하고자 하는 타입을 관호와 함께 붙여주기만 하면 된다.

(타입)피연산자

예를 들어 double형의 실수를 int형의 정수로 형변환 해보자

double d = 36.7;
int score = (int)d; // double타입의 변수 d를 int타입으로 형변환

// 형변환 결과인 36을 변수 score에 저장한다.

여기서 눈여겨볼 점은 double타입의 값을 int타입으로 변환할 때 소수점 이하의 값은 반올림이 아닌 버림으로 처리된다는 점이다.

 

 

 

 

 

클래스 형변환

부모 타입으로 자식 객체를 참조하게 되면 오직 부모가 가지고 있는 메서드만을 사용할 수 있다. 

이럴 때 자식이 가지고 있는 메서드를 사용하고 싶다면 형변환을 사용해야 한다.

 

//부모클래스
public class vehicle {
	public void run() {
		System.out.println("vehicle의 run메소드");
	}
}
//자식클래스
public class Bus extends vehicle{
	public void ppangppang() {
		System.out.println("빵빵");
	}
}

public class BusExam{
	public static void main(String[] args) {
		vehicle c = new Bus();
		c.run();
		
		Bus v = (Bus) c; //vehicle형태인 c를 Bus로 형변환
		v.run();
		v.ppangppang();
	}
}

 

 

위에서 ppangppang() 메소드를 호출하고 싶다면 Bus타입의 참조 변수로 참조해야 한다.

 

 

중요한 것은

  • 객체들끼리도 형변환이 가능하다. 단 상속관계에 있었을 때만 가능하다.
  • 부모 타입으로 자식 타입의 객체를 참조할 때는 보이지 않게 형변환이 일어난다.
  • 부모 타입의 객체를 자식 타입'으로' 참조하게 할 때는 명시적으로 형변환 해주어 한다. 단 이렇게 형변환할 때에는 부모가 참조하는 인스턴스가 형변환 하려는 자식 타입일 때만 가능하다.