점투자 5: 다형성이란?
사전적 의미로는, 모양은 같지만 형태는 다르다는 것을 의미한다. 모양과 형태는 뭐가 다를까? 프로그래밍적 관점에서 보자면:
겉으로 보이는 모습(정의 or 이름)는 같지만 세부적인 형태(구현)은 다르다
고 이해 할 수 있을 것 같다. 자바에서 다형성의 예시를 들어보자.
메소드 오버로딩
같은 이름을 가진 함수라도, 받는 인자를 다르게 해서 여러 개를 다른 형태로 구현할 수 있다.
메소드 오버라이딩
같은 이름 + 같은 인자를 가지는 함수라도, 해당 함수가 존재하는 클래스를 상속 받은 자식 클래스에서 구현은 다르게 할 수 있다.
가상함수
메소드가 가상함수이고, 자식 클래스에서 오버라이딩 해서 쓰는 경우, 자식 클래스를 부모 클래스에 담고 자식 해당 가상함수를 호출해도 알아서 자식 클래스의 오버라이딩된 함수를 호출해 준다. c++의 경우는 가상함수로 선언을 해야 했지만, 자바의 메소드는 기본적으로 모두 가상함수이다.
ex. 자식 클래스와 부모 클래스를 하나의 배열에 넣고 관리하고 싶다(파이썬 마냥)
순수가상함수 - 추상클래스, 인터페이스
메소드를 순수가상함수로 구현하고 두 자식 클래스에서 상속받는 경우, 구현의 형태를 서로 다르게 오버라이딩 할 수 있다. 즉, 부모 클래스라는 설계도 밑에 자식 클래스를 두 가지 형태로 다형화? 하는 것
ex. 자식 클래스 객체 두 개를 하나의 배열에 넣고 관리하고 싶다.
→ 추상클래스인 부모 클래스의 배열을 선언한다.
ex. 자식 클래스 객체를 인자로 받는 함수를, 클래스 별로 하나 씩이 아니라 하나만 만들고 싶다.
→ 인터페이스인 부모클래스를 상속받아 오버라이딩 한다.
Last updated