Java의 IS 대 HAS

Rupam Yadav 2023년10월12일
  1. Java에서의 IS-A 관계
  2. Java의 HAS-A 관계
  3. IS-A 관계와 HAS-A 관계의 주요 차이점
Java의 IS 대 HAS

객체 지향 프로그래밍 언어를 사용하는 주요 기능 중 하나는 코드를 여러 번 재사용할 수 있다는 것입니다. 일반적으로 재사용성을 달성하기 위해 상속과 구성이라는 두 가지 개념을 사용할 수 있습니다.

상속은 IS-A 관계이고 구성은 HAS-A 관계입니다. 두 개념은 특정 방식에서 다르지만 동일한 목표, 즉 재사용성을 가지고 있습니다.

아래에서 이 두 개념의 차이점을 살펴보겠습니다.

Java에서의 IS-A 관계

Java에서 상속 또는 IS-A 관계는 둘 이상의 클래스 관계를 나타냅니다. 상속은 Java에서 extends 키워드를 사용하여 달성할 수 있습니다. 부모 클래스를 상속하여 자식 클래스에서 해당 메서드와 변수를 사용할 수 있습니다.

아래 샘플 코드에는 AnimalDog라는 두 개의 클래스가 있으며, Animal 클래스에는 String을 반환하는 함수 whatAmI()가 있고, Dog 클래스는 Animal 클래스를 확장합니다.

DogAnimal 관계입니다. Dog 클래스는 이제 상위 클래스에서 whatAmI() 메서드에 액세스할 수 있습니다.

class Animal {
  public String whatAmI() {
    return "I belong to Animal class";
  }
}

class Dog extends Animal {
  public void aboutMe() {
    System.out.println("I am a Dog class and " + whatAmI());
  }
}

출력:

I am a Dog class and I belong to Animal class

Java의 HAS-A 관계

상속과 달리 구성 또는 HAS-A 관계는 extends과 같은 키워드를 사용하지 않습니다. 부모 클래스 또는 이 메서드에서 사용하려는 클래스의 개체를 만듭니다.

다음 예에서 다시 LegsDog라는 두 개의 클래스가 있습니다.

Legs에는 howManyLegs() 메서드가 있습니다. Dog 클래스에서 Legs 클래스의 객체를 만들고 이 객체를 사용하여 howManyLegs() 함수를 호출합니다.

이제 여기에서 Dog HAS-A Legs 또는 Dog 클래스 HAS-A 속성인 Legs의 구성 개념이 적용되고 있음을 알 수 있습니다.

class Legs {
  public String howManyLegs() {
    return "I have four legs";
  }
}

class Dog {
  Legs legs = new Legs();

  public void aboutMe() {
    System.out.println("I am a Dog class and " + legs.howManyLegs());
  }
}

출력:

I am a Dog class and I have four legs

IS-A 관계와 HAS-A 관계의 주요 차이점

IS-A HAS-A
상속의 개념이다. 구성의 개념이다.
클래스는 둘 이상의 클래스를 확장할 수 없습니다. 클래스는 여러 다른 클래스와 HAS-A 관계를 가질 수 있습니다.
상속에서 최종 클래스를 확장할 수 없습니다. 우리는 컴포지션에서 최종 클래스를 재사용할 수 있습니다.
상속은 정적 바인딩이며 런타임에 변경할 수 없습니다. 컴포지션은 동적 바인딩이며 변경 사항에 유연합니다.
작가: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn