2021. 6. 26. 21:51ㆍDev/Java
구글링하면 정확히 100억개 정도의 관련 글이 나오지만 나도 해본다. 추상클래스(Abstract class)와 인터페이스(Interface)의 차이를 알아보자.
추상 클래스와 인터페이스 전부 각각 상속받는 클래스가 추상 메소드를 구현해야 한다. 즉, 추상 클래스와 인터페이스 모두 선언만 있고 구현되어 있지 않다.
둘 다 비슷비슷 한 것 같은데 차이를 모르겠다?
차이점은 분홍 공백으로 표시해뒀다.
#Abstract Class(추상 클래스)
- 여러 개의 메소드 중, 하나 이상의 추상 메소드가 포함된 클래스 / abstract로 선언된 클래스
여기서 중요한 점.
추상 클래스는 반드시 추상 메소드를 포함한다 = X
추상 메소드를 포함하는 클래스는 추상 클래스이다 = O
- 추상 클래스는 말 그대로 객체이다. 따라서 생성자를 생성하고, 필드 변수를 가질 수 있다.
- extends를 통해 상속받는다.
- 단일 상속만 가능하다.
//추상 클래스
public abstract class A {
private String variable1;
private String variable2;
public void method1() {
//...logic
}
}
//추상 클래스2
public class B {
private String variable1;
private String variable2;
public abstract void method() {
//...logic
}
}
//A를 상속받는 class mainA
public class mainA extends A {
//...logic
}
//B를 상속받는 class mainB
public class mainB extends B {
//...logic
}
//하나의 클래스는 여러개의 클래스를 상속받지 못하므로, 아래의 코드는 실행 안된다.
//public class mainC extends A, B {
// //...logic
//}
보다시피, A와 B는 모두 추상 클래스이다.
A : abstract로 선언되어있기 때문에, 메소드가 추상 메소드가 아니더라도 추상클래스이다.
B : class로만 선언되어 있지만, 추상 메소드가 포함되어 있기 때문에 추상클래스이다.
#Interface(인터페이스)
- 모든 메소드가 추상 메소드임
- 인터페이스는 객체가 아니기 때문에, 생성자를 가질 수 없고 객체화가 불가능하다. 또한 상수와 추상 메소드만을 가질 수 있다.
- implements를 통해 상속
- 다중 상속이 가능
//interface A 선언
public interface A {
private final boolean variable1 = true;
//선언만 해줘야함
void methodA ();
}
public interface B {
private final int variable1 = 3;
void methodB ();
}
//인터페이스 다중 구현이 가능하다!!!
public void main implements A, B{
//A의 추상 메소드를 구현해야함
void methodA () {
//...logic
}
//B의 추상 메소드를 구현해야 함
void methodB () {
//...logic
}
}
Java 8부터는 default 메소드를 이용하여 인터페이스의 기능을 확장 시킬 수 있다.
Reference
https://webdevtechblog.com/자바-인터페이스와-추상클래스-6eecbe5d6350
자바 인터페이스와 추상클래스
서론
webdevtechblog.com
자바의 추상 클래스와 인터페이스
추상 클래스와 인터페이스의 차이 | 추상 클래스(Abstract class)와 인터페이스(Interface)의 차이 및 존재 이유를 설명해주세요. 클래스는 크게 일반 클래스와 추상 클래스로 나뉘는데 추상 클래스는
brunch.co.kr
'Dev > Java' 카테고리의 다른 글
JAVA : Stream? (0) | 2021.08.31 |
---|---|
#Spring Structure- Controller, Service, Domain(Model), DTO, Persistance 알아보기 (0) | 2021.08.22 |
Java Annotation (0) | 2021.06.28 |
Java의 기본 개념 정리 (0) | 2021.06.26 |