다형성 (polymorphism)
객체 지향 프로그래밍에서, 같은 타입이지만, 다양한 객체를 같은 타입처럼 이용할 수 있는 성질.
하나의 타입 Bread = new Doughnut(); 다른 객체로 대입이 가능하다.
먼저 이러한 성질을 사용하기 위해서는, 인터페이스와 상속의 개념이 꼭 필요하다.
다형성을 위해서 자바에서 갖추고 있는 기능은, 부모 클래스와 인터페이스의 타입 변환이 가능하다는 점이다.
부모 타입 <=== 자식 타입
인터페이스 타입 <== 모든 구현된 클래스(객체)
이 다형성의 효과로 객체를 마치 기계의 부품처럼 사용할 수 있는 장점이 생긴다.
예) 자동차의 타이어는 어떤 타이어든 호환만 된다면 모두 장착 할 수 있는 것과 비슷하다.
다형성과 관련된 부분들
타입 변환 : 같은 타입이지만, 실행 결과가 다양해질 수 있는 객체를 이용할 수 있다는 성질.
하나의 타입에 여러 객체를 대입함으로써 다양한 기능을 이용할 수 있도록 해줌.
즉 객체를 부품처럼 이용하는 것이 가능해짐.
자식 클래스 타입을 부모 클래스 타입으로 변환하는 것이 가능하기 때문에, 이것이 가능하다.
자동 타입 변환 : 부모 클래스 타입의 변수가 자식 클래스 타입 객체를 참조하면 자동으로 부모 클래스 타입으로 변환이 되는 것.
자동 타입 변환이 일어날 수 있는 이유는, 자식 클래스는 부모 클래스의 특징과 기능을 상속 받아서 만들어졌기 때문에 가능한 것.
또한 상속 계층에서 상위 타입이면 무조건 자동 타입 변환이 일어날 수 있다. (부모가 아니라 2단계 상속 받은 상태라도 변환 가능)
메소드 오버라이딩 : 메소드가 자식 클래스에서 오버라이딩 되었을 경우에는, 자식 클래스의 메소드가 호출된다.
한번 자식 클래스에서 변환된 메소드는 타입 변환 후에도 항상 자식 클래스의 메소드로 호출된다.
메소드 오버로딩 : 메소드 오버로딩은 같은 이름의 메소드가 입력 받는 값에 변화를 주어 동작할 수 있는 가능성을 더 여러가지로
가질 수 있게 해주는 기능이다. 이 역시 다형성의 측면에서 행동하는 기능이라고 생각 할 수 있다.
만일, 오버로딩이 존재하지 않는다면 하나의 이름을 가지는 메소드는 오직 정해진 타입, 갯수의 변수 만을 받을 수 밖에 없는 형태
이기 때문에, 자유도적인 부분에서 상당히 떨어질 수 밖에 없다.
'프로그래밍 > JAVA' 카테고리의 다른 글
Java에서 내 log를 마음대로 출력하는 방법 (0) | 2018.09.10 |
---|---|
캡슐화(Capsulation) (0) | 2018.08.07 |
상속(Inheritance) (0) | 2018.07.20 |
클래스 - 다른 클래스의 메소드 호출 (0) | 2018.05.17 |
Return data type에 대한 검색 및 정리. (30) | 2018.05.03 |