오늘은 늘 헷갈리는 인터페이스, 추상클래스, 상속 등에 대해서 정리해보겠습니다.
1. 추상클래스
- abstract 키워드 사용
- 상속을 통해서 부모의 특징을 물려받음
- 다중 상속 불가능
- 상태 값 가질 수 있음
- 생성자 가질 수 있음
- 하나 이상의 추상 메서드 포함
abstract class Animal {
String name; // 필드 가질 수 있음
Animal(String name) { // 생성자 가능
this.name = name;
}
void breathe() { // 일반 메서드
System.out.println(name + "이(가) 숨을 쉽니다.");
}
abstract void sound(); // 자식이 반드시 구현해야 할 추상 메서드
}
class Dog extends Animal {
Dog(String name) { super(name); }
@Override
void sound() {
System.out.println("멍멍!");
}
}
2. 인터페이스
- interface 키워드 사용
- 다중 구현 가능
- 모든 변수는 public static final
- 모든 메서드는 public abstract
추상클래스는 관련성이 높은 클래스들끼리 논리적으로 묶을 때 사용.
인터페이스는 관련 없는 클래스들이 공통된 동작을 가져야 할 때 사용.
요즘에는, 객체 간의 결합도를 낮추기 위해 인터페이스 위주의 설계를 권장한다고 한다.
인터페이스와 추상클래스의 가장 큰 차이점은 다중 유무이다.
추상클래스에서 다중 상속이 안 되는 이유는 '다이아몬드 문제(Diamond Problem)'로 인한 충돌과 모호성을 방지이다. 쉽게 말하자면, 부모 캘래스에 동일한 이름의 메서드가 있다면 자식 클래스는 어떤 메서드를 사용해야 할지 결정할 수 없게 되기 때문이다.
참고로, c++에서는 이런 충돌 문제가 발생하면 virtual inheritance같은 문법을 사용하여 개발자가 직접 해결.
'Java' 카테고리의 다른 글
| [Java] static class와 static method (0) | 2026.01.16 |
|---|---|
| [Java] 리플렉션(Reflection) (0) | 2026.01.13 |
| [Java] 객체지향 - final 2 (0) | 2026.01.09 |
| [Java] 객체지향 (0) | 2026.01.08 |
| [Java] JVM 2 (0) | 2026.01.07 |