타입 변환(Casting)을 이해하기 어렵다는 사람들이 종종 보인다.
내가 타입 변환에 대해 이해한 방식을 한 번 작성해보려고 한다.
가정
Parent라는 부모 클래스가 있고, Child라는 클래스가 Parent 클래스를 extends(상속)했다고 가정해보자.
이때 아래 사진처럼 Parent Class는 큰 물통에, Child Class는 작은 물통에 비유를 할 수 있다.
이 가정과 함께 코드를 보면서 이해해보자.
Parent p = new Child();
위 코드는 new Child()를 통하여 Child 객체를 만들어 Parent 객체에 담고 있다.
즉, 작은 물통의 물을 큰 물통에 담고 있는 것이다.
이럴 경우에는 물이 넘칠 일이 없기 때문에 옮겨담을 물통을 따로 챙기지 않아도 된다.
👉 작은 크기의 타입을 큰 크기의 타입에 담기 때문에 앞에 (Parent)를 쓰지 않아도 자동으로 타입 변환이 된다. 부모 객체가 더 상위요소이므로 UpCasting(업캐스팅)이라고도 한다.
Child c = new Parent();
위 코드는 new Parent()를 통하여 Parent 객체를 만들어 Child 객체에 담고 있다.
즉, 큰 물통의 물을 작은 물통에 담고 있는 것이다.
이럴 경우에는 물이 넘칠 가능성이 있다.
👉 큰 크기의 타입을 작은 크기의 타입에 담으려고 하고 있기 때문에 자동 타입 변환이 불가능하다.
👉 이때 필요한 것이 강제 타입 변환이다. 자식 객체가 더 하위요소이므로 DownCasting(다운캐스팅)이라고도 한다.
Child c = (Child) new Parent();
앞에 무조건 (Child)를 써줘야 한다.
그리고 주의해야 할 점은 다운캐스팅은 아무때나 쓸 수 있는 것이 아니다.
업캐스팅한 객체를 다시 되돌릴 때 사용한다.
업캐스팅 되지 않았던 그냥 부모 객체를 다운캐스팅 하려고 하면 예외(ClassCastException)가 발생한다.
'Language > Java' 카테고리의 다른 글
[Java] Math.sqrt() 함수 (1) | 2024.10.16 |
---|---|
짝수와 홀수 (2) | 2024.09.12 |
[Java] 추상 클래스와 인터페이스의 차이 (4) | 2024.04.08 |
[정보처리기사] 2023년 Java 프로그래밍 언어 문제 (0) | 2024.04.08 |
[정보처리기사] 2022년 Java 프로그래밍 언어 문제 (0) | 2024.04.07 |