[Java] 추상클래스와 인터페이스의 공통점과 차이점
- Language/Java
- 2022. 10. 25.
이전 포스팅에서 추상 클래스와 인터페이스에 대한 내용을 정리해보았습니다. 추상 클래스와 인터페이스는 사실 용도가 완전히 다른 친구들인데 처음 공부하는 분들이라면 추상 클래스와 인터페이스가 대체 뭐가 다른지 헷갈릴 수 있다고 생각합니다. 그래서 이번 포스팅에서는 추상 클래스와 인터페이스가 어떤 점이 다른지에 대해 한번 써보려고 합니다.
추상 클래스와 인터페이스의 공통점
- 둘 다 자기 자신이 new를 통해 객체를 생성할 수 없고, 오로지 자식만이 객체를 생성할 수 있습니다.
- 둘 다 추상 메서드(abstract method)를 갖습니다.
- 둘 다 하위 클래스에서 추상 클래스를 모두 구현해야 합니다.
추상 클래스와 인터페이스의 차이점
추상 클래스(Abstract Class) | 인터페이스(Interface) |
상속하여 공통된 기능을 만들고, 확장하기 위함 | 구현하는 객체들이 같은 동작을 보장하기 위함 |
다중상속 불가능 | 다중상속 가능 |
생성자와 일반변수 모두 가질 수 있다. | 생성자와 일반변수를 가질 수 없다. |
메서드를 부분적으로 구현할 수 있다. | 메서드 선언만 가능하다. |
extends 키워드를 사용한다. | implements 키워드를 사용한다. |
추상 클래스와 인터페이스는 사용 목적이 다릅니다. 제가 사용하는 표현이 적절할지 모르겠으나 사용 목적을 아래와 같이 생각하시면 왜 사용해야 하는지 이해가 쉬울 듯합니다.
- 추상 클래스 -> 복제
- 인터페이스 -> 설계
우선 추상 클래스는 공통점을 뽑아놓은 클래스라고 생각하시면 되겠습니다. 여러 자식들이 가지고 있는 공통된 속성들을 뽑아서 하나의 클래스를 만들어 놓은 것을 뜻합니다. 그래서 하위 클래스에서도 extends(상속)이라는 키워드를 사용하여 이 추상 클래스를 상속받아 객체를 구체화시켜갑니다. 이때 상속의 의미는 is a kind of (~의 한 종류)라는 의미를 가지게 됩니다. 예를 들자면 사자 is a kind of 동물이라는 의미를 말이죠. 추상 클래스는 클래스라는 이름에서 알 수 있듯 엄연한 객체입니다. 비록 단독으로 생성하지는 못하지만 객체이기에 생성자도 사용할 수 있죠. 인터페이스와는 완전히 다른 녀석입니다.
반면에 인터페이스는 객체가 아니라 추상 자료형입니다. 객체가 아니기에 생성자도 사용할 수 없습니다. 오로지 상수와 추상 메서드만 가질 수 있고 이것을 다른 객체가 구현합니다. 그래서 implement(구현하다)라는 키워드를 사용하는 것입니다. 이때 구현의 의미는 be able to(~할 수 있는)이라는 의미를 가집니다.
결론
- 추상클래스 -> 객체들의 공통 특성들을 모아놓은 클래스
- 인터페이스 -> 객체 생성을 위한 설계도
우리가 추상 클래스와 인터페이스의 차이점을 정확히 알고 가야 하는 이유는 두 개의 사용처가 완전히 다르기 때문입니다. 추상 클래스는 많은 객체를 생성해야 할 때 각각의 객체에 공통점과 개발의 효율성을 위해 생성하지만 인터페이스는 수많은 개발자가 함께 협업을 할 때 객체 간의 통일성을 강제하기 위한 용도로 많이 사용됩니다. 적어도 사용용도는 완벽히 이해하고 있어야 조금 더 효율적인 개발적 설계를 할 수 있겠습니다.
'Language > Java' 카테고리의 다른 글
[Java] 자바 인터페이스(Interface) 사용법 & 예제 (1) | 2022.10.24 |
---|---|
[Java] 자바 추상 클래스(Abstract Class) 사용법 & 예제 (0) | 2022.10.23 |
[Java] 자바 클래스(Class)의 상속(Extends) 사용법 & 예제 (1) | 2022.10.11 |
[Java] 자바 클래스(Class) 사용법(선언, 생성, 사용) & 예제 (0) | 2022.10.10 |