본문 바로가기
IT/Java

추상클래스와 인터페이스 차이점 (abstract VS interface)

by 성준하이 2023. 9. 29.
반응형

권장하는 개발의 방향중 하나가 선언부와 구현부를 나누는 것이다.

대부분 사람들이 인터페이스를 통해 메서드를 선언 하고 클래스에서 상속받아 구현를 하는 방향으로 개발을 진행한다.

 

이번 포스팅에서 다룰 내용은 이런 인터페이스와,

또 비슷하게 사용되는 추상클래스에 대해서 다뤄보려고 한다.

 

인터페이스에 대해서는 아래 참고포스팅을 참고하면 사용법에 대해서 나와있다.

간단히 말하면 다른 클래스에서 만들어진 인터페이스를 사용하기 위해서는 implements로 상속 받아 사용할수 있다.

 

그리고 클래스일 경우엔 extends 를 통해서 상속을 받게 되는데

추상 클래스 역시 클래스의 한 종류이기에 다른 클래스에서 사용하려면 extends로 사용하게 된다.

 

두가지 방법으로 상속을 받게 되면 동일하게 선언되어있는 메서드를 오버라이드 해서 사용해야한다.

 

그럼 동일하게 개발이 되는데 이 둘의 차이에 대해서 정리를 하면 아래와 같다.

 

먼저 크게는 사용하는 목적 자체가 다르다.

추상클래스의 존재 목적은 추상클래스를 상속받아서 기능을 이용하고 확장시키는 데 있다.
인터페이스의 존재 목적은 함수의 껍데기만 가지고 있으면서 함수의 구현을 강제하고 결과적으로 구현 객체의 같은 동작을 보장하기 위함이다.

그밖에 차이점은 아래와 같다.

추상클래스 인터페이스
- 추상 메소드가 반드시 한개 이상 포함
- 일반 메소드, 일반 변수, 생성자를 포함할 수 있음
- 추상클래스 간 상속가능
  ->오버라이드 하지 않고 그대로 둘 수 있음
- 인스턴스를 만들 수 없고 상속받은 클래스를 통해 인스턴스화 가능
- 접근지정자는 어떤 것이든 가능
- 클래스이므로 상속 시 extends를 사용
- 궁극적인 목적은 상속하기 위함이다.
- 필요에 의해서 일반 메소드와 더불어 추상화 기능을 가미할 때 사용한다.
- 클래스가 아니다.
- 비어있는 추상 메소드만 포함
- 메소드에 final을 붙일 수 없고 변수는 모두 static 이어야 함
- 일반변수와 일반메소드, 생성자를 포함할 수 없음
- 인스턴스를 만들 수 없고 상속받은 클래스를 통해 인스턴스 화 가능
- 접근지정자는 없거나 public, abstract 만 가능
- 인터페이스간 상속 가능
  -> 내용이 없는 메소드를 상속받는 것이고 구현이 아니므로 extends를 사용한다.
- 클래스가 아니므로 상속시 implements를 사용한다.
- 인터페이스는 메소드들의 집합이다.
- 변수앞에 static final 이나 메소드앞에 abstract 명령어를 안써도 자동인식한다.
   -> 가독성을 위해서라면 생략 가능한 부호는 항상 쓰는것이 바람직하다.
- 한눈에 보면 빈껍데기 뿐이라서 한눈에 들어오므로 사용빈도가 높다.

 

예시 코드는 아래와 같다.

 

추상클래스
//ParentAbstractClass
abstract class ParentAbstractClass {
     abstract void testParentMethod();
}
//ChildAbstractClass
public class ChildAbstractClass extends ParentAbstractClass{

     @Override
     void testParentMethod() {
          //선언
     }
}
인터페이스
//ParentInterface
public interface ParentInterface {

     public void testParentInterface();
}
//ChildClass
public class ChildClass implements ParentInterface{
     @Override
     public void testParentInterface() {
          // TODO Auto-generated method stub
     }
}

 

참고 포스팅

https://thenicesj.tistory.com/702

 

implements, extends 실 사용 예제

예전 포스팅에서 자바 상속 관련해서 implements 와 extends 에 대해서 다룬 글이 있다. 자세한 내용은 아래 참고 포스팅을 참고 바란다. implements 의 예제코드와 extends의 예제 코드를 정리해두려고 한

thenicesj.tistory.com

 

반응형

'IT > Java' 카테고리의 다른 글

@Transient 어노테이션  (51) 2023.10.02
[eclipse] 디버깅 하기  (46) 2023.10.01
JUNIT 테스트 메서드 순서 정하기  (44) 2023.09.28
implements, extends 실 사용 예제  (48) 2023.09.27
Inner Class(이너클래스, 내부클래스)  (33) 2023.09.24

댓글