부모/자식 클래스에서 세 가지의 질문을 해보자.
1. 상속 관계를 결정하는 클래스는 부모일까? 자식일까?
상속 관계를 결정하는 것은 자식이다! 현실 세계와 다르게 부모는 자식을 선택할 수 없고, 자식이 부모를 선택하는 방식이다!
public class Galaxy extends Phone {}
2. 생성자도 상속이 될까?
이 질문에 대해서는 논란이 있을 수 있지만,, 나는 상속이 안된다고 생각한다!
아래 코드를 보자.
public class Phone {
// 필드
private String brand;
// 생성자
public Phone(String brand) {
this.brand = brand;
}
public Phone() {}
// 메소드
void turnOn() {
System.out.println("핸드폰이 켜졌습니다.");
}
}
public class Galaxy extends Phone{
public static void main(String[] args) {
Galaxy galaxy = new Galaxy("Samsung"); // 여기서 에러남
galaxy.turnOn();
}
}
부모 클래스인 Phone에서 기본생성자와 함께 brand를 입력받는 생성자를 만들었다.
그리고 자식 클래스인 Galaxy에서는 생성자를 만들지 않았다.(생성자를 따로 생성하지 않았으니 기본 생성자만 있을 것이다.)
상속의 개념을 생각해봤을 때, 자식 클래스에서는 부모 클래스에 있는 멤버를 다시 선언하지 않아도 마음껏 사용할 수 있다.
그런데 주석을 보면 알겠지만 brand를 입력받는 생성자를 자식 클래스인 Galaxy에 적용하니까 바로 빨간줄이 생겼다.
즉, 부모 클래스에 있는 생성자를 자식 클래스에서 동일하게 사용할 수 없는 것이다.
이런 맥락에서 나는 "생성자는 상속되지 않는다!"라고 생각했다.
3. A, B 중 누가 부모이고, 자식일까?

현실 세계의 "개념"으로 보자면 A가 자식이고 그를 감싸고 있는 B가 부모이지만, 프로그래밍 세상에서 "상속"의 관점에서 보자면 A가 부모이고 그를 감싸고 있는 B가 자식이다.
자식은 부모가 가지고 있는 모든 것 + 자식만의 것까지 가지기 때문에 부모보다 더 크다고 볼 수 있다.
이 질문에 자문자답하는 과정에서 상속에 대해 더 본질적인 고민을 하게 되었다.
특히, 2번째 질문인 "생성자도 상속이 될까?"가 정말 헷갈렸다. 이 질문에 답을 하기 위해 직접 코드를 작성하면서 "상속이 안 될 것 같은데..?"라는 내 생각을 증명하는 과정을 거쳤다.
직접 코드로 확인을 하니까 이 개념만은 절대 잊지 않을 것 같다!
'백엔드 > Java' 카테고리의 다른 글
| 왜 내 주력언어는 JAVA일까? (0) | 2024.07.10 |
|---|---|
| 탁구 게임 KPT 회고 (0) | 2024.07.10 |
| 비밀번호를 변경할 때, REST API 중에 PUT을 쓸까, PATCH를 쓸까? (0) | 2024.07.05 |
| 오버라이딩(Override) (0) | 2024.07.04 |
| 버블 정렬 페어 프로그래밍 회고 (0) | 2024.07.03 |