[자바/JAVA] 참조 변수 형변환 : 상속 관계 일때

자바에서 서로 다른 데이터 타입 간 표현이나 연산을 위해 데이터의 타입을 바꿔야 하는 경우가 있다. 데이터의 타입을 바꾸는 걸 형변환이라고 한다.

기본형 형변환 : int <-> String

기본형 타입 간 형변환 중 int와 String 간의 형변환이 자주 사용된다.

int -> String

자바에서는 서로 다른 데이터 타입 데이터가 연산되면 크기가 더 작은 데이터 타입이 큰쪽의 데이터 타입으로 자동 변환된다. String(12 byte)은 int(4 byte) 보다 크다. 이런 특성을 감안해 연산자를 사용하면 간단하게 형변환 가능하다.

Ex)

String s = 100 + ""; // 100은 "100"으로 변환

String -> int

이 경우 자바가 기본적으로 제공하는 Integer 클래스의 parseInt 메서드를 활용하면 된다. 다만 숫자만 포함된 String형이어야 변환 가능하다.

Ex)

int i = Integer.parseInt("100"); // "100"이 100으로 변환. 

참조 변수 간 형변환

참조 변수 간의 형변환은 상속 관계에 있는 타입에 한해서 가능하다. 즉, 자손 타입 <-> 조상 타입 간 형변환이 가능한데, 두 경우 역시 표현 문법이 다르다.

  • 자손 타입 -> 조상 타입 (형변환 생략됨)
  • 조상 타입 -> 자손 타입 (형변환 생략 못함)

Ex)

class Car { // 조상 클래스 Car
   String color;
   int door;

   void drive(){}
   void stop() {}
   }

class FireEngine extends Car { // 자손 클래스 FireEngine
    void water(){}
}

public static void main(String[] args) {
    Car car = null; // Car 타입의 참조변수 car에 null 값 선언
    FireEngine fe = new FireEngine(); // FireEngine 타입의 참조변수 fe로 FireEngine 객체 생성
    FireEngine fe2 = null; // FireEngine 타입의 참조변수 fe2로에 null 값 선언

    car = fe; 
        /*조상 <- 자손 형변환. "(데이터 타입)값" 같은 형식의 형변환 생략함.
        조상타입의 참조변수로 자손의 인스턴스를 참조. 
        기본형 변수의 형변환에서 작은 자료형에서 큰 자료형의 형변환은 생략이 가능하듯이, 
        참조형 변수의 형변환에서는 자손타입의 참조변수를 조상타입으로 형변환하는 경우에는 형변환을 생략.*/
    car.drive(); // okay.
    car.water(); // error. FireEngine 클래스에만 있는 water() 메서드는 사용 못함.

    fe2 = (FireEngine)car; 
    	/* 자손 <- 조상 형변환. 
        자손타입의 참조변수로 조상의 인스턴스를 참조 (FireEngine)로 형변환.*/
    fe2.drive(); // okay.
    fe2.water(); // okay.
}
반응형

댓글

Designed by JB FACTORY