인터페이스
인터페이스의 메소드를 호출하면 인터페이스는 객체의 메소드를 호출시킨다.
직접 객체의 메소드르르 호출하면 되는데도 중간에 인터페이스를 두는 이유는 코드를 수정하지 않고 객체를 변경할 수 있도록 하기 위함이다.
인터페이스는 하나의 객체가 아니라 여러 객체들과 사용이 가능하므로 어떤 객체를 사용하느냐에 따라 리턴값이 다르다.
인터페이스 선언은 class 키워드 대신에 interface 키워드를 사용한다.
[public] interface 인터페이스이름 {...}
인터페이스는 객체 사용 방법을 정의한 것이므로 실행 시 데이터를 저장할 수 있는 인스턴스 또는
정적 필드를 선언할 수 없다. 그러나 상수 필드는 선언이 가능하다.
*인터페이스에 선언된 필드들은 public static final 속성을 가지며 생략하더라도 그 속성을 유지한다.
인터페이스를 통해 호출된 메소드는 최종적으로 객체에서 실행된다. 때문에 인터페이스의 메소드는 실행 블록이 필요 없는
추상 메소드로 선언한다. 마찬가지로 메소드도 public abstract 특성을 갖고 생략하더라도 그 특성을 유지한다.
개발 코드가 인터페이스 메소드를 호출하면 인터페이스는 객체의 메소드를 호출한다. 객체는 인터페이스에서 정의된
추상 메소드와 동일한 메소드 이름, 매개 타입, 리턴 타입을 가진 실체 메소드를 반드시 가지고 있어야한다.
이러한 객체를 구현 객체라고 하고 , 구현 객체를 생성하는 클래스를 구현 클래스라고 한다.