Server
[Java] 추상 클래스와 인터페이스의 차이
devhyen
2024. 7. 12. 13:25
추상클래스와 인터페이스는 모두 추상화를 통해 다형성을 구현하는 방법을 제공하지만
각각의 특징에 따른 차이점이 존재한다.
여기서 다형성이란,
객체에 여러가지 타입을 대입할 수 있다는 것을 의미한다. ↔ 단형성은 하나의 객체에 하나의 타입만 대응 가능하다.
추상 클래스 Abstract Class
abstract class Animal {
String name;
Animal(String name) {
this.name = name;
}
abstract void makeSound(); // 추상 메서드
void eat() {
System.out.println(name + " is eating."); // 일반 메서드
}
}
abstract
키워드를 사용하여 정의한다.
일반 메서드와 추상 메서드를 모두 포함할 수 있다.
- 일반 메서드는 구현이 제공되며, 하위 클래스에서 필요에 따라 오버라이드 할 수 있다.
- 추상 메서드는 구현이 없는 메서드이며,
abstract
키워드를 사용하여 정의하며, 하위 클래스에서 반드시 구현해야 한다.
추상메서드는 직접적으로 인스턴스화 할 수 없다. 즉 new
키워드를 사용해서 객체를 생성할 수 없다.
다중 상속 불가
- Java는 단일 상속만을 지원하기 때문에, 추상 클래스는 하나의 클래스만을 상속할 수 있다.
필드(멤버 변수)를 가질 수 있고, 생성자를 정의할 수 있으며, 상속을 통해 재사용 할 수 있다.
사용 하는 경우
클래스들 사이에 공통적인 로직을 재사용하고자 할 때
is-a 관계를 나타내는 경우
인터페이스 Interface
interface Vehicle {
void start(); // 추상 메서드
void stop(); // 추상 메서드
}
class Car implements Vehicle {
@Override
public void start() {
System.out.println("Car is starting.");
}
@Override
public void stop() {
System.out.println("Car is stopping.");
}
}
abstract
키워드를 사용하여 정의한다.
추상 메서드와 상수를 포함할 수 있지만, 일반 메서드의 구현은 허용되지 않는다.
- 모든 메서드는 기본적으로 추상메서드
- 메서드 선언만 있고 구현은 없다.
- Java8 부터는
default method
와static method
를 지원하기 시작했다. - 인터페이스는 상수를 가질 수 있으며, 자동으로
public static final
로 설정된다.
다중 구현
- 클래스는 여러개의 인터페이스를 구현할 수 있다. 이는 다중 상속과 유사한 효과를 제공한다.
인터페이스는 직접적으로 인스턴스화할 수 없다.
오버라이드
인터페이스를 구현하는 클래스는 인터페이스의 모든 추상 메서드를 반드시 오버라이드 해야한다.
사용 하는 경우
클래스가 어떤 행위를 할 수 있는 지 정의하고자 할 때
여러 클래스에 걸쳐 동작이 일관되게 구현되어야 하는 경우
다른 클래스와의 결합도를 낮추고자 할 때