최근 자바를 복기하는 데 인터페이스 와 추상클래스 둘다 추상화하는 데 차이점에대해서 복기 하고자 정리해봤습니다.
🔹 1. 공통점
- 둘 다 추상 메서드(구현이 없는 메서드)를 가질 수 있음.
- 직접 인스턴스화(new) 할 수 없음.
- 다형성(polymorphism)을 지원함 → 부모 타입(인터페이스/추상클래스)으로 자식 객체 참조 가능.
🔹 2. 차이점
Interface Abstract Class
| 상속/구현 | 클래스가 여러 인터페이스 다중 구현 가능 (implements) | 클래스는 단일 상속만 가능 (extends) |
| 메서드 | 기본적으로 public abstract (Java 8 이후: default, static 메서드도 가능, Java 9 이후: private 메서드도 가능) | abstract 메서드와 일반 메서드(구현된 메서드) 모두 가능 |
| 필드 | public static final 상수만 가능 | 인스턴스 변수, static 변수, 상수 모두 가능 |
| 생성자 | 가질 수 없음 | 생성자 가질 수 있음 (직접 객체 생성은 못하지만, 하위 클래스에서 super() 호출 가능) |
| 다형성 활용 | 기능의 계약(Contract) 제공 (무엇을 할 수 있는지 명세) | 공통된 기본 기능 + 추상 기능 제공 (템플릿 제공) |
| 사용 의도 | “이 클래스가 반드시 이 기능들을 구현해야 한다”를 보장 → 규칙, 표준화 | “이 클래스들은 공통된 특성이 있고 일부 기본 동작도 공유한다” → 상속 기반 확장 |
interface Animal {
void sound(); // 추상 메서드
}
class Dog implements Animal {
public void sound() {
System.out.println("멍멍");
}
}
class Cat implements Animal {
public void sound() {
System.out.println("야옹");
}
}
abstract class Animal {
String name;
Animal(String name) {
this.name = name;
}
abstract void sound(); // 추상 메서드
void eat() { // 일반 메서드
System.out.println(name + " is eating");
}
}
class Dog extends Animal {
Dog(String name) {
super(name);
}
void sound() {
System.out.println("멍멍");
}
}'개발 공부 > Java-Spring' 카테고리의 다른 글
| 객체의 종류 (0) | 2025.11.20 |
|---|---|
| 자바 예약어 final vs static (0) | 2025.10.23 |
| 정적팩토리 메서드 (0) | 2025.08.15 |
| JVM 의 메모리 구조 (0) | 2025.08.15 |
| 자바 용어 와 자바 실행 방법 (0) | 2025.07.28 |