인터페이스와 추상 클래스의 차이점은 무엇인가요?
인터페이스(interface)와 추상 클래스(abstract class)는 객체지향 프로그래밍에서 공통적으로 사용되는 개념으로, 둘 다 공통된 메서드의 구조를 정의하여 코드의 일관성을 유지하고 다형성을 구현하는 데 도움을 줍니다.
하지만 이 둘은 목적과 사용법, 기능 면에서 차이가 있습니다.
주요 차이점을 아래와 같이 정리할 수 있습니다.
1. 개념 및 목적 - 인터페이스 (Interface) - 순수하게 메서드의 선언(시그니처)만을 포함하며, 구현은 포함하지 않는 일종의 계약(contract)입니다.
- 클래스가 인터페이스를 구현함으로써 반드시 해당 메서드를 구현하도록 강제합니다.
- 여러 인터페이스를 동시에 구현할 수 있어 다중 상속 효과를 낼 수 있습니다.
- 추상 클래스 (Abstract Class) - 완전한 클래스와 인터페이스의 중간 형태로, 구현된 메서드와 추상 메서드를 모두 포함할 수 있습니다.
- 공통된 필드와 메서드를 구현하며, 일부 메서드는 서브 클래스에서 반드시 구현하도록 추상 메서드로 선언합니다.
- 단일 상속만 지원하며, 슈퍼클래스 역할을 하여 공통 기능을 공유할 때 사용합니다.
2. 구성 요소 차이 | 구분 | 인터페이스 | 추상 클래스 | |----------------------|-----------------------------------|---------------------------------------| | 메서드 | 기본적으로 선언만 가능 (Java 8 이후 기본 구현도 가능) | 구현된 메서드와 추상 메서드 모두 가질 수 있음 | | 변수 | 상수(final static)만 가질 수 있음 | 일반 인스턴스 변수 가능 | | 생성자 | 가질 수 없음 | 가질 수 있음 | | 다중 상속 | 가능 | 불가능 (단일 상속만 가능) | | 접근 제어자 | 모든 메서드는 기본적으로 public (언어마다 다름) | public, protected, private 모두 가능 | 3. 주요 차이점 정리 | 특징 | 인터페이스 | 추상 클래스 | |------------------------|-------------------------------------|---------------------------------| | 상속 방식 | 다중 구현 가능 | 단일 상속만 가능 | | 목적 | 행위(메서드) 강제, 계약 정의 | 공통 기능 공유와 부분 구현 | | 멤버 변수 | 상수만 허용 | 인스턴스 변수 포함 가능 | | 생성자 | 없음 | 있음 | | 접근 제어자 | 메서드 기본적으로 public | 메서드와 변수에 다양한 접근 제어자 가능| | 메서드 구현 여부 | 선언(추상)만 기본, Java 8 이후 default 메서드 가능 | 일부 구현과 추상 메서드 공존 가능 | 4. 사용 시점과 예시 - 인터페이스 사용 시점 - 서로 관계없는 클래스들이 공통적으로 특정 행위를 해야 할 때 - 다중 상속이 필요할 때 - 표준화된 기능을 강제하고자 할 때 - 추상 클래스 사용 시점 - 관련된 클래스들 간에 공통 코드(필드, 메서드)를 공유하고 싶을 때 - 기본적인 동작은 구현하되, 일부는 서브 클래스에서 반드시 구현해야 할 때 - 단일 상속 관계가 명확할 때 --- 5. 예시 (Java 기준) ```java // 인터페이스 예시 public interface Flyable { void fly(); // 선언만 존재 } // 추상 클래스 예시 public abstract class Bird { String name; public void eat() { System.out.println("Eating..."); } public abstract void fly(); // 반드시 서브 클래스에서 구현 } ``` --- 결론 - 인터페이스는 “무엇을 할 수 있는가(행위)”를 명세하는 데 집중하며, 다중 상속성과 구현 강제에 강점이 있습니다.
- 추상 클래스는 “공통된 상태와 행위”를 공유할 때 효과적이며, 구현의 일부를 포함하여 코드 재사용에 적합합니다.
따라서 설계 시 클래스 간 관계의 성격, 다중 상속 필요 여부, 공통 코드 공유 여부를 고려하여 적절히 선택하는 것이 중요합니다.