[Java] 추상클래스와 인터페이스의 공통점과 차이점

이전 포스팅에서 추상 클래스와 인터페이스에 대한 내용을 정리해보았습니다. 추상 클래스와 인터페이스는 사실 용도가 완전히 다른 친구들인데 처음 공부하는 분들이라면 추상 클래스와 인터페이스가 대체 뭐가 다른지 헷갈릴 수 있다고 생각합니다. 그래서 이번 포스팅에서는 추상 클래스와 인터페이스가 어떤 점이 다른지에 대해 한번 써보려고 합니다.

 

[Java] 자바 추상 클래스(Abstract Class) 사용법 & 예제

[Java] 자바 인터페이스(Interface) 사용법 & 예제

 

추상 클래스와 인터페이스의 공통점 

  • 둘 다 자기 자신이 new를 통해 객체를 생성할 수 없고, 오로지 자식만이 객체를 생성할 수 있습니다.
  • 둘 다 추상 메서드(abstract method)를 갖습니다.
  • 둘 다 하위 클래스에서 추상 클래스를 모두 구현해야 합니다.

 

추상 클래스와 인터페이스의 차이점

추상 클래스(Abstract Class) 인터페이스(Interface)
상속하여 공통된 기능을 만들고, 확장하기 위함 구현하는 객체들이 같은 동작을 보장하기 위함
다중상속 불가능 다중상속 가능
생성자와 일반변수 모두 가질 수 있다. 생성자와 일반변수를 가질 수 없다.
메서드를 부분적으로 구현할 수 있다. 메서드 선언만 가능하다.
extends 키워드를 사용한다. implements 키워드를 사용한다.

 

추상 클래스와 인터페이스는 사용 목적이 다릅니다. 제가 사용하는 표현이 적절할지 모르겠으나 사용 목적을 아래와 같이 생각하시면 왜 사용해야 하는지 이해가 쉬울 듯합니다. 

 

  • 추상 클래스 -> 복제
  • 인터페이스 -> 설계

 

우선 추상 클래스는 공통점을 뽑아놓은 클래스라고 생각하시면 되겠습니다. 여러 자식들이 가지고 있는 공통된 속성들을 뽑아서 하나의 클래스를 만들어 놓은 것을 뜻합니다. 그래서 하위 클래스에서도 extends(상속)이라는 키워드를 사용하여 이 추상 클래스를 상속받아 객체를 구체화시켜갑니다. 이때 상속의 의미는 is a kind of (~의 한 종류)라는 의미를 가지게 됩니다. 예를 들자면 사자 is a kind of 동물이라는 의미를 말이죠. 추상 클래스는 클래스라는 이름에서 알 수 있듯 엄연한 객체입니다. 비록 단독으로 생성하지는 못하지만 객체이기에 생성자도 사용할 수 있죠. 인터페이스와는 완전히 다른 녀석입니다. 

 

반면에 인터페이스는 객체가 아니라 추상 자료형입니다. 객체가 아니기에 생성자도 사용할 수 없습니다. 오로지 상수와 추상 메서드만 가질 수 있고 이것을 다른 객체가 구현합니다. 그래서 implement(구현하다)라는 키워드를 사용하는 것입니다. 이때 구현의 의미는 be able to(~할 수 있는)이라는 의미를 가집니다.

 

결론

  • 추상클래스 -> 객체들의 공통 특성들을 모아놓은 클래스
  • 인터페이스 -> 객체 생성을 위한 설계도 

우리가 추상 클래스와 인터페이스의 차이점을 정확히 알고 가야 하는 이유는 두 개의 사용처가 완전히 다르기 때문입니다. 추상 클래스는 많은 객체를 생성해야 할 때 각각의 객체에 공통점과 개발의 효율성을 위해 생성하지만 인터페이스는 수많은 개발자가 함께 협업을 할 때 객체 간의 통일성을 강제하기 위한 용도로 많이 사용됩니다. 적어도 사용용도는 완벽히 이해하고 있어야 조금 더 효율적인 개발적 설계를 할 수 있겠습니다.

 

댓글

Designed by JB FACTORY