나는 이 차이점을 두고 항상 생각했다. 왜 이렇게 머릿속에 들어가질 않지...?
면접에서도 많이 나오고 또 실제로 자바로 개발을 할 때에 꼭 알아둬야 할 것 같아서 이렇게 공부를 정리해본다.
처음 자바를 접할 때만 해도 이 둘의 차이가 뭐 그렇게 중요하겠어 라는 상당히 거만한 생각을 한 적이 있다. 그 때 해 놓을 걸.
추상 클래스
사실 추상 클래스는 일반 클래스와 별로 다를게 없다. 단지, 추상 메소드를 선언하고 상속을 통해서 자손 클래스에서 완성하도록 유도하는 클래스다. 유도 클래스다... 그래서 보통 미완성 설계도라고 한다.
abstract class soobinhand{
public abstract void soobin();
}
이런식으로 구현한다. 어렵지 않다. 그냥 abstract만 붙여주면 된다.
인터페이스
추상 클래스가 미완성 설계도라면 인터페이스는 기본 설계도이다.
interface soobinhand{
public static final int soo = 1995;
public abstract void binhand();
}
공통점?
우선 둘의 공통점은 추상 메소드를 사용할 수 있다는 것이다.
또 인스턴스화가 불가능하다.
아니 그럼 왜 도대체 나눠서 사용하는데?
차이점?
상속?
추상클래스는 단일 상속, 인터페이스는 다중 상속이다.
존재 목적?
생각을 해보면 존재 목적 자체가 다른 것 같다. extends와 implements에 대한 것.
추상 클래스는 상속해서 기능을 이용하고, 확장시키는데 그 목적이 있다.
인터페이스는 구현을 강제함으로써 구현 객체의 같은 동작을 보장할 수 있다.
쉽게 말하자면,
추상 클래스의 목적은 부모 유전자를 물려받는 것이다.
인터페이스의 목적은 유전자 물려받는 것이 아니라 사교적으로 필요에 따라 결합하는 관계를 위한 것이다.
사용 용도?
나는 자바 프로그래밍 언어라는 책에서 봤다.
추상 클래스는 "~이다"
인터페이스는 "~를 할 수 있다"
이 말을 듣고 난 후 생각보다 많은 생각을 하게 되었다.
클래스의 속성을 추상 클래스 상속을 통해 해결하고, 할 수 있는 기능들을 인터페이스로 구현한다.
추상 클래스를 사용하는 경우는 상속관계를 타고 올라갔을 때 같은 조상을 상속하고 똑같은 기능이 필요한 경우.
인터페이스를 사용하는 경우는 다른 조상 상속인데 기능은 같아야 하는 경우.
로 나눠볼 수 있을 것 같다.
'Computer Science > JAVA' 카테고리의 다른 글
[JAVA] 클래스 변수, 인스턴스 변수, 지역 변수 (0) | 2022.02.04 |
---|---|
[JAVA] 클래스, 객체, 인스턴스 (0) | 2022.01.28 |
[JAVA] StringTokenizer (0) | 2021.11.14 |
[JAVA] Priority Queue (0) | 2021.10.30 |
[JAVA] JDBC (0) | 2021.10.29 |
댓글