'다형성'이란 객체지향언어(oop)의 특징 중 하나이다. 하나의 객체나 메소드가 여러가지 형태를 가질 수 있는 것인데

이를 보여주는 내용이 앞에서 설명했던 '오버로딩''오버라이딩' 이 있으며, 추가적으로 오늘 설명할 '형변환'이 있다.

형변환은 '캐스팅'이라고도 불리며, 타입을 변환하는 것으로,

자바의 상속 관계에 있는 부모와 자식 클래스 관계에서 서로 간의 형변환이 사용 가능하다.

 

 

2024.01.13 - [IT 언어/Java] - [Java] 오버로딩과 오버라이딩

 

[Java] 오버로딩과 오버라이딩

다형성을 배우기에 앞서 필요한 개념이 '오버로딩'과 '오버라이딩' 이다. 1) 부모 클래스의 메소드에 매개변수를 넣어 사용하면 '오버로딩' 2) 부모 클래스의 메소드의 실행 내용을 바꾸면 '오버

padac-padac.tistory.com

 

 

 

1. 형변환

기본 개념은 상위 클래스(부모) > 하위 클래스(자식) 이기 때문에

  1. 자식을 인스턴스화(객체화) 시켜 부모 타입의 변수에 담는 건 가능.                                                             >>  부모 bumo = new 자식(); 
  2. 부모 클래스 객체를 자식 타입 변수에 담기 위해선 부모 객체를 자식 타입으로 형변환하면 가능.   >>  자식 jasik = (자식)bumo();
  3. 부모 클래스가 자식 클래스보다 상위이나, 상속의 기본 개념인 오버라이딩이 적용된다

 

 

이거... 이해가 안돼서 꽤나 애먹었는데 영상 강의도 검색해가면서 보면 이해하는데 도움이 될 거 같다.

그럼 이렇게 어려움에도 사용하는 이유는?? 코드 반복을 피하기 위해서.

아래 '예제 2.'에서 처럼 각 클래스에서 정의한 eat(), bark() 를 사용할 때,

각각의 클래스의 객체를 생성하는 코드를 일일이 다 쓰지 않고 업캐스팅 한번으로 코드 단순화를 할 수 있다.

 

 

 

1. 업캐스팅

  • 의미 : 자식 클래스의 객체가 부모 클래스 타입으로 형변환 되는 것
  • 형태 : 부모 bumo = new 자식();

 

의미에 "되는 것"이라고 쓴 이유는, 별도로 데이터 타입을 명시하지 않아도 형변환이 진행되기 때문.

 

 

 

2. 다운캐스팅

  • 의미 : 부모 객체를 자식 형태 타입으로 형변환 하는 것 (업캐스팅 된 것을 원래 상태로 돌리는 것 = 업캐스팅 선행 필수)
  • 형태 : 자식 jasik = (자식)bumo();

 

의미에 "하는 것"이라고 쓴 이유는, 별도로 데이터 타입을 명시해야 형변환이 진행되기 때문.

 

 

 

3. 예제 (2개)

예제 1.

 

부모 클래스(Car) 정의

 

자식 클래스(Bus) 정의

 

실행

 

결과화면

 

 

 

 

 

 

예제 2.

부모 클래스(Animal) 정의

 

자식 클래스(Dog) 정의

 

자식 클래스(Cat) 정의

 

실행

 

결과화면

 

 

나중에 클래스 타입의 변수를 메소드 인스턴스에 막 넣기 시작하면서 헷갈리기 때문에

고생하지 않기 위해선 자주 봐주는게 도움이 될 것 같다

 

+ Recent posts