[Comparison] 추상메서드와 인터페이스


추상메서드와 인터페이스


1. 공통점

1) 둘 다 모두 추상 메소드라는 것을 가진다. 구현 클래스에서는 반드시 만들어야만하는 강제성을 가진다. 또한 추상 메소드는 컴파일러를 속인다. 

추상 클래스는 변수를 인터페이스나 부모 클래스 타입으로 보았을 때 아무런 호출에 문제를 일으키지 않는다. 

따라서 컴파일러는 실제로 메소드가 어떻게 동작할지는 모르고, 아무 문제 없이 실행해준다. 즉 컴파일러를 속여서 내가 원하는 동작을 마음대로 조종하게 한다는 것이다.


2) 둘 다 객체 생성은 불가능하고, 타입으로만 사용된다.

추상 클래스와 인터페이스 둘 다 객체의 생성이 목적인 클래스가 아니라. 변수나, 파라미터, 리턴 타입, 자료구조를 유연하게 쓰기 위한 도구이다.


2. 차이점

1) 인터페이스는 스펙이나 원하는 기능을 정의하고자 쓰지만, 추상 클래스는 ‘상속+강제성’이 목적이다.

인터페이스각 객체 간의 통신을 위해서 사용되는 반면에 추상 클래스는 본연의 상속 기능에 강제성을 추가하는 것이 목표로, 만들어진 시작점이 다르다는 것이다.


2) 인터페이스는 상수, 추상 메소드만 존재하지만, 추상 클래스는 상속이 원래 목적이므로 실제 변수나 메소드를 그대로 가지고 있다.

인터페이스는 상호 간의 규칙이기 때문에 private으로 변수를 선언할 수도 없고 선언된 변수는 자동으로 상수로 처리된다. 반면에 추상 클래스는 상속의 수단이기 때문에 상속의 본연의 기능을 그대로 가지고 있다. 따라서 공통적인 메소드나 변수를 부모 클래스로 모아서 사용할 수 있다.


3) 인터페이스는 부채만 남겨주지만, 추상 클래스는 재산도 남겨 준다. 인터페이스는 추상 메소드만 존재하기 때문에 부채만 잔뜩 던져주게 되지만 추상 클래스는 상속의 원래 기능을 그대로 사용할 수 있다는 얘기이다.


4) 인터페이스는 다중 상속도 가능하지만, 추상 클래스는 단일 상속만 된다. 추상 클래스는 상속이 본 목적이므로 기존 상속처럼 단일 상속만 가능하다.