자바 객체지향 프로그래밍(OOP)의 핵심 기둥 중 하나인 **상속(Inheritance)**에 대해 알아보겠습니다.
상속은 기존의 클래스를 재사용하여 새로운 클래스를 만드는 기술로, 코드의 중복을 줄이고 계층적인 구조를 설계할 때 필수적입니다.
📘 상속(Inheritance): "부모의 유산을 물려받는 기술"
1. 상속이란?
- 설명: 새로운 클래스를 만들 때 이미 잘 만들어진 클래스의 필드(변수)와 메서드를 그대로 물려받는 것입니다.
- 용어: 물려주는 클래스를 부모 클래스(Parent/Super Class), 물려받는 클래스를 **자식 클래스(Child/Sub Class)**라고 부릅니다.
- 키워드: extends를 사용하여 상속을 표현합니다.
2. 상속의 특징
- 코드 재사용: 부모 클래스에 한 번만 작성하면 모든 자식 클래스에서 가져다 쓸 수 있어 중복이 사라집니다.
- 단일 상속: 자바는 클래스 간의 다중 상속을 허용하지 않습니다. (부모는 오직 한 명만 가질 수 있습니다.)
- private 제외: 부모의 필드나 메서드가 private으로 선언되어 있으면 자식이 직접 접근할 수 없습니다.
3. 상속의 기본 예제
어떻게 부모의 기능을 내 것처럼 쓰는지 코드로 확인해 보겠습니다.
Java
// 부모 클래스: 공통 특성
class Phone {
String model;
String color;
void bell() { System.out.println("벨이 울립니다."); }
void sendVoice(String message) { System.out.println("나: " + message); }
void receiveVoice(String message) { System.out.println("상대방: " + message); }
}
// 자식 클래스: 특화된 기능 추가
class SmartPhone extends Phone {
void internet() { System.out.println("인터넷에 연결합니다."); }
}
public class InheritanceExample {
public static void main(String[] args) {
SmartPhone myPhone = new SmartPhone();
// 부모에게서 물려받은 필드와 메서드 사용
myPhone.model = "Galaxy S26";
myPhone.color = "Black";
myPhone.bell();
// 자식만의 고유 기능 사용
myPhone.internet();
}
}
4. 메서드 오버라이딩 (Method Overriding)
부모에게서 물려받은 메서드가 자식 클래스에게 맞지 않을 때, 자식이 내용을 재정의하여 사용하는 것입니다.
Java
class Calculator {
double areaCircle(double r) {
System.out.println("부모 계산기 실행");
return 3.14159 * r * r;
}
}
class Computer extends Calculator {
@Override // 재정의되었음을 나타내는 어노테이션
double areaCircle(double r) {
System.out.println("자식 계산기(정밀) 실행");
return Math.PI * r * r;
}
}
👨🏫 쉽게 이해하는 핵심 포인트
- super 키워드: 자식 클래스 내부에서 부모 객체에 접근하고 싶을 때 사용합니다. (예: super.method())
- 생성자의 비밀: 자식 객체를 생성하면 내부적으로 부모 객체의 생성자가 먼저 호출됩니다.
- IS-A 관계: 상속은 "~은 ~이다" 관계가 성립할 때만 사용하는 것이 좋습니다. (예: 스마트폰은 전화기이다.)
오늘의 요약
- 상속은 부모의 코드를 자식이 그대로 물려받아 재사용하는 것이다.
- extends 키워드를 사용하며, 부모는 단 하나만 가질 수 있다.
- 오버라이딩을 통해 부모의 기능을 자식에 맞게 업그레이드할 수 있다.
자바의 생산성을 극대화해 주는 상속의 개념을 마스터하셨습니다!

'JAVA' 카테고리의 다른 글
| Exception class (0) | 2025.11.05 |
|---|---|
| Promotion (0) | 2025.10.20 |
| Exception handing (0) | 2025.10.08 |
| JAVA Comments (2) | 2025.08.27 |
| JVM (0) | 2025.08.27 |