JAVA 기초 : 업캐스팅(upcasting), 다운캐스팅(downcasting), 다형성(polymorphism)

mark1106·2023년 7월 19일
1

JAVA

목록 보기
9/11

업캐스팅(upcasting)과 다운 캐스팅(downcasting)

upcasting : 자식 클래스의 인스턴스를 부모 클래스의 타입으로 변환하는 것
downcasting : 부모 클래스의 인스턴스를 자식 클래스의 타입으로 변환하는 것

Animal animal = new Dog() 와 같이 자식 클래스인 Dog 인스턴스를 부모 클래스인 Animal타입으로 할당하는 것이 업캐스팅이다.

Dog dog = (Dog) animal 과 같이 부모 인스턴스인 animal을 다시 자식 클래스인 Dog 타입으로 형변환하는 것이 다운캐스팅이다.


다운캐스팅 시 주의점

다운캐스팅 시 반드시 해당 타입으로 형변환이 가능한지 확인해야 한다. 만약 부모 클래스 타입의 인스턴스가 자식 클래스 인스턴스가 아닌 경우 오류가 발생하므로 예외처리를 해줘야 한다.

  • 예를 들면, animal2는 자식타입 Dog의 인스턴스가 아니라 Animal타입의 인스턴스이므로 다운캐스팅을 할 수 없다.

  • 다음과 같이 instanceof 키워드를 통해 animal2가 Dog의 인스턴스인지 확인 후 다운캐스팅을 해준다.
    Dog의 인스턴스가 아닐 경우 예외처리를 따로 해준다.

다형성(polymorphism)

하나의 타입이나 메소드가 여러 타입이나 메소드들을 가지거나 실행시키는 능력

  • 다형성의 장점
  1. 유지보수 용이 : 여러 객체를 하나의 타입으로 관리하므로 유지보수가 쉽다.
  2. 코드 재사용성 증가 : 다형성을 활용하면 객체를 재사용하기 쉬워지므로 코드 재사용성이 높다.

업캐스팅을 통한 다형성

부모 클래스 타입이 변수자식 클래스 객체를 할당할 수 있다.
이를 통해 동일한 코드를 사용하여 여러 타입의 객체를 처리할 수 있다.

오버라이딩을 통한 다형성

부모 클래스와 자식 클래스 간의 메소드 오버라이딩을 통해, 부모 클래스 타입의 변수를 사용하여 자식클래스의 오버라이딩된 메소드를 호출할 수 있다.

마지막 출력을 보면 동일한 makeSound() 메소드이지만 오버라이딩된 자식 메소드를 호출하므로 각각 출력이 다르게 나오는 것을 볼 수 있다.
(animal1은 Dog 메소드를, animal2는 Cat 메소드를 호출)

1개의 댓글

comment-user-thumbnail
2023년 7월 19일

이 글은 제게 많은 도움이 되었습니다.

답글 달기