Java

Java(다형성, 업/다운캐스팅)

yoooon1212 2024. 4. 24. 16:42

다형성

 

  • 하나의 데이터 타입이 다양한 형태로 바라볼 수 있는 것(하나의 코드가 여러 자료형으로 구현되어 실행되는 것)
  • 한 요소(메서드, 클래스 등)가 여러 형태를 가질 수 있는 능력
  • 상속, 추상화, 인터페이스와 함께 사용됨.
  • 같은 코드에서 여러 다른 실행 결과가 나옴
  • 정보은닉, 상속과 더불어 객체지향 프로그래밍의 가장 큰 특징 중 하나임
  • 다형성을 잘 활용하면 유연하고 확장성 있고, 재사용성을 높여주며 유지보수가 편리한 프로그램을 만들 수 있음

Animal(부모 클래스) 생성
Aniaml의 상속을 받는 Human (자식 클래스) 생성

 

Animal의 상속을 받는 Tiger(자식 클래스) 생성

 

 

 

 

 

다형성 활용 시 사용되는 개념: 업캐스팅(자동 타입 변환)과 다운캐스팅(강제 타입 변환)

업캐스팅

  • 부모 클래스의 참조 변수로 자식 클래스의 객체를 참조하는 것
  • 부모 클래스의 데이터 타입으로 자식 클래스의 객체를 대입하는 것
  • 업캐스팅은 자동으로 이루어짐.(자동 타입 변환)
부모타입 변수 = 자식 타입 객체; (자식 -> 부모)

=> 부모, 자식 변수는 타입만 다를 뿐 동일한 자식 객체를 참조한다.

  • 부모 타입으로 업캐스팅된 이후에는 부모 클래스에서 선언된 필드와 메서드만 접근이 가능하다
  • 변수는 자식 객체를 참조하지만 변수로 접근 가능한 멤버는 부모 클래스 멤버로 한정된다.
  • 그러나, 자식 클래스에서 오버라이딩된 메소드가 있다면 부모 메서드 대신에 오버라이딩된 메서드가 호출된다.(다형성)

 

Animal animal = new Dog(); // 업캐스팅
Dog dog = (Dog) animal; // 다운캐스팅

 

다운캐스팅

  • 부모 클래스의 참조 변수를 자식 클래스의 객체로 변환하는 것
  • 명시적 형변환을 해야 함.(강제 타입 변환)
  • 업캐스팅된 객체가 실제로 클래스의 객체일 때만 가능함. 그렇지 않으면 ClassCastException(예외) 발생 가능
  • 무조건 다운 캐스팅 가능X => 업캐스팅(자식 -> 부모)한 후 다시 자식 타입으로 변환할 때 다운캐스팅 가능하다. 
  • 만약 자식 타입에 선언된 필드와 메서드를 꼭 사용해야 한다면 다운캐스팅(부모 -> 자식)을 해서 다시 자식 타입으로 변환해야 한다.
자식타입 변수 = (자식타입) 부모타입 객체; (부모 -> 자식)