추상 클래스와 인터페이스 비교

woply·2022년 9월 10일
0

Java

목록 보기
3/3

추상 클래스와 인터페이스 형태 비교

추상클래스는 일반 변수(가능/선택) + 일반 메소드(가능/선택) + 추상메소드의 형태를 가지고, 인터페이스는 상수 + 추상메소드의 형태만 가능하다. 인터페이스는 일반 변수나 일반 메소드를 가지는 것이 불가능하다.


추상 클래스와 인터페이스의 구조적 특징 비교

추상 클래스

  • 추상메서드가 아예 없거나, 한 개 이상 가지고 있는 클래스
  • 한 개 이상의 추상메서드를 가지고 있는 경우 반드시 abstract 클래스명 표기가 필요함
  • 추상 클래스는 일반 메서드와 추상 메서드를 모두 가질 수 있다.
  • abstract와 final은 동시에 표기할 수 없다
  • 일반 클래스에서 추상 클래스를 상속받을 경우 추상 메서드를 모두 구현해야 한다. 단, 추상 클래스에서 추상 클래스를 상속받을 경우 구현하지 않아도 된다.
  • 추상 클래스에서 인터페이스를 implements할 경우 메서드를 구현하지 않아도 된다.
  • 추상 클래스는 생성자를 가질 수 있다.
  • 추상 클래스는 인스턴스를 만들 수 없지만, 상속받은 클래스를 이용해 인스턴스화가 가능하다.(ex. 추상클래스명 ab = new 클래스명( ); )
  • 추상 클래스의 궁극적인 목적은 상속에 있다.

인터페이스

  • 인터페이스안의 모든 메서드는 추상 메서드다. 따라서 메서드는 형태만 가지고 있으며(=시그니처만 가지고 있으며), 반드시 구현 클래스에서 메서드 바디를 구현한 후에 사용해야 한다. 어차피 모든 메서드가 추상 메서드이기 때문에 abstract를 생략 할 수 있다.
  • 인터페이스의 접근지정자는 아예 없거나, public이거나, abstract만 가능하다. 또한 final을 사용할 수 없다.
  • 인터페이스는 일반 변수를 가질 수 없다. 인터페이스에 사용되는 변수는 static만 가능하다. 따라서, 변수 앞에 static final을 생략할 수 있다.
  • 인터페이스는 생성자를 가질 수 없다.

추상 메서드란?

  • 체적으로 표 되어 있지 않은 메서드를 의미한다. absract로 정의되어 있으며, 바디를 가지지 않은(=구현되어 있지 않은) 메서드다. 코드 레벨로 설명하자면, 메서드 시그니처(리턴타입, 메서드 이름, 파라미터) 는 정의 되어 있으나, { } 에 해당하는 메서드 본문이 없는 형태다.({ } 자체가 없다.)

추상 클래스와 인터페이스의 사용 목적 비교

  • 간단하게 생각하면 추상 메서드의 구현만 필요하다면 인터페이스를 사용하고, super 클래스의 일반 메서드나 멤버변수도 필요하다면 추상 클래스를 사용하면 된다.
  • 인터페이스는 구현 과정에서 필수적으로 구현해야하는 메서드의 시그니처가 한 눈에 들어온다. 클래스가 어떤 구조를 갖춰야하는지 쉽게 알 수 있다. 반면, 추상 클래스는 필요에 의해 일반 메서드를 사용할 수 있고, 일부 기능에 대해 추상화(추상 메서드)가 필요한 클래스에서 사용할 수 있다. 이러한 특징으로 상속에 대한 계층구조를 명확하게 표현해야 할 때는 추상 클래스가 적합하다.
profile
7년간 마케터로 일했고, 현재는 헤렌에서 백엔드 개발자로 일하고 있습니다. 고객 가치를 설계하는 개발자를 지향하며, 개발, 독서, 글쓰기를 좋아합니다. 업이 심오한 놀이이길 바라는 덕업일치 주의자입니다.

0개의 댓글