상속(Inheritance)
상속이란 물려준다는 의미이다.
어떤 객체가 있을 때 그 객체의 필드(변수)와 메소드를 다른 객체가 물려받을 수 있는 기능을 상속이라고 한다.
이때 기존의 객체는 기능을 물려준다는 의미에서 부모 객체가 되고, 새로운 객체는 기존의 객체의 기능을 물려받는다는 의미에서 자식 객체가 된다. 부모 클래스를 상위 클래스, 자식 클래스를 하위 클래스라고도 표현한다.
객체에 메소드를 추가하는 것이 어려운 경우는 다양하지만 공부했을 때 들었던 경우 두 가지만 아래와 같이 정리하였다.
- 객체를 자신이 만들지 않은 경우에는 소스를 변경할 수 없다. 변경할 수 있다고 해도 원 소스를 업데이트 하면 자신이 만든 메소드는 사라진다. 이러한 문제가 일어나지 않게 하기 위해서는 지속적으로 코드를 관리해야 한다.
- 객체가 다양한 곳에서 활용되고 있는데 메소드를 추가하면 다른 곳에서는 불필요한 기능을 포함될 수 있다. 이것은 자연스럽게 객체를 사용하는 입장에서 몰라도 되는 것까지 알아야 하는 문제가 된다.
이제 상속에 대한 코드 예제를 보자!

Calculator 클래스에 아래와 같은 코드를 추가하였다.
class substractionableCalculator extends Calculator {
public void substract() {
System.out.println(this.left - this.right);
}
}
이 코드를 해석하면 extends는 확장이라는 의미로 사용되어지는데 'substractionableCalculator 클래스가 extends 뒤에 있는 Calculator라는 클래스를 상속받는다'라는 뜻이다.
즉, Calculator 클래스가 substractionableCalculator 클래스의 부모 클래스이고, substractionableCalculator 클래스는 Calculator 클래스의 자식 클래스가 된다.
이제 substractionableCalculator 클래스 내에 substract 라는 메소드를 생성하여 빼기를 할 수 있다.
아래 코드와 같이 Calculator 클래스를 상속받은 substractionableCalculator 클래스를 구체화한 객체, 인스턴스를 생성하여 Calculator가 가지고 있는 메소드 뿐만 아니라 substractionableCalculator 클래스에 있는 substract 메소드도 실행시킬 수 있게 된다.
public class CalculatorDemo1 {
public static void main(String[] args) {
substractionableCalculator c1 = new substractionableCalculator();
c1.setOprands(10, 20);
c1.sum();
c1.avg();
c1.substract();
}
}
아래 코드는 Calculator를 상속받고 곱하기를 할 수 있는 메소드(Multiplication)를 생성한 MultiplicationableCalculator 클래스이다.

자, 그러면 하나의 부모 클래스가 여러 개의 자식 클래스를 가질 수 있을까? 대답은 Yes 이다.
하나의 부모 클래스가 여러 개의 자식 클래스를 가질 수 있으며, 자식 클래스가 자식 클래스를 가질 수 있다.
자식 클래스가 자식 클래스를 가지게 된다면 전자의 자식 클래스는 후자의 자식 클래스의 부모 클래스가 되는 것이고 후자의 자식 클래스는 전자의 자식 클래스의 부모 클래스가 조부모 클래스가 된다.
아래 코드를 살펴보자.
DivisionableCalculator 클래스는 위에 있는 MultiplicationableCalculator 클래스를 상속 받아 MultiplicationableCalculator 클래스의 자식 클래스가 된다. 즉, MultiplicationableCalculator 클래스는 DivisionableCalculator 클래스의 부모 클래스가 되는 것이다.
DivisionableCalculator 클래스가 MultiplicationableCalculator 클래스 안에 있는 메소드를 사용할 수 있을 뿐더러 MultiplicationableCalculator 클래스가 Calculator 클래스의 자식 클래스이기 때문에 Calculator 클래스 안에 있는 메소드를 DivisionableCalculator 클래스가 사용할 수 있게 된다.

'TIL > Java' 카테고리의 다른 글
[Java] 오버라이딩(Overriding) (0) | 2022.01.19 |
---|---|
[Java] 상속과 생성자 (0) | 2022.01.18 |
[Java] 유효범위(Scope) (0) | 2022.01.17 |
[Java] 클래스 멤버와 인스턴스 멤버: 타입별 비교 (0) | 2022.01.17 |
[Java] 연속적으로 값을 입력하기 / 파일 가져오기 (Scanner + While + File) (0) | 2022.01.15 |