Interface
Java Tutorial에 있는 interface부분을 읽으며 정리했던 내용입니다.
원래 엠파스 블러그에 정리해 두었었는데 이번 기회에 이것도 이리 옮겨오네요 :)
Interface는 다른 class들로 부터 구현될 행동들의 규약을 정의한 것이다.
Interface는 구현되어 있진 않은 메소드 정의들의 집합이다.
abstract class와의 차이점
1. abstract class는 method를 몇개 구현해 놓을 수 있지만 interface는 그렇치 않다.
2. 하나의 class는 여러 interface들을 구현할 수 있지만 (abstract) class는 하나만 상속 받을 수 있다.
3. interface는 2번과 같은 이유로 인해 class hierarchy에 속하지 않는다.
4. 전혀 상관 없는 class들도 같은 interface는 구현할 수 있다.
public interface InterfaceName extends SupreInterfaces {
....
}
interface앞에 붙을 수 있는 접근 지시자는 public과 default(아무것도 안쓰는것)이다.
default의 경우 같은 패키지 안에 있는 class에서만 구현 할 수 있다.
interface는 다중 상속이 가능하다. 물론 interface만 상속 해야한다.
method들은 head부분만 쓰고 쎄미콜론으로 닫아야 한다.
자동으로 public abstarc의 키워드가 붙은것으로 간주하기에 안쓰는게 좋다.
특히 abstract는
필드도 넣을 수 있는데 암것도 안쓰면 자동으로 public static final로 간주한다.
private이나 protected 멤버는 선언할 수 없다.
그리고 멤버의 head에 transient, volatile, synchronized 키워드를 사용할 수 없다.
public class ImplClass extends JFrame implements SuperInterface1, SuperInterface2 {
...
}
interface를 구현하는 class에서는 여러 interface를 implements 할 수 있다.
이 것은 interface와의 이종의 계약이다. interface에 들어있는 모든 method를 구현하겠다는..
만약 이 약속을 지키지 않을 시 이 class는 abstract class가 되어야 한다.
interface type의 객체는 만들 수 없지만 변수는 만들 수 있다.
이 변수로 해당 interface를 구현한 class들의 객체를 참조 할 수 있다.끝으로
이미 interface가 있고 그리고 그 interface를 구현한 class들이 있느 상태에서
interface에 새로운 메소드를 추가하는 가능하면 하지 말아야 한다.
그 interface를 구현한 모든 class들에서 에러가 발생할 것이다.모든 calss들을 들려서 추가한 method를 구현해 주거나 class들을 abstract class로 만들어야 한다.
이럴바엔 차라리 새로운 interface는 만들어서 필요한 class들이 추가로 implement 하게 수정하는게 좋다.