자바/객체 지향 프로그래밍
상속(Inheritance)과 코드 재사용 - 자바 객체지향 설계의 핵심
끄적인다
2025. 4. 27. 23:34
반응형
자바에서 *상속(Inheritance)*은 객체지향 프로그래밍의 핵심 개념 중 하나로, 기존 클래스를 확장하여 코드를 재사용하고 유지보수성을 높이는 데 매우 유용합니다. 이번 글에서는 상속의 개념, 장점, 문법, 그리고 실전 예제를 통해 상속을 제대로 이해해봅니다.
🌱 1. 상속이란?
상속은 기존 클래스를 기반으로 새로운 클래스를 정의하는 방식입니다. 부모 클래스(슈퍼클래스)의 필드와 메서드를 자식 클래스(서브클래스)가 물려받아 사용할 수 있습니다.
class Animal {
void eat() {
System.out.println("먹는다");
}
}
class Dog extends Animal {
void bark() {
System.out.println("짖는다");
}
}
public class Test {
public static void main(String[] args) {
Dog dog = new Dog();
dog.eat(); // 상속받은 메서드
dog.bark(); // 자식 메서드
}
}
Dog 클래스는 Animal 클래스를 extends 키워드로 상속받습니다.
♻️ 2. 상속의 장점
상속을 통해 얻을 수 있는 대표적인 이점은 다음과 같습니다:
✅ 코드 재사용
- 이미 구현된 기능을 자식 클래스가 재사용할 수 있음
- 중복 코드 제거 → 유지보수 용이
✅ 기능 확장
- 자식 클래스에서 필요한 기능을 추가로 구현 가능
- 기존 기능을 그대로 두고, 추가 기능을 덧붙이는 구조로 확장
✅ 다형성(Polymorphism)의 기반
- 상속을 통해 자식 객체를 부모 타입으로 다룰 수 있음
- 인터페이스, 추상 클래스와 함께 사용 시 강력한 확장성 확보
🛠️ 3. 상속의 기본 문법
class 부모클래스명 {
// 필드와 메서드
}
class 자식클래스명 extends 부모클래스명 {
// 추가 필드와 메서드
}
자바는 단일 상속만 지원합니다. (즉, 한 번에 하나의 클래스만 상속 가능)
🧩 4. 상속의 실전 예시
class Person {
String name;
int age;
void introduce() {
System.out.println("이름: " + name + ", 나이: " + age);
}
}
class Student extends Person {
String major;
void study() {
System.out.println(major + "를 공부합니다.");
}
}
public class Main {
public static void main(String[] args) {
Student s = new Student();
s.name = "영희";
s.age = 20;
s.major = "컴퓨터공학";
s.introduce();
s.study();
}
}
Student 클래스는 Person 클래스를 상속받아 이름, 나이 필드를 그대로 사용하면서 major 필드와 study() 메서드를 추가로 정의합니다.
🧠 5. 상속 시 주의할 점
항목설명
단일 상속 | 자바는 하나의 클래스만 상속 가능 (다중 상속 불가) |
생성자 상속 불가 | 부모 생성자는 자식 클래스에 상속되지 않음. super()로 호출 필요 |
오버라이딩 가능 | 부모 메서드를 자식 클래스에서 재정의할 수 있음 |
접근 제어자 제한 | private 멤버는 상속되지만 접근은 불가능 |
✅ 정리 요약
개념 | 설명 |
상속 | 부모 클래스의 속성과 메서드를 자식 클래스가 물려받음 |
장점 | 코드 재사용, 기능 확장, 다형성 지원 |
사용법 | class 자식 extends 부모 {} 형태 |
주의점 | 단일 상속, 생성자 미상속, 접근 제한 고려 필요 |
🚀 마무리
상속은 자바에서 객체 지향 프로그래밍을 효과적으로 구현하기 위한 핵심 도구입니다. 코드 중복을 줄이고, 유연한 구조로 확장성을 높이기 위해 반드시 숙지해야 할 개념입니다. 다음에는 상속과 함께 자주 사용되는 오버라이딩, 추상 클래스, 인터페이스 등도 함께 공부해보세요!
반응형