Today Yewon Learned

[JAVA] Casting(캐스팅 : 형변환) 본문

JAVA

[JAVA] Casting(캐스팅 : 형변환)

데브워니 2021. 11. 12. 11:44

자바의 데이터형

■ 기본형(Primitive Type)

- Boolean Type(boolean)

- Numeric Type(Short, int, long, float, double, char)

 

■ 참조형(Reference Type)

- Class Type

- Interface Type

- Array Type

- Enum Type 등

 

 

캐스팅(Casting)

- 캐스팅(Casting)은 형변환이라고 부르기도 함

- 객체지향(OOP)에서의 다향성(Polymorphism)에 있어 매우 중요함

- 다형성과 관련

- 종류 : UpCasting, DownCasting

 

■ 기본형(Primitive Type)의 캐스팅

- 보통 "데이터 손실"을 막기위해 동작

int a = 1.2345; // 컴파일 에러
int newA = (int)1.2345; // 캐스팅

 

■ 참조형(Reference Type)의 캐스팅

- 기본적으로 캐스팅은 서로 관련이 있는 데이터끼리의 변환을 목표로 함

- 즉 레퍼런스 타입에서는 서로 상속(extends)나 구현(implements) 관계 등에 있지 않은 전혀 다른 두 객체라면,

캐스팅이 일어날 수 없음

Class Candy {
  String flavor;
  int price;
}
Class Cup {
  String shape;
  boolean isCover;
}

 

■ 업 캐스팅(UpCasting)

- 자식 클래스가 부모 클래스 타입으로 캐스팅 되는 것

- Java에서 서브 크랠스는 슈퍼 클래스의 모든 특성을 상속 받음

- 즉 서브 클래슨느 슈퍼 클래스로 취급될 수 있음

예시) 슈퍼 클래스 : 생물, 서브 클래스 : 사람

사람은 생물이다. 라고 할 수 있음

class Human{
// 생략
}

class Student extends Human{
// 생략
}
public class CastingTest {
	public static void main(String[] args) {
    
    	Student student = new Student();
        Human human = student; 
        // 자식 클래스(Student)가 부모 클래스(Human)타입으로 캐스팅
  	}
}
package study.test.java;


class Person{
	String name;

	public Person(String name) {
		this.name = name;
	}
}

class Student extends Person{
	
	String age;
	
	public Student(String name) {
		super(name); // super 키워드에 대해서는 따로 설명하겠다.
	}
}
public class CastingTest {
	public static void main(String[] args) {
    
    	// student 참조변수를 이용하면 age, name에 접근 가능하다.
    	Student student = new Student("도리도리"); 
	
    	// person 참조변수를 이용하면 Student 객체의 멤버 중에서 Person 클래스의 멤버에만 접근이 가능하다.
	Person person = student; // "업 캐스팅"
    
	person.name = "세진세진";
	person.age = "24"; // 컴파일 오류 ~!
	
	}
}

위 코드에서, person 참조변수는 Student 객체를 가르킴

하지만 Person 타입이므로 자신의 클래스에 속한 멤버만 접근 가능하기 때문에 person.age를 했을 때 오류 발생

 

■ 다운 캐스팅(DownCasting)

- 부모 클래스가 자식 클래스 타입으로 캐스팅 되는 것

- 자신의 고유한 특성을 잃은 서브 클래스의 객체를 복구 시키는 것 (= 업캐스팅 된 상태를 원상태로 다시 되돌림)

- 명시적 타입 지정 필요

- 업캐스팅이 선행 된 후 진행되어야 함

class Human{
// 생략
}

class Student extends Human{
// 생략
}
public class CastingTest {
	public static void main(String[] args) {
    
    	Human human = new Human();
        Student student = (Student) human;
        // 부모 클래스(Human)이 자식 클래스(Student)타입으로 캐스팅
        // 위의 구문은 오류지만, 이런 식으로 된다는 걸 보여주기 위한 것이니 참고만 하자.
        // 실제로 다운캐스팅은 업 캐스팅이 선행된 후 되어야 한다.
  	}
}

 

[참조] : https://velog.io/@sezzzini/Java-Casting

'JAVA' 카테고리의 다른 글

[JAVA] request.getParameter() 메소드  (0) 2021.11.30
[JAVA] Generic(제네릭)  (0) 2021.11.15
[JAVA] 상속  (0) 2021.11.11
[JAVA] Setter 메소드와 Getter 메소드  (0) 2021.11.10
[JAVA] HashMap  (0) 2021.11.10
Comments