'다형성'이란 객체지향언어(oop)의 특징 중 하나이다. 하나의 객체나 메소드가 여러가지 형태를 가질 수 있는 것인데
이를 보여주는 내용이 앞에서 설명했던 '오버로딩'과 '오버라이딩' 이 있으며, 추가적으로 오늘 설명할 '형변환'이 있다.
형변환은 '캐스팅'이라고도 불리며, 타입을 변환하는 것으로,
자바의 상속 관계에 있는 부모와 자식 클래스 관계에서 서로 간의 형변환이 사용 가능하다.
2024.01.13 - [IT 언어/Java] - [Java] 오버로딩과 오버라이딩
1. 형변환
기본 개념은 상위 클래스(부모) > 하위 클래스(자식) 이기 때문에
- 자식을 인스턴스화(객체화) 시켜 부모 타입의 변수에 담는 건 가능. >> 부모 bumo = new 자식();
- 부모 클래스 객체를 자식 타입 변수에 담기 위해선 부모 객체를 자식 타입으로 형변환하면 가능. >> 자식 jasik = (자식)bumo();
- 부모 클래스가 자식 클래스보다 상위이나, 상속의 기본 개념인 오버라이딩이 적용된다
이거... 이해가 안돼서 꽤나 애먹었는데 영상 강의도 검색해가면서 보면 이해하는데 도움이 될 거 같다.
그럼 이렇게 어려움에도 사용하는 이유는?? 코드 반복을 피하기 위해서.
아래 '예제 2.'에서 처럼 각 클래스에서 정의한 eat(), bark() 를 사용할 때,
각각의 클래스의 객체를 생성하는 코드를 일일이 다 쓰지 않고 업캐스팅 한번으로 코드 단순화를 할 수 있다.
1. 업캐스팅
- 의미 : 자식 클래스의 객체가 부모 클래스 타입으로 형변환 되는 것
- 형태 : 부모 bumo = new 자식();
의미에 "되는 것"이라고 쓴 이유는, 별도로 데이터 타입을 명시하지 않아도 형변환이 진행되기 때문.
2. 다운캐스팅
- 의미 : 부모 객체를 자식 형태 타입으로 형변환 하는 것 (업캐스팅 된 것을 원래 상태로 돌리는 것 = 업캐스팅 선행 필수)
- 형태 : 자식 jasik = (자식)bumo();
의미에 "하는 것"이라고 쓴 이유는, 별도로 데이터 타입을 명시해야 형변환이 진행되기 때문.
3. 예제 (2개)
예제 1.
예제 2.
나중에 클래스 타입의 변수를 메소드 인스턴스에 막 넣기 시작하면서 헷갈리기 때문에
고생하지 않기 위해선 자주 봐주는게 도움이 될 것 같다
'IT 언어 > Java' 카테고리의 다른 글
[Java] 인터페이스 (사용하는 이유와 예제 2가지) (0) | 2024.01.14 |
---|---|
[Java] 추상 메소드와 추상 클래스 (abstract) (0) | 2024.01.14 |
[Java] 오버로딩과 오버라이딩 (0) | 2024.01.13 |
[Java] 상속 (extends) --*Q/A (0) | 2024.01.10 |
[Java] 내부 클래스 (인스턴스, 정적, 지역, 익명) (0) | 2023.12.19 |