개발(React | Java)/자바 기초 | 문법

인터페이스(Interface) & 추상 클래스(Abstract Class) 완전 정리 — OOP 핵심

dev-parrot 2025. 12. 8. 16:20

 

Java의 객체지향에서 가장 어려운 파트이지만, 확실하게 이해하면 객체 설계가 훨씬 쉬워집니다.

이번 글에서는 추상 클래스 → 인터페이스 → 둘의 차이 → 실전 예제
초보자도 이해할 수 있도록 직관적 코드 예제로 정리했습니다.


📌 목차

  1. 추상 클래스란?
  2. 추상 메서드
  3. 추상 클래스 예제
  4. 인터페이스란?
  5. 인터페이스 구현(implements)
  6. default / static 메서드
  7. 인터페이스 다중 구현
  8. 추상 클래스 vs 인터페이스 차이
  9. 실전 예제: 동물 소리 시스템
  10. 마무리
  11. 대표 태그

1️⃣ 추상 클래스(Abstract Class)란?

추상 클래스는 객체를 직접 만들 수 없는 클래스입니다.
설계도 역할을 하며, 공통 기능을 자식에게 물려주기 위한 용도로 사용합니다.

abstract class Animal {
    abstract void sound(); // 추상 메서드
    void eat() {
        System.out.println("먹습니다");
    }
}

 

특징:

✔ 객체 생성 불가 (new 불가)
✔ 공통 메서드 포함 가능
✔ 추상 메서드 포함 가능
✔ 자식 클래스에서 상속하여 완성


2️⃣ 추상 메서드 (몸체가 없는 메서드)

abstract void sound();

 

특징:

✔ 선언만 있고 구현(몸체)이 없음
✔ 반드시 자식 클래스에서 구현해야 함(Override 필수)

abstract class Animal {
    abstract void sound();

    void sleep() {
        System.out.println("잠자는 중...");
    }
}

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

사용:

Animal a = new Dog();
a.sound();  // 멍멍
a.sleep();  // 잠자는 중...

 

4️⃣ 인터페이스(Interface)란?

인터페이스는 추상 메서드의 집합이라고 할 수 있습니다.
행동(기능)의 규약만 정의합니다.

interface Soundable {
    void sound();
}

 

특징:

✔ 모든 메서드가 기본적으로 abstract
✔ 모든 필드는 public static final(상수)
✔ 다중 구현 가능


5️⃣ 인터페이스 구현 (implements)

class Dog implements Soundable {
    @Override
    public void sound() {
        System.out.println("멍멍");
    }
}

사용:

Soundable s = new Dog();
s.sound();  // 멍멍

6️⃣ 인터페이스의 default / static 메서드

Java 8 이후 인터페이스도 메서드 구현이 가능해졌습니다.

✔ default 메서드

인터페이스에서 기본 구현 제공 가능

interface MyInterface {
    default void hello() {
        System.out.println("안녕하세요");
    }
}

 

✔ static 메서드

interface Utils {
    static void print() {
        System.out.println("출력!");
    }
}

 

7️⃣ 인터페이스 다중 구현 (Multiple Inheritance)

Java 클래스는 단일 상속만 가능하지만,
인터페이스는 여러 개 구현할 수 있습니다.

 

interface A { void a(); }
interface B { void b(); }

class Test implements A, B {
    public void a() {}
    public void b() {}
}

 

실무에서 매우 중요한 특징입니다.


8️⃣ 추상 클래스 vs 인터페이스 차이 (핵심 요약)

구분추상 클래스인터페이스
구분 추상 클래스 인터페이스
목적 공통 속성 + 기본 기능 제공 규약(기능) 정의
메서드 일반 + 추상 둘 다 추상 메서드(기본), default, static
필드 일반 필드 가능 상수(public static final)만
다중 상속 불가능 가능
생성자 있음 없음

한마디로 요약

  • “유사 객체들의 공통 구조 만들기” → 추상 클래스
  • “공통 기능 규약 정의” → 인터페이스

 

9️⃣ 실전 예제 — 동물 소리 시스템 만들기

✔ 인터페이스 정의

interface Soundable {
    void sound();
}

 

✔ 여러 동물 클래스 구현

class Dog implements Soundable {
    public void sound() {
        System.out.println("멍멍");
    }
}

class Cat implements Soundable {
    public void sound() {
        System.out.println("야옹");
    }
}

 

✔ 사용

Soundable[] animals = {new Dog(), new Cat()};

for (Soundable a : animals) {
    a.sound();
}

 

➡ 같은 타입인데 동작은 다름 → 다형성(Polymorphism) 완성!


🔟 마무리

이번 글에서는 Java 객체지향의 핵심 중에서도 가장 어려운 개념인

✔ 추상 클래스
✔ 추상 메서드
✔ 인터페이스
✔ default/static 메서드
✔ 다중 구현
✔ 추상 클래스 vs 인터페이스 비교

를 모두 정리했습니다.

이제 Java 기초 마지막인 **컬렉션 프레임워크(List, Set, Map)**만 이해하면
기초 문법 파트는 완전 정복입니다.

 

📘 다음 글 예고

👉 Java 기초 (12) — 컬렉션 프레임워크(List, Set, Map 기초)