인터페이스(Interface)와 추상 클래스(Abstract class)
공통점
-
추상 클래스와 인터페이스는 선언만 있고 구현 내용이 없는 클래스다.
-
따라서 인터페이스와 추상 클래스를 가지고 새로운 인스턴스(객체)를 생성할 수 없다.
-
추상 클래스를 extends로 상속받아 구현한 자식 클래스나
-
인터페이스를 implements하고 구현한 자식 클래스만이 객체를 생성할 수 있다.
차이점
추상 클래스
-
추상 클래스는 추상 메소드(abstract method)가 하나라도 존재하는 클래스를 말한다.
-
즉 일부는 구현된 메서드도 있을 수 있고
-
일부는 abstract method인 메서드도 있을 수 있다.
-
여기서 포인트는 추상 클래스를 언제 사용해야하가?이다.
-
인터페이스와 추상 클래스를 단순하게 자식 클래스에서 반드시 구현하게 위임시키는 것만 생각하면 비슷하지만 용도를 봤을 때 다르다.
-
추상 클래스는 말 그대로 추상화 시킬 때 사용하면 된다.
-
책에서 보는 is-a 관계가 핵심이다.
-
쉽게 말해 여러 클래스들의 공통점을 찾아 추상화시켜서 사용하는 것이 개발에서 이득일 때 사용한다.
-
예를들면 냉장고, TV, 커피머신, 전자렌지등의 클래스를 만들어야할 일이 있을 때
-
가전 제품이라는 추상 클래스로 추상화 시켜서 사용하면 좋을 때 사용한다.
-
가전 제품 공통적으로 on(), off(), 전기소모(), 기타등 사용되는 메서드들을 적고
-
가전 제품별로 동작()을 나눠서 냉장고는 차갑게하고 전자렌지는 물분자운동을 시키는 구조다.
-
(냉장고 is a 가전제품, 커피머신 is a 가전제품, 전자렌지 is a 가전제품)
-
상속 받아서 기능을 확장시키는데 목적, 전형적인 상속의 목적
-
또한 자바특성상 다중상속이 불가한 점을 고려해서 사용해야한다.
-
요약하면 다중상속 불가, 멤버 변수 존재 가능, 구현된 메서드 존재 가능이다.
인터페이스
-
인터페이스는 implements하는 모든 클래스에 대해 특정한 메서드를 반드시 정의하도록 강제하는 역할이다.
-
즉 구현 객체가 같은 동작을 한다는 것을 보장하기 위한 목적이다.
-
클래스가 아니기 때문에 인터페이스는 다중 상속이 가능하다.
-
interface도 is-a 관계다.