[개발자_객체지향_디자인패턴] 다형성과 추상타입 - 다형성과 상속

박상준·2024년 8월 15일
0

다형성?

  • 한 객체가 여러 가지(poly) 모습(morph) 를 갖는 것
  • 모습 이란 타입 을 의미한다
  • 하나의 객체가 여러 타입을 가질 수 있는 것을 의미한다.

다형성의 개념 도식

  • 중앙의 객체는 타입 A, 타입 B, 타입 C 에 정의된 인터페이스의 구현을 제공한다.
  • 다른 코드에서는 해당 객체에 대해 타입 A, 타입 B, 타입 C 에 정의된 기능 실행을 요청한다.
  • 결과적으로는..
    • 해당 객체는 타입A, 타입B, 타입 C 로 모두 사용이 가능하다.

정적 타입 언어상의 다형성의 구현

  • 자바 같은 정적 타입 언어에서는 타입 상속을 통해 다형성을 구현한다.

예시

public class Plane {
    public void fly() {
        // 비행
    }
}

public interface Turbo {
    public void boost();
}

public class TurboPlane extends Plane implements Turbo {
    public void boost() {
        // 가속
    }
}
  • 다형성 사용
TurboPlane tp = new TurboPlane();
tp.fly();  // Plane에 정의/구현된 메서드 실행
tp.boost();  // Turbo에 정의되고 TurboPlane에 구현된 메서드 실행

Plane p = tp;  // TurboPlane 객체는 Plane 타입도 된다.
p.fly();

Turbo t = tp;  // TurboPlane 객체는 Turbo 타입도 된다.
t.boost();
  • 다형성 특징
    1. TurboPlane 은 Plane 과 Turbo 타입 모두가 될 수 있음.
    2. Plane 타입과 Turbo 타입에 정의된 모든 기능을 제공함.

인터페이스 상속과 구현 상속

  • 타입 상속 2가지 형태
    1. 인터페이스 상속
    2. 구현 상속

인터페이스 상속

  • 순수하게 타입 정의만을 상속받습니다.
  • 예시
    • 자바 인터페이스

    • C ++ 상의 추상 함수만을 가진 추상 클래

      가 있습니다.

  • 특징
    • 클래스 다중 상속을 지원하지 않는 자바 같은 다형성 구현에 사용합니다.
      • 메서드 시그니처만 제공함.
    • 실제 구현을 상속받는 클래스에서 제공함.

구현 상속

  • 정의
    • 클래스 상속을 통해 이루어지는 상속이다
    • 목적
      • 상위 클래스에 정의된 기능을 재사용한다.
  • 특징
    1. 상위 클래스의 구현을 상속받는다
    2. 다형성과 구현 재사용을 동시에 제공한다
public class Plane {
    public void fly() {
        // 비행 구현
    }
}

public class TurboPlane extends Plane {
    // Plane의 fly() 메서드를 상속받음
    
    // 필요시 fly() 메서드를 오버라이드 가능
    @Override
    public void fly() {
        // TurboPlane만의 비행 구현
    }
}
profile
이전 블로그 : https://oth3410.tistory.com/

0개의 댓글