개발에서는 여러 객체가 동일한 동작을 수행하되, 내부 구현은 다를 수 있는 상황이 자주 발생한다.
이러한 상황에서 인터페이스는 "기능 명세서"의 역할을 한다.
인터페이스는 **무엇을 해야 하는가(행동)**만 선언하고,
어떻게 수행하는지는 각 클래스가 다르게 구현하도록 강제한다.
인터페이스의 선언은 다음과 같다.
interface 인터페이스이름
{
반환_형식 메소드이름1( 매개변수 );
반환_형식 메소드이름2( 매개변수 );
반환_형식 메소드이름3( 매개변수 );
}
인터페이스는 메소드, 이벤트, 인덱서, 프로퍼티만 가질 수 있는데,
구현부가 없다. 또한 인터페이스는 접근 제한 지정자를 사용할 수 없고
모든 것이 public으로 선언된다.
그리고 인스턴스도 만들 수 없다.
그렇다면 구현도 없고 인스턴스도 만들 수 없는 인터페이스를 왜 사용하는 것일까?
위에서 살펴보았듯이, 인터페이스는 구현부가 없고, 인스턴스도 만들 수 없다.
그렇다면 인터페이스를 쓰는 이유는 뭘까?