인터페이스는 서로 다른 장치들이 연결되어서 상호 데이터를 주고받는 규격을 의미한다.
인터페이스를 한마디로 표현하자면 은 '약속과 기준이되는 클래스'되는 클래스라고 말하고 싶다.
인터페이스를 활용하는 예를 한번 들어보겠다.
A회사와 B회사가 공동 프로젝트를 진행한다고 해보자. 각 회사의 개발자들끼리 회의를 하고 서로 파트를 나누어 어떠한 기능들을 만들 것인지 결정하였다. 그리고 개발자들은 각자 코딩을 하고 중간 점검회의에서 각자 만든 소스를 공개하며 여러 소스들이 다같이 잘 동작되는지 살펴보았다. 이 때 문제점을 발견하였다. 연관된 기능을 구현했음에도 불구하고 클래스, 메소드, 변수들의 이름과 틀이 모두 제각각이어서 다시 수정해서 맞추기에는 이미 너무 많이 진행이 되어버렸다.
여기서 문제점은 무엇이었을까? 약속과 기준을 정해 놓지 않고 무작정 각자 코딩만 했다는 것이다. 어떤 기능을 정했으면 구현은 아니더라도 틀정도는 약속을 하고 프로젝트를 진행했으면 이런 일이 발생하지 않았을 것이다. 이러한 약속과 기준 및 틀이 되는 것이 인터페이스이다.
인터페이스에는 상수, 추상메소드, 디폴트메소드, 정적메소드를 포함할 수있다. 각각 어떻게 사용되는지 살펴보자
상수 : 인터페이스에서 값을 정해주면 함부로 바꾸지 말고 값만 참조해서 사용해라.
추상메소드 : 큰 틀로 가이드만 줄테니 추상메소드를 오버라이딩해서 재구현해라.
디폴트메소드 : 인터페이스에서 구현이 된 채로 제공은 해주지만 써도되고 안써도된다. 쓰고는 싶은데 수정을 하고 싶다면 오버라이딩해서 구현하여 사용해라.
정적메소드 : 사용하든 안하든 너의 자유인데 사용할 땐 인터페이스내에 구현되어있는 채로 사용해라.