https://changel.tistory.com/165
상속 챕터를 공부하면서 묵시적 클래스 형변환과 가상 메서드 개념에 대해 확실하게 이해했다. 이제 이것을 바탕으로 객체 지향의 중요한 특성인 다형성에 대해 정리해 보고자 한다. 참고로 다형성은 추상 클래스, 인터페이스 등에서 구현된다.
다형성 - Polymorphism
다형성이란 하나의 코드가 여러 자료형으로 구현되어 실행되는 것을 말한다. 즉, 같은 코드에서 여러 실행 결과가 나오는 것이다.
예를 들자면, Animal 이라는 상위 클래스로부터 상속받는 하위 클래스 세 개( Human, Tiger, Eagle) 클래스가 있다고 하자.
애니멀 클래스에 메서드를 하나 정의하고 상속받은 나머지 클래스에서 간단하게 재정의해보자.
애니멀에서 상속받은 클래스가 매개변수로 넘어오면 모두 애니멀 형으로 변환되므로 animal.메서드명() > 이 메서드를 호출할 수 있다.
전에 공부한 가상 메서드 원리에 따라 위 메서드에서 호출하는 메서드는 상위 클래스인 Animal 클래스의 메서드가 아닌 매개변수로 넘어온 실제 인스턴스의 메서드이다. animal.메서드명() 이 코드는 변함이 없지만, 어떤 매개변수가 넘어왔느냐에 따라 출력문이 달라진다.
이것이 바로 다형성이다.
다형성의 장점은 무엇일까?
다른 새로운 동물이 추가된다고 가정하자. 새로운 동물도 Animal클래스를 상속받아 구현하면 모든 클래스를 상위 클래스 하나로 쉽게 관리할 수 있을 것이다. 이것이 다형성을 활용한 프로그램의 확장성이다. 상위 클래스에서 공통부분의 메서드를 제공하고, 하위 클래스에서는 그에 기반한 추가 요소를 덧붙여 구현하면 코드의 양도 줄어들고 유지보수도 편리하다. 또, 필요하다면 모든 클래스를 하나의 상위 클래스로 처리할 수 있고 다형성에 의해 각 클래스의 여러가지 구현을 실행할 수 있으므로 프로그램을 쉽게 확장할 수 있다.
이처럼 다형성을 활용하면 유연하고 구조화된 코드를 구현하여 확장성있고 유지보수하기 좋은 프로그램 개발이 가능하다.
상속 관계에 있는 상위 클래스와 하위 클래스는 상위 클래스 자료형으로 선언되어 생성할 수 있지만 재정의된 메서드는 각각 호출될 뿐만 아니라 이름이 같은 메서드가 서로 다른 역할을 구현하고 있음을 알 수 있다!
'공부 STUDY > JAVA' 카테고리의 다른 글
[JAVA] 다운캐스팅 (DownCasting) (0) | 2023.01.09 |
---|---|
[JAVA] ArrayList 사용법 (0) | 2023.01.09 |
[JAVA] 상속 | 메서드 오버라이딩 (0) | 2023.01.08 |
[JAVA] 상속 | 부모를 부르는 예약어, super (0) | 2023.01.08 |
[Java] 상속 inheritance, 클래스 생성과 형변환 | 예제를 통해 이해하기 (0) | 2023.01.08 |