Java의 IS 대 HAS
객체 지향 프로그래밍 언어를 사용하는 주요 기능 중 하나는 코드를 여러 번 재사용할 수 있다는 것입니다. 일반적으로 재사용성을 달성하기 위해 상속과 구성이라는 두 가지 개념을 사용할 수 있습니다.
상속은 IS-A 관계이고 구성은 HAS-A 관계입니다. 두 개념은 특정 방식에서 다르지만 동일한 목표, 즉 재사용성을 가지고 있습니다.
아래에서 이 두 개념의 차이점을 살펴보겠습니다.
Java에서의 IS-A 관계
Java에서 상속 또는 IS-A 관계는 둘 이상의 클래스 관계를 나타냅니다. 상속은 Java에서 extends
키워드를 사용하여 달성할 수 있습니다. 부모 클래스를 상속하여 자식 클래스에서 해당 메서드와 변수를 사용할 수 있습니다.
아래 샘플 코드에는 Animal
과 Dog
라는 두 개의 클래스가 있으며, Animal
클래스에는 String을 반환하는 함수 whatAmI()
가 있고, Dog
클래스는 Animal
클래스를 확장합니다.
이 Dog
는 Animal
관계입니다. 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
과 같은 키워드를 사용하지 않습니다. 부모 클래스 또는 이 메서드에서 사용하려는 클래스의 개체를 만듭니다.
다음 예에서 다시 Legs
와 Dog
라는 두 개의 클래스가 있습니다.
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 Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn