인터페이스와 추상 클래스의 차이는 무엇인가요?

인터페이스와 추상 클래스는 객체지향 프로그래밍에서 공통적으로 “공통 기능의 규격”을 정의하기 위해 사용되지만, 그 목적과 특징, 사용방법에는 차이가 있습니다.

아래에서 두 개념의 차이점을 중심으로 설명하겠습니다.

--- 1. 정의 및 목적 - 인터페이스 (Interface) 인터페이스는 클래스가 반드시 구현해야 하는 메서드들의 선언(시그니처)만 포함하는 일종의 계약(Contract)입니다.

구체적인 구현 내용은 없으며, 다중 상속 및 다양한 클래스 간의 일관된 메서드 호출을 위해 사용됩니다.

- 추상 클래스 (Abstract Class) 추상 클래스는 일부 메서드가 구현되어 있을 수도 있고, 일부는 추상 메서드(구현이 없는 메서드)일 수도 있는 클래스입니다.

공통 기능을 공유하면서, 서브클래스가 반드시 구현해야 하는 메서드를 강제하는 역할을 합니다.

--- 2. 주요 차이점 | 구분 | 인터페이스 | 추상 클래스 | |----------------------------|---------------------------------------|----------------------------------------| | 메서드 구현 여부 | 기본적으로 메서드 시그니처만 선언 (예외: Java 8 이후 default 메서드 가능) | 일부 메서드는 구현 가능, 일부는 추상 메서드로 선언 | | 상속/구현 방식 | 클래스는 여러 인터페이스를 구현(implements) 가능 | 클래스는 단일 추상 클래스만 상속(extends) 가능 | | 생성자 존재 여부 | 없음 | 존재하며, 생성자에서 공통 초기화 가능 | | 상태(필드) 저장 가능 여부 | 상수를 제외한 필드는 가질 수 없음 | 인스턴스 변수(필드) 가질 수 있음 | | 목적 | 기능의 규격을 정의하여 다중 구현 허용 | 공통 기능 구현 및 강제 메서드 선언 | | 접근 제한자 사용 | 모든 메서드가 기본적으로 public (Java 기준) | 추상 클래스 내 메서드는 다양한 접근 제한자 가능 | --- 3. 예시 (Java 기준) ```java // 인터페이스 public interface Flyable { void fly(); // 추상 메서드 } // 추상 클래스 public abstract class Bird { public void eat() { System.out.println("먹는다"); } public abstract void fly(); // 반드시 하위클래스에서 구현 } ``` --- 4. 언제 사용하는가? - 인터페이스 사용 시기 - 서로 관련 없는 클래스가 공통적인 동작을 해야 할 때 - 다중 구현이 필요할 때 - 기능을 특정 행위별로 분리하여 유연한 설계가 필요할 때 - 추상 클래스 사용 시기 - 클래스들 간에 공통된 필드나 메서드 구현이 필요할 때 - 기본 동작을 정의하고, 일부 동작은 하위 클래스에 위임할 때 - 단일 상속 구조 내에서 확장성을 유지하고자 할 때 --- 5. 요약 | 평가 항목 | 인터페이스 | 추상 클래스 | |-----------------|----------------------------------|--------------------------------| | 메서드 구현 | 원칙적으로 불가 (Java 8부터 default 메서드 가능) | 부분적 구현 가능 | | 다중 상속/구현 | 다중 구현 가능 | 단일 상속만 가능 | | 필드(상태) 보유 | 상수만 가능 | 인스턴스 변수 가능 | | 생성자 | 없음 | 있음 | | 사용 목적 | 기능 규격(행위) 정의 | 공통 기능 구현 및 강제 구현사항 지정 | --- 인터페이스와 추상 클래스는 사용 목적과 특징이 다르므로, 상황과 설계 의도에 맞게 적절히 선택하는 것이 좋습니다.


관련 게시글

자바에서 병렬 처리를 구현하는 방법은 무엇인가요?

자바에서 병렬 처리는 여러 작업을 동시에 실행하여 프로그램의 성능과 응답성을 향상시키는 기법입니다....

문제 해결 및 면접 질문

문제 해결 및 면접 질문에 관한 글 --- 1. 문제 해결의 중요성 문제 해결 능력은 개인과...

자바에서 중복된 요소를 제거하는 방법은 무엇인가요?

자바(Java)에서 중복된 요소를 제거하는 방법에는 여러 가지가 있습니다. 주로 컬렉션프레임워크를 활용하...

자바 Collections에서 정렬하는 방법은 무엇인가요?

자바 Collections에서 정렬하는 방법에 대해 설명드리겠습니다. 자바에서는 컬렉션(Collection) 자료구조의...

자바의 메모리 누수 문제를 해결하는 방법은 무엇인가요?

자바의 메모리 누수 문제를 해결하는 방법 --- 1. 메모리 누수란? 자바는 가비지 컬렉션(GC)...

팩토리 패턴을 사용하여 주어진 문제를 해결해보세요.

팩토리 패턴을 사용하여 주어진 문제를 해결해보세요. --- 1. 팩토리 패턴이란? 팩토리 패턴...