Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

추상 클래스와 인터페이스의 차이점 완벽 정리

추상 클래스와 인터페이스의 차이점 완벽 정리

자바 프로그래밍에서 추상 클래스(Abstract Class)인터페이스(Interface)는 모두 객체 지향 설계에서 공통 동작을 정의하는 데 사용되는 핵심 요소입니다. 두 개념은 비슷해 보이지만 구현 방식과 사용 목적에서 뚜렷한 차이가 있습니다.

추상 클래스(Abstract Class)란?

추상 클래스는 하나 이상의 추상 메서드를 포함할 수 있는 클래스로, 구현된 인스턴스 메서드를 가질 수 있다는 점이 가장 큰 특징입니다. 즉, 하위 클래스들이 상속받아 그대로 사용할 수 있는 기본 동작(default behavior)을 미리 구현해 둘 수 있습니다.

  • 생성자와 일반 필드(멤버 변수)를 가질 수 있습니다.
  • public, protected, private 등 다양한 접근 제어자를 사용할 수 있습니다.
  • 일부 메서드만 구현하고 나머지는 자식 클래스에 위임하는 부분 구현(partial implementation)이 가능합니다.

인터페이스(Interface)란?

인터페이스는 클래스가 반드시 구현해야 하는 동작의 '약속(계약)'을 정의하는 역할을 합니다. 전통적인 자바에서 인터페이스는 상수와 인스턴스 메서드의 선언만 가능하며, 기본 동작을 직접 구현할 수 없습니다. 또한 모든 메서드는 암묵적으로 추상(abstract)이며, 모든 멤버는 public으로 선언됩니다.

  • 모든 멤버는 public이며, 별도의 구현 코드를 포함하지 않습니다.
  • 다중 구현(implements)이 가능해 여러 인터페이스를 동시에 채택할 수 있습니다.
  • 클래스 간 결합도를 낮추고 유연한 설계를 가능하게 합니다.

핵심 차이점 한눈에 보기

구분추상 클래스인터페이스
메서드 구현기본 동작 구현 가능선언만 가능 (구현 불가)
멤버 접근 제어다양한 제어자 허용모두 public
상속 방식단일 상속만 가능다중 구현 가능
사용 목적공통 기능의 재사용동작 규약(계약) 정의

참고: Java 8 이후의 변화

Java 8부터는 인터페이스에도 default 메서드와 static 메서드를 정의할 수 있게 되어, 과거에는 불가능했던 기본 동작 구현이 부분적으로 허용되었습니다. 다만 여전히 인스턴스 필드나 생성자를 가질 수 없다는 점에서 추상 클래스와의 근본적인 차이는 유지됩니다.

정리

공통 기능을 재사용하며 클래스 간의 계층 관계를 표현하고 싶다면 추상 클래스, 서로 다른 클래스들에게 동일한 규약을 강제하고 싶다면 인터페이스를 선택하는 것이 바람직합니다. 두 개념의 차이를 정확히 이해하면 더 유연하고 유지보수하기 좋은 객체 지향 설계를 할 수 있습니다.