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




다형성 활용 시 사용되는 개념: 업캐스팅(자동 타입 변환)과 다운캐스팅(강제 타입 변환)
업캐스팅
- 부모 클래스의 참조 변수로 자식 클래스의 객체를 참조하는 것
- 부모 클래스의 데이터 타입으로 자식 클래스의 객체를 대입하는 것
- 업캐스팅은 자동으로 이루어짐.(자동 타입 변환)
부모타입 변수 = 자식 타입 객체; (자식 -> 부모) |
=> 부모, 자식 변수는 타입만 다를 뿐 동일한 자식 객체를 참조한다.
- 부모 타입으로 업캐스팅된 이후에는 부모 클래스에서 선언된 필드와 메서드만 접근이 가능하다
- 변수는 자식 객체를 참조하지만 변수로 접근 가능한 멤버는 부모 클래스 멤버로 한정된다.
- 그러나, 자식 클래스에서 오버라이딩된 메소드가 있다면 부모 메서드 대신에 오버라이딩된 메서드가 호출된다.(다형성)
Animal animal = new Dog(); // 업캐스팅
Dog dog = (Dog) animal; // 다운캐스팅
다운캐스팅
- 부모 클래스의 참조 변수를 자식 클래스의 객체로 변환하는 것
- 명시적 형변환을 해야 함.(강제 타입 변환)
- 업캐스팅된 객체가 실제로 클래스의 객체일 때만 가능함. 그렇지 않으면 ClassCastException(예외) 발생 가능
- 무조건 다운 캐스팅 가능X => 업캐스팅(자식 -> 부모)한 후 다시 자식 타입으로 변환할 때 다운캐스팅 가능하다.
- 만약 자식 타입에 선언된 필드와 메서드를 꼭 사용해야 한다면 다운캐스팅(부모 -> 자식)을 해서 다시 자식 타입으로 변환해야 한다.
자식타입 변수 = (자식타입) 부모타입 객체; (부모 -> 자식) |