추상 클래스는 어떤 기능을 구현할지 정의하는 템플릿이다.
인터페이스는 외부에서 사용할 수 있는 기능의 약속을 담는다.

1. 구조적 차이
public abstract class Animal {}
추상 클래스는 extends 키워드로 하나만 상속받을 수 있다.
인터페이스는 implements 키워드를 통해 여러 개 구현할 수 있다.
클래스의 경우 변수나 생성자를 직접 정의해서 사용할 수 있다.
2. 메서드 구현 방식
abstract void eat(); // 추상메서드만 가능
void sleep() {} // 일반메서드 가능
추상 클래스는 추상메서드와 일반 메서드를 모두 정의할 수 있다.
인터페이스는 자바 8 이전에는 추상메서드만 존재했다.
자바 8 이후 default 와 static 메서드가 추가되어 변경되었다.
3. 사용 목적
class Dog extends Animal {} // 구체적 기능 구현
interface Flyable { void fly(); }
상속 관계를 가질 때 공통 기능을 제공하는 용도로 쓰인다.
클래스가 아닌 순수한 동작의 약속을 세울 때 유용하다.
다중 상속이 필요한 경우 인터페이스를 주로 활용한다.
'개념 창고 > JAVA' 카테고리의 다른 글
| [CS] 뮤텍스(Mutex)와 세마포어(Semaphore) 차이 (0) | 2026.10.24 |
|---|---|
| [Java] equals() 를 재정의하면 hashCode() 도 재정의해야 하는 이유 (0) | 2026.10.22 |
| [Java] 문자열(String) 비교시 equals()와 == 차이 (0) | 2024.07.30 |
| [Java] Unsigned int 구현 방법 (0) | 2024.01.31 |
| 자바 메모리 영역(Method, Stack, Heap) (0) | 2023.01.17 |