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

인터페이스(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(); // 반드시 서브 클래스에서 구현 } ``` --- 결론 - 인터페이스는 “무엇을 할 수 있는가(행위)”를 명세하는 데 집중하며, 다중 상속성과 구현 강제에 강점이 있습니다.

- 추상 클래스는 “공통된 상태와 행위”를 공유할 때 효과적이며, 구현의 일부를 포함하여 코드 재사용에 적합합니다.

따라서 설계 시 클래스 간 관계의 성격, 다중 상속 필요 여부, 공통 코드 공유 여부를 고려하여 적절히 선택하는 것이 중요합니다.


관련 게시글

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

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

문제 해결 및 면접 질문

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

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

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

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

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

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

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

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

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