본문 바로가기
  • soobinhand의 기술 블로그
Computer Science/JAVA

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

by soobinhand 2022. 1. 26.
728x90

나는 이 차이점을 두고 항상 생각했다. 왜 이렇게 머릿속에 들어가질 않지...?

면접에서도 많이 나오고 또 실제로 자바로 개발을 할 때에 꼭 알아둬야 할 것 같아서 이렇게 공부를 정리해본다.

처음 자바를 접할 때만 해도 이 둘의 차이가 뭐 그렇게 중요하겠어 라는 상당히 거만한 생각을 한 적이 있다. 그 때 해 놓을 걸.

 

추상 클래스

사실 추상 클래스는 일반 클래스와 별로 다를게 없다. 단지, 추상 메소드를 선언하고 상속을 통해서 자손 클래스에서 완성하도록 유도하는 클래스다. 유도 클래스다... 그래서 보통 미완성 설계도라고 한다.

abstract class soobinhand{
 public abstract void soobin();
}

이런식으로 구현한다. 어렵지 않다. 그냥 abstract만 붙여주면 된다.

인터페이스

추상 클래스가 미완성 설계도라면 인터페이스는 기본 설계도이다.

interface soobinhand{
 public static final int soo = 1995;
 public abstract void binhand();
}

공통점?

우선 둘의 공통점은 추상 메소드를 사용할 수 있다는 것이다.

또 인스턴스화가 불가능하다.

아니 그럼 왜 도대체 나눠서 사용하는데?

차이점?

상속?

추상클래스는 단일 상속, 인터페이스는 다중 상속이다.

존재 목적?

생각을 해보면 존재 목적 자체가 다른 것 같다. extends와 implements에 대한 것.

추상 클래스는 상속해서 기능을 이용하고, 확장시키는데 그 목적이 있다.

인터페이스는 구현을 강제함으로써 구현 객체의 같은 동작을 보장할 수 있다.

쉽게 말하자면,

추상 클래스의 목적은 부모 유전자를 물려받는 것이다.

인터페이스의 목적은 유전자 물려받는 것이 아니라 사교적으로 필요에 따라 결합하는 관계를 위한 것이다.

사용 용도?

나는 자바 프로그래밍 언어라는 책에서 봤다.

추상 클래스는 "~이다"

인터페이스는 "~를 할 수 있다"

이 말을 듣고 난 후 생각보다 많은 생각을 하게 되었다.

클래스의 속성을 추상 클래스 상속을 통해 해결하고, 할 수 있는 기능들을 인터페이스로 구현한다.

추상 클래스를 사용하는 경우는 상속관계를 타고 올라갔을 때 같은 조상을 상속하고 똑같은 기능이 필요한 경우.

인터페이스를 사용하는 경우는 다른 조상 상속인데 기능은 같아야 하는 경우.

로 나눠볼 수 있을 것 같다.

728x90

'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

댓글