강의 내용
[1] 다형성이란?
[2] 다형성 이론을 설명하기 위한 전제 조건
[1] 다형성이란?
다형성이란?
객체지향 프로그래밍에서 가장 중요한 이론
다형성을 이해해야 자바 API를 잘 활용할 수 있다.
*poly : 다양한, 여러가지
*다형성 : 다양한 형태로 나타낸다.
객체지향 프로그래밍의 특징
(1) 정보 은닉
(2) 상속
(3) 다형성
다형성(Message Polymorphism)
하나의 메세지에 대해 하위 클래스들이 서로 다르게 반응하는 객체지향 원리
상위 클래스가 동일한 메세지로 하위 클래스를 서로 다르게 동작시키는 객체지향 원리
부모 : "꽃 사오세요."
자녀 1 : (집으로 바로 올 수 없는 상황) 꽃을 배달 서비스로 시킨다.
자녀 2 : (집으로 오는 상황) 꽃가게에서 직접 구매한다.
자녀 3 : 친구에게 부탁한다.
Animal(eat()) - Dog(eat()) // 재정의
- Cat(eat()) // 재정의
메세지(eat())는 하나지만, Dog와 Cat의 먹는 방식은 서로 다르다.
다형성 이론의 장점
상속 관계의 장점과 동일, 상속 관계를 알아야 다형성의 의미를 이해할 수 있다.
(1) 유지보수
(2) 확장성
A(메서드) - B(A의 메서드 사용 가능)
- C(A의 메서드 사용 가능)
- D(A의 메서드 사용 가능)
- F(A의 메서드 사용 가능)
(1) 유지보수 : A의 메서드가 수정되더라도 하위 클래스들은 변경할 필요 없이 그대로 사용 가능하다.
(2) 확장성 : 새로운 클래스 F에 A를 상속하면 F도 A의 메서드를 사용할 수 있다.
Q. Dog와 Cat 클래스를 설계하고 동작시켜 보시오.
public class PolyTest { public static void main(String[] args) { // 다형성(message polymorphism) // 전제 조건 : 상속 관계, 재정의(Override), 동적 바인딩 // UpCasting으로 객체 생성 Animal ani = new Dog(); ani.eat(); // 동적 바인딩 : 실행 시점에서 사용될(호출될) 메서드가 결정되는 바인딩 ani = new Cat(); ani.eat(); // DownCasting ((Cat) ani).night(); } }
[2] 다형성 이론을 설명하기 위한 전제 조건
(1) 상속 관계 : 클래스가 서로 상속 관계여야 함
(2) Override(재정의) : 부모가 갖는 메서드를 하위 클래스에서 재정의해야 함(중요)
(3) Upcasting(업캐스팅) : 부모가 자식들에게 명령하려면 부모 클래스 타입으로 객체를 생성해야 함
(4) 동적 바인딩 : 부모가 하위 클래스에게 동일한 메세지를 보내면 실행 시점에 동적 바인딩이 일어남(자식의 메서드를 찾아감)
public class PolyTest { public static void main(String[] args) { // 다형성(message polymorphism) // 전제 조건 : 상속 관계, 재정의(Override), 동적 바인딩 // UpCasting으로 객체 생성 Animal ani = new Dog(); ani.eat(); // 동적 바인딩 : 실행 시점에서 사용될(호출될) 메서드가 결정되는 바인딩 ani = new Cat(); ani.eat(); // DownCasting ((Cat) ani).night(); // Overloading(오버로딩) : 정적 바인딩(컴파일 시점에서 사용될 메서드가 결정되는 바인딩) // : 프로그램의 실행 속도와는 무관 // Override(재정의) : 동적 바인딩(실행 시점에서 사용될 메서드가 결정되는 바인딩) // : 프로그램의 실행 속도와 관련(메모리에서 찾아야 함) // : 실행 속도가 저하되는 원인이 될 수 있다. } }
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
https://bit.ly/48sS29N