[객사오] 슈퍼타입과 서브타입

슈퍼타입과 서브타입

  • 일반화/특수화 관계: 좀 더 일반적인 타입(슈퍼타입)과 좀 더 특수한 타입(서브타입) 간의 관계
  • 중요한 것: 두 타입 간의 관계가 행동에 의해 결정됨(행위적 호환성)

행위적 호환성

  • 서브타입은 슈퍼타입의 행위와 호환되어야 함
  • 서브타입은 슈퍼타입을 대체할 수 있어야 함

일반화/특수화 관계 표기법

  • 슈퍼타입: 상단, 서브타입: 하단, 속이 빈 삼각형으로 연결
  • 서브타입에서는 슈퍼타입과 중복된 행위를 생략 가능
  • 서브타입에게 슈퍼타입의 행동이 자동으로 상속됨
// 슈퍼타입 클래스 정의
class Trump {
  void flatten() {
    System.out.println("납작 엎드릴 수 있다.");
  }

  void flip() {
    System.out.println("뒤집어질 수 있다.");
  }
}

// 서브타입 클래스 정의
class TrumpHuman extends Trump {
  void walk() {
    System.out.println("걸을 수 있다.");
  }
}

public class Main {
  public static void main(String[] args) {
    TrumpHuman trumpHuman = new TrumpHuman();

    trumpHuman.flatten(); // 슈퍼타입 메소드 사용
    trumpHuman.flip(); // 슈퍼타입 메소드 사용
    trumpHuman.walk(); // 서브타입 메소드 사용
  }
}

위의 코드에서 TrumpHuman 클래스는 Trump 클래스의 서브타입입니다.

TrumpHumanTrump의 행동을 자동으로 상속받기 때문에 flatten()flip() 메소드를 호출할 수 있습니다.

또한, walk() 메소드를 추가하여 서브타입의 특수한 행동을 정의했습니다.


Uploaded by N2T