본문 바로가기

CS

인터페이스와 추상클래스의 차이

인터페이스(Interface)와 추상 클래스(Abstract Class)는 모두 객체 지향 프로그래밍에서 추상화를 구현하는 데 사용되지만 몇 가지 중요한 차이점이 있습니다.

추상 클래스(Abstract Class):

  1. 일반 메서드와 추상 메서드를 모두 포함할 수 있습니다. 추상 클래스는 하나 이상의 추상 메서드(구현이 없는 메서드)를 가질 수 있습니다.
  2. 인스턴스화될 수 없습니다. 즉, 추상 클래스로는 객체를 직접적으로 생성할 수 없습니다.
  3. 추상 클래스는 상태(멤버 변수)와 구현을 포함할 수 있습니다. 즉, 필드와 메서드의 일반적인 구현을 포함할 수 있습니다.
  4. 단일 상속만을 지원하므로, 자바와 같은 언어에서는 하나의 추상 클래스만을 상속할 수 있습니다.

인터페이스(Interface):

  1. 추상 메서드만을 포함할 수 있습니다. Java 8 이후에는 default 메서드와 static 메서드의 구현을 포함할 수 있지만, 이는 Java에서 인터페이스의 기능이 확장되었다는 의미입니다.
  2. 다중 상속을 지원합니다. 하나의 클래스가 여러 개의 인터페이스를 구현할 수 있습니다.
  3. 인스턴스화될 수 없습니다. 인터페이스는 추상 클래스처럼 직접 객체를 생성할 수 없습니다.
  4. 상수(static final 변수)와 메서드의 선언만을 포함할 수 있습니다. 하위 클래스는 이러한 메서드를 구현해야 합니다.

주요 차이점:

  1. 다중 상속 vs 단일 상속: 인터페이스는 다중 상속을 지원하며, 추상 클래스는 단일 상속만을 지원합니다.
  2. 구현 포함 여부: 추상 클래스는 구현을 포함할 수 있지만, 인터페이스는 구현을 포함하지 않습니다.