현대이지웰 자바 풀스택과정을 들으면서 배웠던 것들과 배우면서 들었던
나의 생각과 부족했던 점들을 돌아보면서
정리해보려고한다 이렇게 기록함으로써 좀 더 나은 개발자의 모습이 되었으면 희망한다.
🧐상속이란?
상속이란 기존 클래스의 필드와 메서드를 새로운 클래스에서 재사용 할 수 있게 해준다. extends 를 사용하여 상속을 받는다.


부모 클래스를 상속 받은 자식 클래스는 부모의 기능을 상속받아 사용할 수도 있고 Override로 새롭게 사용할 수도 있다.


이미지를 보면 부모의 기능을 상속 받은 자식 클래스가 부모 클래스에 존재하는 setParent() 와 showParent() 메서드를 사용하는 모습을 확인할 수 있다. 그리고 당연히 본인이 선언한 메서드도 사용하는 모습도 확인할 수 있다.
그리고 여기서 유의깊게 알고가야 할 부분이 있다.
자바는 다중 상속을 지원하지 않는다(extends 의 대상은 무조건 하나만 가능)
왜 그런지 확인해보자

Stuent 클래스가 hello()를 호출할 때 어떤 부모의 hello()를 호출해야할지 모르기 때문에 문제가 발생한다
이러한 문제 때문에 자바에서는 다중 상속을 허용하지 않는다(하지만 인터페이스의 다중 구현을 통해 문제를 피할 수 있다고 함)
😎더 깊게 알아보기 (메모리 구조)
부모 클래스를 상속받은 Child 클래스를 생성할 때 메모리에서 어떤 일이 일어나는지 확인해보자
Child c1 = new Child();
이때 new Child()를 통해 인스턴스를 생성할 때 사실 Child 인스턴스만 생성되는게 아니다

상속 관계가 있기 때문에 부모 클래스도 포함되어서 같이 생성된다.
겉보기에는 Child 인스턴스 하나만 생성하는 것처럼 보이지만 내부에서는 부모 클래스인 Parent도 함께 생성이되고 서로 독립적인 공간을 점유한다.
이때 c1.showChild()를 호출할 때 메서드 영역에서 참조값을 통해 확인하여 호출하는데 상속 관계의 경우 부모 클래스와 자식 클래스가 존재하기 때문에 선택 기준이 있어야 한다(부모클래스를 통해 찾을지 자식 클래스를 통해 찾을지 모르기 때문).
이럴때는 호출하는 변수의 타입을 기준으로 선택한다. c1의 타입은 Child 이기 때문에 같은 타입인 showChild()를 호출하게 된다.
만약 Child에 showChild() 메서드가 존재하지 않는다면 그때는 부모 타입인 Parent로 올라가서 찾는다.
상속 관계에서는 자식 타입에 해당하는 기능이 없으면 부모 타입으로 올라가서 찾게 된다.
⛔기능이 존재하는 부모타입을 찾게 될 때 까지 계속 올라가는데 끝까지 올라가서도 존재하지 않으면 컴파일 에러
‼️상속에서의 생성자
자식 없는 부모 없듯이 부모 클래스를 상속받은 자식 클래스의 인스턴스가 생성될 때 각각 두 클래스의 생성자가 실행된다.
이때 부모 클래스의 생성자가 먼저 실행된 다음 자식 클래스의 생성자가 실행된다.
기본 생성자(디폴트 생성자)의 경우 생략이 가능하기 때문에 상관없지만(자바가 부모의 기본 생성자를 호출하는 super()를 자동으로 만들어 줌), 파라미터가 있는 생성자라면 꼭 자식 클래스에서 호출 해줘야한다. 그렇지 않으면 컴파일 오류가 발생한다.

상속 관계에서 생성자는 부모 -> 자식 순으로 실행된다.
✅오버라이딩( Overriding )
부모 클래스를 상속받은 자식 클래스가 상속받은 기능을 새롭게 재정의 하고 싶을 때 사용한다.
Override를 사용하여 (@Override) 표기한다
// 부모 클래스 Parent
public class Parent() {
pubic void hello() {
System.out.println("부모 클래스입니다.");
}
}
//-----------------------------
// 자식 클래스 Child
public class Child() extends Parent {
@Override
public void hello() { // 부모 클래스의 hello()메서드를 override하여 재정의 가능
System.out.println("자식 클래스입니다.");
}
하지만 오버라이딩을 사용하기 위해서는 꼭 알아야 하는 조건들이 존재한다.
- 메서드 이름이 같아야 함 ( 부모 클래스: hello() -> 자식 클래스: hi() ❌안됨)
- 매개 변수의 갯수가 같아야 함
- 반환 타입이 같아야 함 (String으로 반환했었다면 마찬가지로 String으로 반환해줘야 함)
- 접근 제어자 : 부모 클래스보다 접근 범위를 좁혀서는 안됨
- 생성자는 오버라이딩 할 수 없음
✅super (부모 요소 참조)
자식 클래스에서 부모 클래스에 접근하기 위해 사용된다.
super는 오버라이딩 상황에서도 유용하게 사용된다.
만약 자식 클래스에서 오버라이딩한 메서드도 사용하고 싶고 부모 클래스의 메서드도 사용하고 싶다면 어떻게 해야할까?
이때 super 를 사용하면 된다.

super 를 사용하면 부모 클래스의 메서드를, this 를 사용하면 자식 클래스(본인)의 메서드를 사용할 수 있다.
❇️정리
자바에서 상속을 사용하면서 알아야 할 점과 유의해야 할 점에 대해서 정리해봤는데 놓칠수도 있는 부분을 정리를 통해 더 디테일하게 알 수 있었고 나중에 설계할 때 이 점을 유의해서 좀 더 객체 지향적으로 코드를 작성할 수 있을거라고 느꼈다.
'Archive > Java 풀스택 아카데미' 카테고리의 다른 글
| [TIL] 6. 8월 JDBC (2) | 2025.08.19 |
|---|---|
| [TIL] 5. 8월 JAVA(SET) (4) | 2025.08.09 |
| [TIL] 3. 7월 4주차 - React (학습 중에 알게된 것들) (2) | 2025.07.27 |
| [TIL] 2. 7월 3주차 - jQuery & React(학습 중에 알게된 것들) (2) | 2025.07.20 |
| [TIL] 1. 7월 2주차 - JS & jQuery (연습문제+관련개념들) (3) | 2025.07.13 |