이번엔 상속입니다
여러분들이 자바라는 언어를 공부하실 때 배웠던 내용 중 하나는
재사용성이 좋다는 것입니다
상속이라는 것은 재활용을 극대화 시켰다 라고 말해도 무방 할 정도로 필수적이고
그만큼 복잡하고 어려운 부분입니다
하지만 포기하기엔 너무 많이 사용하며 이것을 모르면 이 언어를 안다고 할 수 없습니다
그 정도로 중요한 내용이기 때문에 다뤄보도록 합시다
우리가 저번에 만들었던 Calculator 클래스를 예로 들어봅시다 이 클래스를 이미 만들었죠?
그리고 우린 다른 패키지에서 이 클래스를 사용하려고 합니다
아 그런데 기능이 조금은 다르네요 나는 인스턴스 생성할 때 멤버 변수에 값을 바로
삽입해서 만들고 싶은데 아 그냥 수정해서 써야겠다
라고 생각하면 안됩니다 실제 프로젝트에서는 이 클래스를 어디에서 사용하는지 모르기
때문입니다 만약 이 클래스를 다른 패키지 약 10곳 에서 사용 중이라면 그 패키지에 가서
다 수정을 해줘야 할까요 .. 그것처럼 힘든 일은 없을 겁니다 남이 짜 놓은 소스는 수정하기
힘들기 때문이에요 그래서 이 객체를 유지 하면서 기능을 추가하는 방법이 바로 상속입니다
기존의 객체 즉 클래스를 토대로 새로운 객체를 생성하는 것이 상속입니다
상속하면서 기능은 물려주기 때문에 기존 객체는 부모가 되고 상속받아서 구현하는
객체는 자식이 됩니다
소스로 확인해 봅시다
class Calculator {
int num1 = 0;
int num2 = 0;
public void setNum(int num1, int num2) {
this.num1 = num1;
this.num2 = num2;
}
public void sum() {
System.out.println(this.num1 + this.num2);
}
}
저번에 구현했던 계산기 클래스입니다
여기에 있는 메서드를 보면 값을 set 하고 sum이라는 더하기 메서드가 있습니다
근데 나는 더하기도 해야 하고 빼기도 해야 하는데 아 저 클래스 자체를 수정해버리자
라고 하면 안 됩니다 객체는 원형을 유지해야 하는 것이 맞습니다
뭐 물론 지금 클래스를 보면 계산 클래스인데 더하기 빼기가 없는 게 이상하지만 예시 이기 때문에
객체 자체는 수정하면 안 된다 라는 것입니다
그럼 우리는 상속을 받아서 저 클래스 원형을 가져오고 거기에다가 빼기 메서드만 추가해서 써야겠다
하면 이런 식으로 상속받은 자식 클래스를 만들어줍니다
class EtndCalculator extends Calculator {
public void substract() {
System.out.println(this.num1 - this.num2);
}
}
extends 키워드를 적어주고 그 뒤에 원형인 부모 클래스명을 적어줍니다
이러면 상속입니다
자 그럼 사용법은 코드로 보시죠
public static void main(String[] args) {
EtndCalculator cal = new EtndCalculator();
cal.setNum(10, 20);
cal.sum();
cal.substract();
}
우리는 분명 EtndCalculator 클래스를 인스턴스화 했는데 그 클래스에는 substract 메서드 밖에 없는데
setNum을 하고 sum을 할 수 있는 거지?라는 의문이 들 텐데
그게 바로 상속입니다
부모 클래스에 있는 메서드를 가져와 쓸 수 있기 때문이에요
그리고 알아야 할 내용이 또 있는데 그것은 이미 상속받은 EtndCalculator 클래스에서 상속을 한번
더 해서 객체를 구현할 수도 있습니다
아 나는 더하기 빼기도 써야 하고 나누기 메서드도 있었으면 좋겠네 ㅜㅜ라고 하면
EtndCalculator 클래스를 상속해서 객체를 만들면 세 개 다 사용이 가능합니다 ㅎㅎ
이처럼 상속은 기존의 객체의 원형을 유지하면서 새로운 기능을 더 삽입할 수도 있습니다
객체는 고유해야 하니까요
그리고 실무에 넘어와서 상속을 사용하면서 느낀 것은 대부분 상속은
프레임워크에서 미리 만들어놓은 클래스를 상속받아 기능만 쓰는 것이 대부분이고
내가 만든 객체가 아니라도 실력 있는 개발자가 만들어놓은 클래스에 추가하고 싶은 부분이 있다면
상속받아서 사용하는 것이 현명한 방법이라고 할 수 있겠습니다
이것이 상속입니다
'Developer > Java' 카테고리의 다른 글
[java] 접근제어자 (0) | 2022.08.16 |
---|---|
[java]오버라이딩 (0) | 2022.08.03 |
[java]생성자 (0) | 2022.07.29 |
[java]멤버란 무엇인가(클래스, 인스턴스) (0) | 2022.07.28 |
[java]클래스와 인스턴스 (0) | 2022.07.21 |