Records rather than Memories

자바에서 상속이란 무엇인가 본문

Software/JAVA

자바에서 상속이란 무엇인가

Downer 2019. 10. 21. 17:31

 

상속이란 객체지향의 재활용성을 극대화 시킨 프로그래밍 기법이다.

 

즉, 객체의 필드(변수)와 메소드를 다른 객체가 물려 받는 기능을 말한다.

 

 

 

1
2
3
4
5
Calculator c1 = new Calculator();
c1.setOprands(1020);
c1.sum();
c1.avg(); 
c1.substract();
cs

위의 예제를 보자 만약 계산기라는 프로그램을 만든다고 할 때

substract라는 빼기 연산기능 메소드를 추가하려면 제한사항이 있다.

왜냐하면 자신이 만든 객체가 아닐 수 있고, 객체가 다양한 곳에서 활용되는데 무작정 메소드를 추가했을 때 오류가 발생할 수 있기 때문이다.

 

 

따라서, 기존의 객체를 유지하면서 어떤 기능을 추가하는 방법이 상속이다.

* 기존의 객체를 수정하지 않고 새로운 객체(자식)가 기존의 객체(부모)를 기반으로 자기입맛에 맞게 만드는 것이다.

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class Calculator {
    int left, right;
 
    public void setOprands(int left, int right) {
        this.left = left;
        this.right = right;
    }
 
    public void sum() {
        System.out.println(this.left + this.right);
    }
 
    public void avg() {
        System.out.println((this.left + this.right) / 2);
    }
}
 
class SubstractionableCalculator extends Calculator {
    public void substract() {
        System.out.println(this.left - this.right);
    }
}
 
public class CalculatorDemo1 {
 
    public static void main(String[] args) {
 
        SubstractionableCalculator c1 = new SubstractionableCalculator();
        c1.setOprands(1020);
        c1.sum();
        c1.avg();
        c1.substract();
    }
 
}
cs

 

다시 위의 예제를 보자

class SubstractionableCalculator extends Calculator 를 통해 Calculator 클래스를 상속받아 SubstractionableCalculator라는 자식 클래스를 만들었다.

이 부분을 통해 부모 클래스의 setOprand, sum, avg도 사용가능하고, 새로운 메소드 substract를 만들 수 있는 것이다.

 

 

그 때 자식클래스 SubstrationableCalculator.substract 메소드의 left, right 변수를 부모 클래스 Calculator에서 가져온다.

 

 

* 상속의 기능과 장점

 

-  부모클래스 기반으로 하나의 자식클래스 뿐 만아니라 곱하기, 나누기 등 많은 자식클래스를 만들 수 있다.

-  자식클래스를 기반으로 또 다른 자식클래스를 만들며 끊임 없이 상속할 수 있다.

 

- 코드 중복 제거

- 유지 보수 편리

- 어떤 클래스의 메소드인지 알아볼 때 상속 클래스를 보면 되기 때문에 가독성이 좋음

 

 

 

 

 

 

'Software > JAVA' 카테고리의 다른 글

overloading  (0) 2019.10.21
overriding  (0) 2019.10.21
[java] 초기화와 생성자  (0) 2019.10.21
유효범위란  (0) 2019.10.20
클래스 멤버와 인스턴스 멤버  (0) 2019.10.19
Comments