본문 바로가기
Java_language

상속

by 헬로제이콥 2025. 12. 3.

👨‍👩‍👧 상속 (Inheritance)

상속은 말 그대로 '물려받는 것'이에요. 마치 자식이 부모님으로부터 키나 머리 색깔 같은 것을 물려받는 것처럼요.

상속의 개념

프로그래밍에서는 이미 만들어 놓은 어떤 것(클래스)의 특징이나 능력을 다른 새로운 것(새로운 클래스)이 그대로 물려받아 사용할 수 있도록 하는 것을 말해요.

  • 부모 클래스 (Parent Class) 또는 슈퍼 클래스: 물려주는 쪽
  • 자식 클래스 (Child Class) 또는 서브 클래스: 물려받는 쪽

상속을 사용하면 똑같은 코드를 여러 번 쓸 필요가 없어서, 프로그래밍을 더 쉽고 효율적으로 할 수 있어요!

상속 예제: '동물'과 '개', '고양이'

  1. 부모 (동물): 모든 동물이 가지고 있는 공통된 특징을 만들어요.
    •   특징: 숨을 쉰다, 잠을 잔다, 음식을 먹는다.
    •   능력: '움직인다'
  2. 자식 1 (개): 는 동물이에요.
    •   동물이 가진 모든 특징과 능력을 물려받아요. (숨을 쉬고, 잠을 자고, 먹고, 움직일 수 있어요.)
    •   개만의 새로운 능력: '멍멍 짖는다'
  3. 자식 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