상속, 인터페이스

moon.kick·2025년 2월 24일

클래스 상속(extends)과 인터페이스 구현(implements)의 차이를 표로 정리해줄게!


클래스 상속 (extends) vs 인터페이스 구현 (implements) 비교

항목클래스 상속 (extends)인터페이스 구현 (implements)
목적기존 클래스의 기능을 재사용하고 확장특정 기능(행동)만 따로 구현하도록 강제
키워드extends 사용implements 사용
다중 상속 가능 여부불가능 (자바는 단일 상속만 지원)가능 (여러 개의 인터페이스를 동시에 구현 가능)
구현해야 하는 것부모 클래스의 메서드를 재정의(override)할 수도 있고, 그대로 사용할 수도 있음반드시 인터페이스의 모든 추상 메서드를 구현해야 함 (abstract 메서드는 무조건 오버라이드 필요)
생성자 상속 여부가능 (부모 클래스의 생성자를 호출할 수 있음: super())불가능 (인터페이스에는 생성자가 없음)
필드(변수) 상속 여부가능 (부모 클래스의 필드를 상속받아 사용할 수 있음)불가능 (인터페이스에는 필드가 없거나 public static final 상수만 가능)
메서드 구현 여부부모 클래스의 메서드를 상속받아 바로 사용 가능인터페이스의 모든 메서드는 반드시 구현해야 함 (단, default 메서드는 구현할 수도 있음)
사용 예시부모 클래스의 공통 기능을 그대로 물려받고 싶을 때특정 기능을 여러 클래스에서 공통적으로 구현할 때
대표적인 예시class Dog extends Animal {}class Dog implements Runnable {}

코드 예제

🎯 1. extends(클래스 상속) 예제

// 부모 클래스
class Animal {
    String name;

    public void eat() {
        System.out.println(name + "가 먹고 있습니다.");
    }
}

// 자식 클래스 (Animal을 상속받음)
class Dog extends Animal {
    public void bark() {
        System.out.println(name + "가 짖고 있습니다.");
    }
}

public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.name = "바둑이";
        dog.eat();  // 부모 클래스의 메서드 사용 가능
        dog.bark(); // 자식 클래스에서 추가한 메서드
    }
}

📌 결과:

바둑이가 먹고 있습니다.
바둑이가 짖고 있습니다.

Dog 클래스는 Animal을 상속받았기 때문에 eat() 메서드를 바로 사용할 수 있음.


🎯 2. implements(인터페이스 구현) 예제

// 인터페이스 정의
interface Movable {
    void move();  // 추상 메서드 (반드시 구현해야 함)
}

// 인터페이스를 구현한 클래스
class Car implements Movable {
    @Override
    public void move() {
        System.out.println("자동차가 이동합니다.");
    }
}

public class Main {
    public static void main(String[] args) {
        Car car = new Car();
        car.move();  // 인터페이스 메서드 구현
    }
}

📌 결과:

자동차가 이동합니다.

Car 클래스는 Movable 인터페이스의 move() 메서드를 반드시 구현해야 함.


언제 extends vs implements를 써야 할까?

상황extends 사용 (클래스 상속)implements 사용 (인터페이스 구현)
기존 클래스를 확장하면서 기능을 추가하고 싶을 때
여러 개의 부모(다중 상속)를 받고 싶을 때❌ (자바는 단일 상속만 가능)✅ (여러 인터페이스를 동시에 구현 가능)
부모 클래스의 필드(변수)와 메서드를 물려받고 싶을 때
특정 기능(행동)만 여러 클래스에서 공유하고 싶을 때
is-a 관계일 때 (예: "개는 동물이다")
can-do 관계일 때 (예: "자동차는 이동할 수 있다")

핵심 요약

  • extends: 부모 클래스가 있는 경우, 기능을 확장하고 싶을 때 사용 (is-a 관계)
  • implements: 특정 기능을 강제적으로 구현하고 싶을 때 사용 (can-do 관계)
  • 자바는 클래스 다중 상속을 지원하지 않음 → 다중 기능을 추가하려면 인터페이스(implements)를 활용해야 함.

이제 extendsimplements 차이를 확실히 이해할 수 있을 거야! 😊
헷갈리는 부분 있으면 더 질문해줘~ 🚀

profile
@mgkick

0개의 댓글