[Java] Java 인터페이스(Interface)와 추상 클래스(Abstract Class) 비교
1. 인터페이스(Interface)와 추상 클래스(Abstract Class)란?
Java에서 인터페이스(Interface)와
추상 클래스(Abstract Class) 는 객체 지향 프로그래밍에서
코드의 구조를 설계 할 때 사용됩니다.
두 개념 모두 상속(Inheritance) 을 활용하지만,
**사용 목적과 방식이 다릅니다.**
2. 인터페이스(Interface)란?
인터페이스는 **추상 메서드**(구현되지 않은 메서드)만을 포함하며,
**다중 상속이 가능**한 특징을 가집니다.
이를 통해 **클래스 간 결합도를 낮추고 유연한 코드 설계**가 가능합니다.
🔹 **인터페이스 기본 예제**
interface Animal {
void makeSound(); // 추상 메서드
}
class Dog implements Animal {
@Override
public void makeSound() {
System.out.println("멍멍!");
}
}
public class Main {
public static void main(String[] args) {
Animal dog = new Dog();
dog.makeSound(); // 출력: 멍멍!
}
}
✅ **특징:**
- 모든 메서드는 **자동으로 public abstract** (구현 필요)
- 다중 상속이 가능
- **변수 선언 시 자동으로 public static final** (변경 불가)
3. 추상 클래스(Abstract Class)란?
추상 클래스는 **일반 메서드 + 추상 메서드**를 포함할 수 있으며,
**공통적인 기능을 정의하는 데 사용됩니다.
** 상속을 통해 서브 클래스에서 **기본 기능을 재사용**할 수 있습니다.
🔹 **추상 클래스 기본 예제**
abstract class Animal {
void eat() {
System.out.println("음식을 먹습니다.");
}
abstract void makeSound(); // 추상 메서드
}
class Cat extends Animal {
@Override
void makeSound() {
System.out.println("야옹!");
}
}
public class Main {
public static void main(String[] args) {
Animal cat = new Cat();
cat.eat(); // 출력: 음식을 먹습니다.
cat.makeSound(); // 출력: 야옹!
}
}
✅ **특징:**
- 일반 메서드(구현된 메서드) + 추상 메서드(구현 필요) 포함 가능
- 단일 상속만 가능 (extends 사용)
- **공통 기능을 제공하며, 코드 중복을 줄이는 데 유용** -
4. 인터페이스 vs 추상 클래스 비교
항목 | 인터페이스 (Interface) | 추상 클래스 (Abstract Class) |
---|---|---|
목적 | 기능(행동) 정의 | 공통 기능 제공 |
메서드 | 추상 메서드만 포함 | 추상 메서드 + 일반 메서드 포함 |
변수 | 자동으로 public static final |
인스턴스 변수 선언 가능 |
상속 | 다중 상속 가능 (implements) | 단일 상속만 가능 (extends) |
---
5. 인터페이스와 추상 클래스, 언제 사용할까?
- ✔ **인터페이스(Interface)를 사용해야 할 때**
- 클래스 간의 **결합도를 낮추고 유연성을 높이고 싶을 때**
- **다중 상속이 필요할 때**
- 메서드의 **기능(행동)을 강제하고 싶을 때**
- ✔ **추상 클래스(Abstract Class)를 사용해야 할 때**
- 여러 클래스에서 **공통적인 기능을 재사용하고 싶을 때**
- **기본적인 구현을 제공하고, 일부만 구현을 강제하고 싶을 때**
- 객체의 **상태(멤버 변수)를 포함해야 할 때**
---
📌 정리
- ✔ **인터페이스는 "기능(행동)"을 정의하는 역할, 다중 상속 가능**
- ✔ **추상 클래스는 "공통 기능"을 제공하며, 단일 상속만 가능**
- ✔ **인터페이스는 메서드 선언만 포함하며, 추상 클래스는 구현된 메서드도 포함 가능**
- ✔ **공통 기능이 필요한 경우 추상 클래스, 다형성이 중요한 경우 인터페이스 사용**
🔗 다른 Java 객체지향 프로그래밍 관련 글도 함께 확인해보세요!
'Java 오류 & 개발 > Java 기본 문법 & 오류' 카테고리의 다른 글
[Java] 멀티스레드(Thread) 기초와 동기화(Synchronization) (1) | 2025.03.24 |
---|---|
[Java] Java try-with-resources 문법과 자원 자동 해제 (0) | 2025.03.19 |
[Java] Java의 메모리 관리: Stack vs Heap 개념과 차이점 (1) | 2025.03.14 |
[Java 기본 문법 & 오류] Java ArrayList와 LinkedList 차이 및 활용법 (0) | 2025.03.14 |
[Java 기본 문법 & 오류] Java Optional 사용법 및 활용 사례 (1) | 2025.03.14 |