인터페이스는 상속과 메소드 오버라이딩을 기반으로 메소드에 대한 약속을 프로그램 코드상에서 규정하는 것이다.
객체가 인터페이스를 구현하면 그 객체는 인터페이스의 메소드를 반드시 구현해야 한다.
일반적으로 클래스가 인터페이스를 상속하는 경우에는 상속 이라는 표현을 쓰지않고 구현 이라는 표현을 쓴다.
하위클래스에서 인터페이스에 정의된 텅 빈 메소드(abstract 메소드) 를 구현해서 채워 넣어야 하기 때문이다.
그래서 인터페이스를 구현 할 때에는 키워드 extends를 사용하지 않고 키워드 implements 를 사용한다.
그리고 인터페이스 내에 정의되는 메소드는 무조건 public abstract 로 선언되기
때문에 이에대한 선언을 별도로 해줄 필요가 없지만 많은 개발자들이 명확히 표현하는 경우가 많다.
인터페이스의 규칙
인터페이스 내에 존재하는 변수는 무조건 public static final 로 선언된다.
인터페이스 내에 존재하는 메소드는 무조건 public abstract 로 선언된다.
인터페이스는 참조변수의 선언이 가능하고 메소드의 오버라이딩도 가능하다.
인터페이스도 오버라이딩과 마찬가지로 하위클래스에서
접근제어 지시자의 허용범위를 좁히는 방식으로는 접근제어 지시자를 변경할수 없다.
인터페이스 간에도 상속 관계를 형성할수 있다. 상속을 표현하는데에 있어서는 implements가 아닌 extends가 사용된다.
1 2 3 4 5 6 7 | public interface MyInterface{ //인터페이스는 public 으로 선언하는것이 일반적이다. public void myMethod(); //public이 아니더라도 public 으로 선언된다. } public interface YourInterface{ public void yourMethod(); } | cs |
위와같이 두개의 인터페이스가 정의되어 있을때 클래스는 위의 두 메소드를 동시에 구현 할수 있다.
1 2 3 4 | Class OurClass implements Myinterface, YourInterface{ public void myMethod(){...} public void yourMethod(){...} } | cs |
abstract interface 차이
인터페이스와 추상 클래스는 서로 비슷한 듯 다른 기능이다.
인터페이스는 클래스가 아닌 인터페이스라는 고유한 형태를 가지고 있는 반면추상 클래스는 일반적인 클래스다.
또 인터페이스는 구체적인 로직이나 상태를 가지고 있을 수 없고추상 클래스는 구체적인 로직이나 상태를 가지고 있을 수 있다.
'Java' 카테고리의 다른 글
예외클래스 정의 / throw / throws (0) | 2017.02.25 |
---|---|
예외처리 try~catch /finally (0) | 2017.02.25 |
abstract 클래스 (추상 클래스) (0) | 2017.02.25 |
final 클래스/final 메소드 (0) | 2017.02.25 |
instance of 연산자 (0) | 2017.02.25 |