추상 클래스와 인터페이스는 Java에서 객체 지향 프로그래밍의 핵심 개념으로, 다중 상속의 문제를 해결하고 코드의 재사용성을 높이는 데 사용됩니다. 두 개념의 주요 차이점은 다음과 같습니다:
상속:
추상 클래스: 하나의 클래스만 추상 클래스를 상속받을 수 있습니다 (단일 상속).
인터페이스: 하나의 클래스는 여러 인터페이스를 구현할 수 있습니다 (다중 상속).
멤버 변수:
추상 클래스: 멤버 변수에 상태(state)를 가질 수 있으며, 일반 변수나 final 변수를 포함할 수 있습니다.
인터페이스: 멤버 변수는 항상 public, static, final로 선언되어야 합니다.
메서드:
추상 클래스: 추상 메서드와 일반 메서드(구현이 있는 메서드)를 모두 가질 수 있습니다.
인터페이스: Java 8부터는 디폴트 메서드와 정적 메서드를 포함할 수 있습니다. 그러나 이전에는 오직 추상 메서드만 가질 수 있었습니다.
접근 제한자:
추상 클래스: public, protected, private 등의 접근 제한자를 사용할 수 있습니다.
인터페이스: 메서드는 기본적으로 public으로 선언됩니다.
생성자:
추상 클래스: 생성자를 가질 수 있습니다.
인터페이스: 생성자를 가질 수 없습니다.
기타:
추상 클래스: final, non-final, static, non-static 메서드를 가질 수 있습니다.
인터페이스: 모든 변수는 public, static, final이어야 하며, 메서드는 public으로 선언됩니다.
결론적으로, 추상 클래스와 인터페이스는 코드의 재사용성을 높이기 위한 방법으로 사용되지만, 그 사용 방법과 특성이 다릅니다. 따라서 상황과 요구 사항에 따라 적절한 것을 선택하여 사용해야 합니다.