🌱Java | Spring

[Java] 추상클래스 vs 인터페이스

이줭 2022. 6. 14. 22:11
728x90

클래스는 크게 일반 클래스와 추상 클래스로 나뉘고, 추상 클래스란 클래스 내부에 추상 메서드가 하나 이상 포함되거나 abstract로 정의된 경우를 말한다. 반면, 인터페이스는 모든 메서드가 추상 메서드인 경우이다.

 

단순히 생각하면, 모든 메서드가 추상 메서드이냐 아니냐에 따라 추상 클래스와 인터페이스를 구분할 수 있을 것 같지만, Java8 이후부터는 default 키워드를 이용해 인터페이스에서 일반 메서드의 구현도 가능하기 때문에 확실한 차이점이라고는 할 수 없다.

 

그렇다면 추상메서드와 인터페이스는 뭐가 다른 걸까? 🤔

 

일단, 생김새도 다르고 사용하는 방법도 다르지만 하는 일은 비슷해 보인다.

하지만, 애초에 이 둘은 존재 목적이 다르다. 추상 클래스는 해당 클래스를 상속받아 기능을 이용하고, 확장시키는 목적이라면 인터페이스는 함수의 껍데기만 있으며 함수의 구현을 강제하기 위해서 존재한다. 구현을 강제함으로써 구현 객체의 같은 동작을 보장한다.

 

또한, 추상 클래스는 다중 상속이 불가능하지만 인터페이스는 다중 상속이 가능하다.

정리해보면 아래와 같다

  • 공통점
    • new 키워드로 인스턴스 생성 불가능
    • 사용하기 위해서는 하위 클래스에서 확장/구현 필요
  • 차이점
    • 추상 클래스는 클래스(abstract class로 선언)인데 반해 인터페이스는 클래스가 아니다(interface로 선언)
    • 추상 클래스는 일반메서드와 추상 메서드 모두 가질 수 있는 반면 인터페이스는 추상 메서드만 가질 수 있다.
    • 추상 클래스는 단일 상속만 가능하고, 인터페이스는 다중 상속이 가능하다.
    • 추상 클래스는 변수와 상수를 모두 가질 수 있지만, 인터페이스는 static final 형태의 상수만 가질 수 있다.

 

참고 : http://alecture.blogspot.com/2011/05/abstract-class-interface.html

728x90

'🌱Java | Spring' 카테고리의 다른 글

[Java] Java의 메모리 관리(2)  (0) 2022.07.31
[Java] Java의 메모리 관리(1)  (0) 2022.07.24
[Spring] Filter vs Interceptor  (0) 2022.07.18
[Spring] Spring MVC  (0) 2022.06.30
[Java] String?  (0) 2022.06.01