자바에서 클래스를 생성하다 보면 다른 클래스를 상속하는 경우가 많다.
이럴 때 필요한 것이 IS - A 관계이다.
상속을 사용하지 않는 HAS-A관계도 있기 때문에 두 가지의 관계를 정리할 것이다.
1. IS - A
자바 내에서 어느 한 클래스가 다른 클래스를 상속받기 위해서는 IS-A관계를 사용해야 한다.
IS-A (is a relationship, inheritance)는 일반적인 개념과 구체적인 개념의 관계이다.
위 처럼 Animal과 Human, Cow, Bird는 서로 상속 관계를 의미하는 사진이다.
코드로 보면,
# Animal class
class Animal {
String name;
void setName(String name) {
this.name = name;
}
}
# Human class
class Human extends Animal {
void sleep() {
System.out.println("zzzzz");
}
}
# Cow class
class Cow extends Animal {
void sleep() {
System.out.println("zzzzz");
}
}
# Bird class
class Bird extends Animal {
void sleep() {
System.out.println("zzzzz");
}
}
# main
public class Sample {
public static void main(String[] args) {
Animal human = new Human;
Animal cow = new Cow;
Animal bird = new Bird;
}
}
위와 같은 코드로 나타낼 수 있다.
상속을 나타내는 extends를 사용하여 is-a 관계를 표시한다.
또한, human과 cow, bird는 Animal 클래스의 setName() 메서드를 사용할 수 있다.
IS-A 상속을 사용하면 많은 장점이 있지만, 하위 클래스가 상위 클래스에 종속되기 때문에 이직적인 클래스 간에는 상속을 사용하지 않는 것이 좋다.
2. HAS-A
HAS-A 관계는 다른 클래스의 기능(변수 혹은 메서드)을 받아들여 사용한다.
has-a 관계는 하위 클래스가 상위 클래스를 소유한다는 의미를 가지고 있다.
물론 상속을 받기도 하지만 상속이 어울리지 않는 경우도 많다.
has-a관계는 extends와 같은 키워드를 사용하지는 않는다. 부모 클래스 또는 이 메서드에서 사용하려는 클래스의 객체를 만드는 것이다.
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());
}
}
위 코드를 보면 Dog 클래스는 Leg 클래스를 구성하고 있다는 의미로 해석된다.
has-a 관계와 관련된 기능은 자바의 인터페이서와 매우 연관성이 있다.
추후에 인터페이스를 공부하게 되었을 때, has-a 관계와 함께 다시 정리할 예정이다.
'Java > 문법 및 이해' 카테고리의 다른 글
[JAVA] Call by value, Call by reference의 이해 (0) | 2023.01.13 |
---|---|
[JAVA] final 키워드가 대체 무엇일까? (0) | 2023.01.12 |
[JAVA] 멤버 변수와 로컬 변수 (0) | 2023.01.12 |
[JAVA] Primitive Type과 Reference Type (0) | 2023.01.12 |
[Java] 자바의 예외처리 (Exception) (0) | 2023.01.08 |