Java

[중앙정보처리학원] Java* 객체지향 상속 (Inheritance)

해보구 2024. 4. 22. 16:34

상속이란 무엇인가

일상생활 속에서 상속이란 유, 무형의 자산을 부모로부터 자식이 물려받는 것을 말한다.

그렇다면 프로그래밍에서의 상속이란?

거의 의미가 동일하다고 할 수 있다.

부모 클래스가 가진 속성과 기능을 자식 클래스가 물려받는 것을 말한다.

 

tips

 

// 상속은 확장개념이다. 3g폰이 2g 폰의 기능을 가지고 있듯

 

 

상속이 필요한 상황

동물 클래스를 여럿 작성한다.

 

 

작성하다 보니… 불합리한 점이 발견되었다.

각각 클래스는 다르지만, 가지고 있는 속성과 기능이 너무나 비슷한 것을

찾아볼 수 있다.

모든 동물들 클래스가 name, age, favorite 이라는 속성을 가지고 있고

breath() 기능과 sleep() 기능을 가지고 있다.

이 상황에서 동물 클래스를 더 제작한다면… 그리고 그 동물들도 모두 같은 속성과

같은 기능을 가지고 있다면, 클래스를 더 작성하기가 힘들 것이다.

그래서 어떡하느냐? 상속을 이용한다.

 

그림을 살펴보면, Animal 이라는 클래스가 추가되었다.

Animal 클래스는 기존 Dog, Cat, Monkey, Dolphin이 가지고 있는 속성과 기능을 모두 모아놓은

클래스로 작성했으며, 부모 클래스로 지정할 예정이다.

그리고 나머지 동물 클래스들이 Animal 클래스를 상속받는 형식으로 구축을 해 준다.

상속이 이루어 진다면 부모가 가진 모든 필드와 메서드들이 자식에게 물려진다.

이렇게 작성하면 클래스마다 중복되는 속성과 기능을 일일히 작성할 필요가 없고

각자가 가지는 고유한 속성들만을 클래스에 추가하여 개념을 확장할 수 있을 것이다.

 

코드로 간단히 살펴보도록 하자

package day07.inherit;

// 고전 계산기 : 원주율값이 소수점 둘째자리까지만 저장이 가능
public class Calculator {

    // 원의 넓이를 구하는 기능
    public double calcAreaCircle(int r) {
        return r * r * 3.14;

    }

}

 

그리고 이를 상속하는 

package day07.inherit;

public class Computer extends Calculator {


    @Override
    public double calcAreaCircle(int r) {
        return r * r * Math.PI;
    }
}

 

이를 실행하는

package day07.inherit;

public class Main {

    public static void main(String[] args) {

        Calculator cal = new Calculator();
        Computer com = new Computer();

        System.out.println("계산기로 구한 원의 넓이: " + cal.calcAreaCircle(5));
        System.out.println("컴퓨터로 구한 원의 넓이: " + com.calcAreaCircle(5));
    }
}