
👨👩👧 상속 (Inheritance)
상속은 말 그대로 '물려받는 것'이에요. 마치 자식이 부모님으로부터 키나 머리 색깔 같은 것을 물려받는 것처럼요.
상속의 개념
프로그래밍에서는 이미 만들어 놓은 어떤 것(클래스)의 특징이나 능력을 다른 새로운 것(새로운 클래스)이 그대로 물려받아 사용할 수 있도록 하는 것을 말해요.
- 부모 클래스 (Parent Class) 또는 슈퍼 클래스: 물려주는 쪽
- 자식 클래스 (Child Class) 또는 서브 클래스: 물려받는 쪽
상속을 사용하면 똑같은 코드를 여러 번 쓸 필요가 없어서, 프로그래밍을 더 쉽고 효율적으로 할 수 있어요!
상속 예제: '동물'과 '개', '고양이'
- 부모 (동물): 모든 동물이 가지고 있는 공통된 특징을 만들어요.
- 특징: 숨을 쉰다, 잠을 잔다, 음식을 먹는다.
- 능력: '움직인다'
- 자식 1 (개): 개는 동물이에요.
- 동물이 가진 모든 특징과 능력을 물려받아요. (숨을 쉬고, 잠을 자고, 먹고, 움직일 수 있어요.)
- 개만의 새로운 능력: '멍멍 짖는다'
- 자식 2 (고양이): 고양이도 동물이에요.
- 동물이 가진 모든 특징과 능력을 물려받아요.
- 고양이만의 새로운 능력: '야옹하고 운다'
이렇게 하면 '숨쉬기', '잠자기', '먹기', '움직이기' 코드를 개와 고양이를 만들 때 또 쓰지 않아도 돼요. 동물 클래스가 이미 가지고 있으니까요!
💻 Java 상속 예제: Animal, Dog, Cat
이 예제에서는 Animal 클래스가 부모 클래스(슈퍼 클래스)가 되고, Dog와 Cat 클래스가 자식 클래스(서브 클래스)가 되어 Animal의 특징과 능력을 물려받습니다.
1. 부모 클래스 (슈퍼 클래스): Animal
모든 동물의 공통적인 특징(필드)과 능력(메서드)을 정의합니다.
Java
public class Animal {
// 공통 특징 (필드)
String species; // 종
// 생성자
public Animal(String species) {
this.species = species;
}
// 공통 능력 (메서드)
public void breathe() {
System.out.println(species + "이/가 숨을 쉽니다.");
}
public void eat() {
System.out.println(species + "이/가 음식을 먹습니다.");
}
public void move() {
System.out.println(species + "이/가 움직입니다.");
}
}
2. 자식 클래스 (서브 클래스): Dog
Animal 클래스를 extends 키워드를 사용하여 상속받습니다.
Java
// Dog 클래스는 Animal 클래스의 모든 것을 물려받습니다.
public class Dog extends Animal {
// 생성자: 부모 클래스의 생성자를 호출해야 합니다.
// 'Dog'는 항상 '개'이므로 species를 직접 지정했습니다.
public Dog() {
super("개"); // super()는 부모 클래스(Animal)의 생성자를 호출합니다.
}
// 개만의 고유한 능력
public void bark() {
System.out.println("개: 멍멍 짖습니다!");
}
}
3. 자식 클래스 (서브 클래스): Cat
Animal 클래스를 상속받아 고양이만의 고유한 능력을 추가합니다.
Java
// Cat 클래스는 Animal 클래스의 모든 것을 물려받습니다.
public class Cat extends Animal {
// 생성자
public Cat() {
super("고양이"); // 부모 클래스(Animal)의 생성자를 호출
}
// 고양이만의 고유한 능력
public void meow() {
System.out.println("고양이: 야옹하고 웁니다.");
}
}
4. 실행 클래스 (Main Method)
실제로 Dog와 Cat 객체를 만들고 상속받은 능력과 고유 능력을 모두 사용하는 예제입니다.
Java
public class InheritanceExample {
public static void main(String[] args) {
// 1. Dog 객체 생성
Dog myDog = new Dog();
System.out.println("--- 나의 강아지 ---");
// 상속받은 능력 사용: '개' 클래스에 breathe(), eat(), move() 코드가 없지만,
// 부모인 'Animal' 클래스로부터 물려받았기 때문에 사용할 수 있습니다!
myDog.breathe();
myDog.eat();
myDog.move();
// 개 고유의 능력
myDog.bark();
System.out.println("\n-----------------");
// 2. Cat 객체 생성
Cat myCat = new Cat();
System.out.println("--- 나의 고양이 ---");
// 상속받은 능력 사용
myCat.breathe();
myCat.eat();
myCat.move();
// 고양이 고유의 능력
myCat.meow();
}
}
실행 결과
--- 나의 강아지 ---
개가 숨을 쉽니다.
개가 음식을 먹습니다.
개가 움직입니다.
개: 멍멍 짖습니다!
-----------------
--- 나의 고양이 ---
고양이가 숨을 쉽니다.
고양이가 음식을 먹습니다.
고양이가 움직입니다.
고양이: 야옹하고 웁니다.
요약
- Dog와 Cat은 공통된 코드를 다시 작성할 필요 없이 Animal의 모든 기능을 물려받았습니다.
- 자식 클래스에서는 super()를 사용하여 부모 클래스의 생성자를 호출해야 합니다.
- 상속을 통해 코드의 재사용성이 높아지고, 프로그램 관리가 훨씬 쉬워집니다.
'Java_language' 카테고리의 다른 글
| 오버라이딩 (Overriding) (0) | 2025.12.03 |
|---|---|
| 다형성 (0) | 2025.12.03 |
| 상속이란? (0) | 2025.12.01 |
| 자바의 import (0) | 2025.12.01 |
| 클래스 변수 vs 인스턴스 (0) | 2025.12.01 |