추상화와 인터페이스에 대한 개념은 볼때마다 헷갈리고 까먹게 된다.
그래서 이번 글에서는 추상화가 무엇인지, 그리고 추상클래스와 인터페이스가 어떤 차이를 가지는지 Phone 예시를 통해 정리해보려고 한다.
추상화는 여러 대상의 공통점을 뽑아내어 공통만 남기는 것이다.
수업시간에 실습으로 진행한 phone으로 예시를 들어볼 것이다.
예를 들어 삼성폰, 아이폰, 샤오미폰은 다 다르게 생겼고 기능도 조금씩 다르다.
이 폰들에 공통적으로 들어가는 것은 다음과 같다.
이때 결제 방식은 다음과 같이 다를 수 있다.

이때 pay()는 폰마다 다르니까 자식이 구현을 한다.

위와 같이 애플폰도 같은 형식으로 만들어주었다.

인터페이스에 적은 기능이 꼭 존재하여야한다.
예를 들어 결제 기능은 폰만 가질 수 있는 것이 아니다.
이럴 때 중요한 것은 “이 객체가 어떤 종류인가?”보다 “이 기능을 할 수 있는가?” 이다.
그래서 인터페이스는 보통 클래스가 반드시 구현해야 하는 기능의 약속이라고 말할 수 있다.
이 두 가지에 대한 생각을 정리해보겠다.
추상화는 복잡한 대상을 있는 그대로 전부 다루는 것이 아니라, 그중에서 공통된 핵심만 뽑아 하나의 개념으로 정리하는 과정이라고 생각한다. 예를 들어 삼성폰과 아이폰은 서로 다른 제품이지만, 전원을 켜고 배터리를 가지는 phone이라고 정의할 수 있다.
인터페이스는 기능에 더욱 초점을 맞춘다. 인터페이스는 특정 기능을 반드시 제공해야 한다는 규칙에 가깝다. 예를 들어 pay()처럼 결제 기능은 폰뿐 아니라 카드,애플워치 등 다른 디바이스나 기기도 가질 수 있다. 이런 경우 인터페이스는 “무엇인가”보다 “무엇을 할 수 있는가”를 표현하는 데에 더 적합하다.