Polymorphism / abstract class / interface

Message Polymorphism 다형성

상속 관계에 있는 클래스에서 상위 클래스가 동일한 메시지로 하위 클래스들을 서로 다르게 동작시키는 객체지향 원리(개념)

  1. 다형성 이론의 전제 조건(부모 클래스를 잘 활용)

    • 상속 관계가 되어야 한다.
    • 객체 생성을 upcasting으로 할 것(상위 클래스가 하위 클래스에게 메시지를 보내야 함, upcasting이 되면 downcasting을 할 수 있다)
    • 하위 클래스가 반드시 재정의(override)해야 한다. (다형성 보장)
    • 동적 바인딩을 통해 실현된다. (실행시점에서 사용될 메소드가 결정됨)
  2. 다형성 활용 방법

    • 다형성 인수(데이터 이동)
    • 다형성 배열(서로 다른 객체를 담을 수 있음)

instanceof 로 객체 타입을 확인

추상클래스 활용 (일부 다형성 보장)

추상메소드 - 구현부가 없다. (불완전한 메소드)

추상클래스는 추상메소드뿐만 아니라 구현메소드도 가질 수 있다.

추상클래스는 객체 생성할 수 없다. (upcasting으로 활용)

추상클래스인 부모를 상속하면 자식은 추상메소드를 필수적으로 override 해야 한다.

서로 기능이 비슷한 클래스들을 묶을 때 -> 추상클래스
서로 기능이 다른 클래스 -> 인터페이스

인터페이스 활용 (100% 다형성 보장)

100% 추상 메소드만 가능 - 구현된 메소드를 가질 수 없다.

하위 클래스의 동작 방식을 몰라도 인터페이스를 100% 동작 시킬 수 있다.

단독적으로 객체 생성은 불가능하다.

추상메소드에 abstract 키워드를 붙이지 않아도 된다.

상수 사용 가능 - static final (생략 가능)

추상클래스와 인터페이스 (다형성을 보장하기 위함)

  • abstract class

    • 서로 기능이 비슷한 클래스의 공통 부분을 묶을 때 사용
    • 구현 메소드와 추상 메소드를 함께 가질 수 있다
    • 50% 디자인(설계), 50% 구현
  • interface

    • 서로 기능이 다른 클래스의 공통 부분을 묶을 때 사용
    • 100% 추상 메소드로 이루어진다
    • 100% 디자인(설계) 규약
    • 구현 메소드를 가질 수 없다
    • 다중 상속 형태를 지원한다
    • final static 멤버변수를 가질 수 있다
  • 공통점

    • 다형성을 보장하기 위해서 등장
    • 객체를 생성할 수 없다
    • 하위 클래스에 의해 구현되어야 한다 (override 필수)
    • upcasting으로 객체를 생성
    • 추상 메소드를 가진다

Written by@Myunghwan
Nothing changes if nothing changes

GitHub