다형성 (polymorphism)


객체 지향 프로그래밍에서, 같은 타입이지만, 다양한 객체를 같은 타입처럼 이용할 수 있는 성질.

하나의 타입 Bread = new Doughnut(); 다른 객체로 대입이 가능하다.

먼저 이러한 성질을 사용하기 위해서는, 인터페이스와 상속의 개념이 꼭 필요하다.

다형성을 위해서 자바에서 갖추고 있는 기능은, 부모 클래스와 인터페이스의 타입 변환이 가능하다는 점이다.

부모 타입 <=== 자식 타입

인터페이스 타입 <== 모든 구현된 클래스(객체)

이 다형성의 효과로 객체를 마치 기계의 부품처럼 사용할 수 있는 장점이 생긴다.

예) 자동차의 타이어는 어떤 타이어든 호환만 된다면 모두 장착 할 수 있는 것과 비슷하다.



다형성과 관련된 부분들


타입 변환 : 같은 타입이지만, 실행 결과가 다양해질 수 있는 객체를 이용할 수 있다는 성질.


하나의 타입에 여러 객체를 대입함으로써 다양한 기능을 이용할 수 있도록 해줌.


즉 객체를 부품처럼 이용하는 것이 가능해짐.


자식 클래스 타입을 부모 클래스 타입으로 변환하는 것이 가능하기 때문에, 이것이 가능하다.


자동 타입 변환 : 부모 클래스 타입의 변수가 자식 클래스 타입 객체를 참조하면 자동으로 부모 클래스 타입으로 변환이 되는 것.


자동 타입 변환이 일어날 수 있는 이유는, 자식 클래스는 부모 클래스의 특징과 기능을  상속 받아서 만들어졌기 때문에 가능한 것.


또한 상속 계층에서 상위 타입이면 무조건 자동 타입 변환이 일어날 수 있다. (부모가 아니라 2단계 상속 받은 상태라도 변환 가능)


메소드 오버라이딩 : 메소드가 자식 클래스에서 오버라이딩 되었을 경우에는, 자식 클래스의 메소드가 호출된다.


한번 자식 클래스에서 변환된 메소드는 타입 변환 후에도 항상 자식 클래스의 메소드로 호출된다.



메소드 오버로딩 : 메소드 오버로딩은 같은 이름의 메소드가 입력 받는 값에 변화를 주어 동작할 수 있는 가능성을 더 여러가지로


가질 수 있게 해주는 기능이다. 이 역시 다형성의 측면에서 행동하는 기능이라고 생각 할 수 있다.


만일, 오버로딩이 존재하지 않는다면 하나의 이름을 가지는 메소드는 오직 정해진 타입, 갯수의 변수 만을 받을 수 밖에 없는 형태


이기 때문에, 자유도적인 부분에서 상당히 떨어질 수 밖에 없다.


































+ Recent posts