🔍 내가 배운 내용 요약


  1. 추상 클래스공통 기능+설계 구조 제공, 일부 구현 포함
  2. 인터페이스기능 규약 정의만 하며, 구현은 없음 (자바 8 이후 일부 예외 있음)
  3. 둘 다 다형성과 설계 유연성 향상에 사용되지만, 사용하는 상황이 다름

📚 추상 클래스(Abstract Class)

항목 설명
정의 abstract 키워드로 선언한 클래스
객체 생성 ❌ 직접 객체 생성 불가
메서드 일부 구현된 메서드 포함 가능
필드 멤버 변수 선언 가능
목적 기본 기능을 공통으로 제공하고, 구체 클래스가 추가 구현
상속 extends로 상속, 단일 상속만 가능

✅ 예시

Java

abstract class Animal {
    String name;

    // 일반 메서드
    void eat() {
        System.out.println("먹는다");
    }

    // 추상 메서드
    abstract void sound();
}

class Dog extends Animal {
    @Override
    void sound() {
        System.out.println("멍멍");
    }
}

📚 인터페이스(Interface)

항목 설명
정의 interface 키워드로 선언
객체 생성 ❌ 직접 객체 생성 불가
메서드 전부 추상 메서드 (Java 8 이상: default/static 메서드 허용)
필드 모두 public static final 상수만 가능
목적 **기능 약속(규약)**만 정의, 구현은 클래스에서
구현 implements로 구현, 다중 구현 가능 ✔️

✅ 예시

Java

interface Speakable {
    void speak(); // public abstract 생략 가능
}

class Cat implements Speakable {
    @Override
    public void speak() {
        System.out.println("야옹");
    }
}

📊 추상 클래스 vs 인터페이스 비교 정리

비교 항목 추상 클래스 인터페이스
키워드 abstract class interface
다중 상속 ❌ 단일 상속만 가능 ✅ 다중 구현 가능
메서드 구현 일부 구현 O (기본적으로) 전부 추상, Java 8+ 일부 구현 O
필드 인스턴스 변수 선언 가능 public static final 상수만 가능
목적 공통 기능 제공 + 확장성 기능 규약 정의 + 역할 명세
사용 관계 extends implements
상속 계층 추상 클래스 → 구체 클래스 인터페이스 → 구현 클래스