Java의 객체지향에서 가장 어려운 파트이지만, 확실하게 이해하면 객체 설계가 훨씬 쉬워집니다.
이번 글에서는 추상 클래스 → 인터페이스 → 둘의 차이 → 실전 예제를
초보자도 이해할 수 있도록 직관적 코드 예제로 정리했습니다.
📌 목차
- 추상 클래스란?
- 추상 메서드
- 추상 클래스 예제
- 인터페이스란?
- 인터페이스 구현(implements)
- default / static 메서드
- 인터페이스 다중 구현
- 추상 클래스 vs 인터페이스 차이
- 실전 예제: 동물 소리 시스템
- 마무리
- 대표 태그
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 기초)
'개발(React | Java) > 자바 기초 | 문법' 카테고리의 다른 글
| 📘 Java 예외 처리 (1) 예외(Exception) 처리 기초 — try/catch, throw, finally 완전 정리 (0) | 2025.12.09 |
|---|---|
| 컬렉션 프레임워크(List, Set, Map) 기초 — 배열을 넘어선 자료구조 (0) | 2025.12.08 |
| 상속(Inheritance), 오버라이딩(Overriding), 오버로딩(Overloading) 완전 정리 (0) | 2025.12.07 |
| 생성자(Constructor), this, 접근제어자 — 객체지향의 핵심 개념 정리 (0) | 2025.12.07 |
| 클래스(Class)와 객체(Object) 기초 — Java의 핵심 개념 (0) | 2025.12.06 |