- 목차
- 객체 지향 프로그래밍 언어의 주요 기능 중 하나는 코드를 여러 번 재 사용할 수 있다는 것이다.
- 재 사용성을 달성하기 위해 상속(IS-A)과 구성(HAS-A)이라는 두 가지 개념을 사용한다.
IS-A 관계
- extends 키워드 사용
- 부모 클래스를 상속하여 자식 클래스에서 해당 메서드와 변수를 사용할 수 있다.
- 부모 클래스의 변수와 메소드만 호출 할 수 있다.
- 원칙적으로 자식 클래스의 변수와 메소드는 호출 할 수 없다.
- 자식 클래스에 부모 클래스에게서 Override한 메소드가 있다면 그 메소드는 호출이 가능하다.
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());
}
}
Dog 클래스는 Animal 클래스를 상속하였기에 whatAmI() 메서드에 액세스할 수 있다.
HAS-A 관계
- new 키워드를 통해서 사용하려는 클래스의 개체를 만든다.
- 부모 클래스를 상속하여 자식 클래스에서 해당 메서드와 변수를 사용할 수 있다.
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클래스에서 Legs클래스의 객체를 만들고 howManyLegs()함수를 호출 할 수 있다.
상속을 코드 재사용의 개념으로 이해하면 안됩니다.
- 코드를 재사용할 수 있다고 마구잡이로 잘못 사용하는 경우가 있습니다.
- 상속을 사용하면 클래스간 결합도가 높아져 상위 클래스를 수정해야 할 때 하위 클래스에 미치는 영향이 매우 큽니다.