Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

자바의 IS-A 관계 완벽 이해하기: extends 키워드와 상속

IS-A 관계란 무엇인가?

IS-A 관계는 객체 지향 프로그래밍에서 "이 객체는 저 객체의 한 종류(type)다"라고 표현하는 방식입니다. 즉, 한 클래스가 다른 클래스의 특수한 형태임을 의미하며, 자바에서 상속(Inheritance)을 설명할 때 가장 널리 사용되는 핵심 개념입니다.

자바에서는 extends 키워드를 사용하여 클래스 간의 상속 관계, 곧 IS-A 관계를 구현합니다. 그럼 실제 코드를 통해 살펴보겠습니다.

extends 키워드로 상속 구현하기

public class Animal {
}
public class Mammal extends Animal {
}
public class Reptile extends Animal {
}
public class Dog extends Mammal {
}

위 예제에서 Animal 클래스는 최상위 부모 클래스이며, Mammal(포유류)과 Reptile(파충류)은 Animal을 상속받습니다. 그리고 Dog(개) 클래스는 Mammal을 다시 상속받아 계층 구조를 형성합니다.

IS-A 관계 분석

이제 위 클래스 구조를 IS-A 관계로 해석하면 다음과 같이 정리할 수 있습니다.

  • Mammal IS-A Animal — 포유류는 동물이다
  • Reptile IS-A Animal — 파충류는 동물이다
  • Dog IS-A Mammal — 개는 포유류이다
  • 따라서 Dog IS-A Animal — 개는 동물이기도 하다

주목할 점은 상속 관계가 전이적(transitive)이라는 것입니다. Dog가 Mammal의 하위 클래스이고, Mammal이 Animal의 하위 클래스이므로, Dog는 자동으로 Animal의 하위 클래스가 됩니다. 이처럼 IS-A 관계는 여러 단계에 걸쳐 성립할 수 있습니다.

IS-A 관계의 실제 활용

IS-A 관계는 자바의 다형성(Polymorphism)과 밀접하게 연결됩니다. 부모 클래스 타입의 참조 변수로 자식 클래스의 객체를 참조할 수 있기 때문입니다.

Animal a = new Dog();  // Dog IS-A Animal이므로 가능

if (a instanceof Mammal) {
    System.out.println("이 동물은 포유류입니다.");
}

또한 instanceof 연산자를 사용하면 특정 객체가 해당 클래스와 IS-A 관계에 있는지 런타임에 확인할 수 있습니다. 이러한 특성 덕분에 코드의 유연성과 재사용성이 크게 향상되며, 이것이 바로 상속을 활용한 객체 지향 설계의 강력함입니다.