스프링 프로젝트를 하다가 갑자기 자바의 의미가 생각이나서 알아본 추상 클래스와 인터페이스의 차이점!!
인터페이스는 클래스가 아니라, 클래스와는 별도로 존재하는 개념입니다. 인터페이스는 상수와 추상 메소드만을 멤버로 가집니다. 한 클래스가 여러 인터페이스를 구현할 수 있기 때문에 다중 구현이 가능합니다.
Java 8부터는 인터페이스에 default 메소드와 static 메소드를 추가할 수 있게 되었습니다. default 메소드는 일반 메소드처럼 구현할 수 있으며, 이를 구현하는 클래스에서는 이 메소드를 오버라이딩하여 사용할 수 있습니다. 인터페이스가 변경되면 이를 구현하는 모든 클래스들이 메소드를 다시 구현해야 하기 때문에 이 문제를 해결하기 위해 도입된 기능입니다.
interface MyInterface {
default void print() {
System.out.println("Hello, World!");
}
}
또한, 인터페이스에 static 메소드를 선언하면 간단한 기능을 가진 유틸리티 인터페이스를 만들 수 있습니다.
interface MyInterface {
static int sum(int a, int b) {
return a + b;
}
}
인터페이스는 구현 객체가 동일한 동작을 보장하기 위해 사용합니다.
추상 클래스는 클래스의 한 종류로, 추상 메소드와 일반 메소드, 그리고 멤버 변수 등을 포함할 수 있습니다. 한 클래스가 여러 개의 클래스를 상속받을 수는 없기 때문에 다중 상속은 불가능합니다.
abstract class AbstractClass {
abstract void abstractMethod(); // 추상 메소드
void normalMethod() { // 일반 메소드
System.out.println("Hello, World!");
}
}
추상 클래스의 주 목적은 기존의 클래스에서 공통된 부분을 추상화하여 상속하는 클래스에게 구현을 강제화하는 것입니다. 즉, 메소드의 동작은 구현하는 자식 클래스에게 위임합니다. 공유의 목적으로 사용됩니다.
오늘의 학습을 통해 추상 클래스와 인터페이스의 차이점에 대해 더 깊게 이해할 수 있었습니다. 비슷해 보이는 두 개념이지만, 각각의 특징과 사용 용도를 알면 더욱 효과적인 코드 설계에 도움이 됩니다.