타입스크립트, 솔리디티, 혹은 자바 에서 인터페이스의 중요성을 말해보고 싶다.
인터페이스의 중요성을 말한다면 기본적으로 패러다임, 혹은 설계를 하는 관점을 제시하면 좋다.
객체지향으로 설계를 한다는 전제라면 가장 중요한 개념은 유형이고, 확장성을 위해선 항상 문제를 추상화/일반화 해야 한다면 결국 중심은 추상 유형, 즉 인터페이스가 될 수 밖에 없다.
자바와 같은 방식의 객체지향 언어에서 인터페이스가 왜 필요하냐는 이야기는 데이터베이스 중심적 개발에서 테이블이 왜 필요한가나 마찬가지의 이야기이다.
물론 게시판을 만든다고 반드시 데이터베이스를 안써도 되고, 데이터베이스를 쓴다고 해도 아마 테이블 하나에 컬럼을 늘여서 모든 값을 다 때려 넣어도 어떻게든 돌아가게는 할 수는 있다다.
하지만, 기본적으로 RDBMS라는 개념 자체가 테이블 하나를 고유한 성격의 데이터의 집합으로 보고 그런 집합 사이의 관계를 맺는 방식으로 쓰라고 만든 것이고, SQL의 조인 구문 등 모든 관련 도구들이 그런 개념을 전제로 하고 있다.
마찬가지로 자바에서 객체지향을 무시하고 C처럼 코딩한다고 해도 안될 것이야 없겠지만, 자바의 핵심 API를 비롯한 대부분의 라이브러리/프레임워크/개발 도구 등이 유형을 통한 추상화를 전제로 구성되어 있다.
따라서 객체 지향 언어를 본래의 의도대로 사용하기 위해선 결국 추상 유형을 중심으로 사고하는 것이 최적의 접근이다.
왜 인터페이스가 필요한가 = 왜 객체지향적으로 개발해야 하나
Cooperation (협업)
Easy to replace (교체 용이)
Multiple inheritance (다중 상속)
인터페이스와 추상 클래스는 존재 목적이 다르다. 추상 클래스는 그 추상 클래스를 상속받아서 기능을 이용하고, 확장시키는 데 있다.
반면, 인터페이스는 함수의 껍데기인 것인데, 그 이유는 그 함의 구현을 강제하기 위해서이다.
구현을 강제함으로써 구현 객체의 같은 동작을 보장할 수 있다.