본문 바로가기
🗂 Study/자바

[Java] 추상 클래스와 인터페이스의 차이점

by 뿌맘 2021. 7. 23.
반응형

🔫 추상 클래스 (abstract class)

클래스는 일반 클래스와 추상 클래스로 나뉘는데 추상 클래스는 클래스 내 추상 메서드가 하나 이상 포함되거나 abstract로 정의된 경우를 뜻한다.

추상 메서드를 상속받은 클래스(하위 클래스)는 자기 성질에 맞게 Overriding 하여 사용한다.

추상 메서드
선언부만 작성하고 구현부는 작성하지 않은 채로 남겨둔 것.
상속받는 클래스에 따라 달라질 수 있음.

 

추상 클래스의 특징

  1. new연산자를 사용하여 객체를 생성할 수 없다.
  2. 추상 클래스(부모)와 일반 클래스(자식)는 상속의 관계에 놓여있다.
  3. 새로운 일반 클래스를 위한 부모 클래스의 용도로만 사용된다.
  4. 일반 클래스들의 필드와 메소드를 통일하여 일반 클래스 작성 시 시간을 절약할 수 있다.
  5. 단일 상속만 가능하며 일반 변수를 가질 수 있다.
  6. 동일한 부모를 가지는 클래스를 묶는 개념으로 상속을 받아서 기능을 확장시키는 것이 목적이다.

 

🔫 인터페이스 (interface)

인터페이스는 모든 메서드가 추상 메서드인 경우를 말한다.

추상 클래스보다 한 단계 더 추상화된 클래스이며, 추상 클래스와 달리 일반 메서드, 멤버 변수를 구성원으로 가질 수 없다.

기존엔 인터페이스 내에 일반 메서드를 구현할 수 없었지만, 자바 8버전부터 default 예약어를 통해 일반 메서드 구현이 가능해졌다.

 

인터페이스의 특징

  1. 인터페이스에 적는 모든 메소드들은 추상 메서드로 간주되기 때문에 abstract를 적지 않는다.
  2. 모든 멤버 변수는 public static final이여야 하고, 생략 가능하다.
  3. 인터페이스도 추상 클래스와 마찬가지로 new 연산자를 사용하여 객체를 생성할 수 없다.
  4. 인터페이스는 구현 객체가 같은 동작을 한다는 것을 보장하는 것이 목적이다.
  5. 인터페이스는 추상 클래스와 반대로 다중 상속이 가능하다.
public static final 사용 목적
인터페이스 변수는 아무 인스턴스도 존재하지 않는 시점이기 때문에 스스로 초기화될 권한이 없음.
때문에 public static final를 사용해 구현 객체의 같은 상태를 보장.

 

 

추상 클래스와 인터페이스의 공통점

  • 추상 클래스와 인터페이스는 선언부만 있고 구현은 없는 클래스이다.
  • 인스턴스화(객체 생성)을 할 수 없다.
  • 추상 클래스를 extends로 상속받은 자식들과 인터페이스를 implements 하고 구현한 자식들만 객체 생성할 수 있다.

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

  • 추상 클래스는 단일 상속, 인터페이스는 다중 상속이 가능하다.
  • 추상 클래스의 목적은 상속을 받아서 확장시키는 것이고,
    인터페이스의 목적은 구현하는 모든 클래스에 대해 특정한 메서드가 반드시 존재하도록 강제하는 역할로, 구현 객체가 같은 동작을 한다는 것을 보장하기 위한 것이다.

 

✔️ 총 정리

추상 클래스(abstract class) 인터페이스(interface)
선언부만 있고 구현 내용이 없는 클래스
직접 객체를 생성할 수 없음 (하위 클래스의 상속, 구현 필요)
추상 메서드를 하나라도 가지고 있는 클래스는
무조건 추상 클래스
추상메소드만 가지고 있는 클래스
추상 클래스를 상속받는 클래스는
반드시 추상 메소드를 구현해야함
인터페이스를 구현하는 클래스는 
인터페이스의 모든 메소드를 구현해야함
단일 상속 다중 상속
상속 받아 확장시키는 것이 목적 구현 객체가 같은 동작을 한다는 것을 보장하기 위한 목적

 

 

참고

 

반응형

댓글