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

2021. 11. 16. 21:46[JAVA]

반응형

추상클래스란?

일반적으로 Java에서 클래스는 2가지로 구분된다. (일반 클래스와 추상 클래스)

추상 클래스는 0개 이상의 추상메소드(아직 구현되지 않은 자식이 구현할)를 가지고, 일반 메소드, 일반 변수 또한 가질 수 있다.

그렇기에 인터페이스 역할도 하면서, 구현체도 가지고 있는 돌연변이 같은 클래스이다.

선언 시 키워드는 abstract 키워드를 사용한다.

- 추상클래스는 인스턴스화 할 수 없다.

즉 추상클래스는 상속을 의미함으로써 물려주는 개념이 된다. 그렇기에 부모-자식 관계인 계층 구조를 나타낸다.

abstract class Animal {
  abstract void bark(); 
  void feed(){
  }
}

인터페이스란?

인터페이스는 쉽게 말하면 껍데기라고 말할 수 잇고, 설계도 또는 명세서라고 할 수 있다.

모든 메소드가 추상 메소드이고 일반 변수를 가질 수 없다.

그 의미는 인터페이스를 구현한 클래스는 모든 메소드를 강제적으로 구현해야 한다.

- 인터페이스도 인스턴스화 할 수 없다.

interface Vehicle {
abstract void run();
abstract void move();
}

추상클래스는 상속받기 위해 extends 인터페이스는 implements 키워드를 사용한다.

 

정리하자면

추상클래스는 말그대로 상속의 개념으로 물려주고 물려받는 개념으로 부모-자식 관계가 형성 된다.

그렇기에 override와 overload와 같은 다형성에 이점이 있고 겹치는 메소드는 부모에서 가져오면 되니 편리하다.

인터페이스는 상속 개념이 아닌 어떠한 동작을 위한 구현을 강제화 한다.

그렇기에 큰 프로젝트일 수록 인터페이스를 통해 많은 이점을 얻는다. ex) 사람이 해야할 행동을 인터페이스로 구현해놓으면 모든 개발자들이 사람클래스를 만들 때 인터페이스를 반드시 구현한다.

 

 

반응형