추상클래스(Abstract) vs 인터페이스(Interface)
두가지 개념 모두 추상 메소드를 선언만 해두고 정의는 사용자에게 강제로 맡기는 방식으로, 헷갈릴 수 있는 개념이다. 하지만 둘은 명확한 차이를 갖고 있다. 사용법과 그 생김새에 대하여 차이점을 알아보자.
#추상클래스 : 추상 메소드가 하나 또는 그 이상 포함된 클래스
#인터페이스 : 인터페이스 내의 모든 메소드들은 빈 껍데기만 있는 메소드
추상클래스
추상 클래스는 추상 메소드를 하나 이상 갖고 있는 클래스를 말한다. #추상메소드는 abstract 키워드를 사용하여 정의하며, 그 내부의 내용은 정의되어 있지 않다. 만약 추상메소드를 하나라도 포함하고 있는 추상 클래스라면, 이 클래스 역시 abstract 키워드를 사용하여 표시해 주어야 한다. 추상클래스 내에는 추상메소드 뿐만 아니라 일반 메소드도 가질 수 있으며, 일반 멤버변수 또한 가질 수 있다.
인터페이스
인터페이스는 내용이 없는 메소드들의 형태만 구현해놓은 추상메소드의 집합이라고 할 수 있다. 인터페이스는 일반 메소드나 일반 변수를 가질 수 없으며 변수의 형태는 static만 가능하다. 그리고 클래스와 가장 큰 차이점이 바로 생성자를 가질 수 없다는 것이다.
추상클래스와 인터페이스의 사용
이 둘의 가장 큰 차이점은 자바의 중요한 #상속 개념에서 나타난다. 자바에서는 다중 상속이 허용되지 않는다. 그 이유는 일반 클래스가 추상클래스를 상속받았을 경우, 슈퍼클래스의 모든 추상메소드를 새롭게 정의해야 하는데(추상 메소드들은 비워져있고 서브클래스의 오버라이딩으로 실현되니까),
만약 두개 이상의 슈퍼클래스에서 같은 이름의 추상메소드를 가지고 있다면 어떤 메소드를 실행해야 할지 모호해지기 때문이다. 반면에 인터페이스는 한번에 여러개를 상속받을(구현할) 수 있다.그 외에도 다양한 형태적, 용법적 차이를 가진다.
* 클래스 상속에는 extends 키워드를 사용하며, 인터페이스 구현에는 implements 키워드를 사용한다.
* 인터페이스 간의 상속에서는 extends를 사용한다.
* 클래스 다중상속은 지원하지 않지만 인터페이스는 동시에 여러개를 구현할 수 있으며, 클래스 상속과 동시에 인터페이스 구현도 가능하다.
* 일반 클래스가 추상클래스를 상속받을 경우, 모든 추상메소드를 반드시 구현해야만 하지만 추상클래스가 추상클래스를 상속받은 경우에는 반드시 모든 추상메소드를 구현해야 하는 것은 아니다.
* 인터페이스를 구현할 경우 반드시 모든 메소드를 정의해야 한다.
[출처] [Java] 추상 클래스와 인터페이스의 차이점|작성자 슈프림
-공통점 :
1.객체생성불가
2.모든 추상메소드(빈 클래스)를 서브클래스에서 오버라이딩 필요
3.추상추상 인터인터 서로 상속가능
-차이점 :
추상 클래스 : abstract 시작, 다중상속불가, 일반 필드, 메소드 멤버 가능
인터페이스 : interface 시작, 다중상속가능, 상수와 추상메소드만 존재(+default 메소드)
'Programming > Java' 카테고리의 다른 글
6장. 패키지와 활용 #2 주요 클래스 (0) | 2020.06.15 |
---|---|
6장. 패키지와 활용 #1 패키지 (0) | 2020.06.14 |
5장. 상속 #4 추상 메소드/클래스 (0) | 2020.06.13 |
5장. 상속 #3 오버라이딩 (0) | 2020.06.12 |
Troubleshoot #1 No enclosing instance of type ... is accessible (0) | 2020.06.11 |
댓글