상속이란 물려준다는 의미이다.
자바라는 언어를 개발할때 상속이라는 개념을 왜 만들었는지 먼저 생각해보면 상속의 개념을 이해하고 사용하기에 더 좋을 것 같다.
예를 들어서 생각해보자. 나는 개발자다. 다른 개발자가 만든 'food class'를 사용하고 있는데 'making food 메소드'와 'eating food 메소드'는 있는데 나는 'order food 메소드'도 추가하고 싶다.
그렇다면 'food class'를 고쳐서 'order food 메소드'를 추가하면 간단하다.
하지만 이게 좋은 방법은 아니다. 'food class'를 만든 개발자가 원본 소스로 업데이트를 하게 되면 내가만든 'order food 메소드'가 사라져 버리고 따라서 그런일이 일어나지 않도록 계속해서 코드를 관리 해야한다.
또한 'food class'가 다른 곳에서도 사용되고 있는데 나만 편리하자고 메소드를 추가하면 다른곳에선 불필요한 기능이 포함되는 일이 되고 만다.
자바를 만든 개발자는 이런 문제를 해결하기 위해 어떻게 했을까? 바로 '상속'으로 이 문제를 해결했다.
코드로 예를 들어보자
class food{
public String menu;
public void setMenu(String menu){
this.menu = menu;
}
public void makingFood(){
System.out.println(this.menu+"를 만들었다!");
}
}
menu를 파라미터값으로 받고 메뉴를 만드는 메소드를 가진 food클래스가 있다.
class foodTest extends food {
public void eatingFood() {
System.out.println(this.menu+"를 먹었다!");
}
}
food클래스를 상속받는 foodTest 클래스를 만들었다.
이 클래스는 메뉴를 먹는 메소드만 가지고 있지만 food클래스를 상속받았기 때문에 메뉴를 만드는 메소드도 사용할 수 있다.
그렇다면 foodTest를 상속받는 foodOrder클래스는 어떨까?
class foodOrder extends foodTest {
public void orderFood() {
System.out.println(this.menu+"를 주문했다!");
}
}
class Main {
public static void main(String[] args) {
foodOrder food = new foodOrder();
food.setMenu("피자");
food.makingFood();
food.eatingFood();
food.orderFood();
}
}
food를 주문하는 메소드만 가진 foodOrder는 foodTest를 상속받고 있다.
main 클래스에서 foodOrder 객체를 생성해서 food, foodTest, foodOrder 메소드를 모두 호출해보았다.
결과 :
피자를 만들었다!
피자를 먹었다!
피자를 주문했다!
모두 잘 실행되는 걸 확인 할 수 있다.
상속이란 내가 작성한 클래스에 메소드를 구현하지 않아도 상속만 받으면 상속 받은 클래스의 메소드를 사용할 수 있다.
이로써 코드의 중복을 피할 수 있고 부모클래스의 코드를 개선하면 자식 클래스에게도 혜택이 돌아가므로 유지보수가 편해진다.

'Java, Spring' 카테고리의 다른 글
| [JPA] Entity->DTO, DTO->Entity 간의 매핑을 편리하게 해주는 MapStruct (0) | 2023.09.08 |
|---|---|
| [JPA] 동시성 문제 해결 / 비관적 락(Pessimistic Locking) / 인텔리제이에서 동시성 테스트하기 (0) | 2023.08.01 |
| [Java] 생성자(Constructor)란? 생성자의 특징 (0) | 2022.03.03 |
| [Java] private static을 쓰는 경우 (0) | 2022.03.03 |
| [Spring Boot] 점층적 생성자패턴 vs 자바빈즈패턴 vs 빌더패턴 장단점을 알아보자 (0) | 2022.02.24 |