인터페이스
대상이되는 시스템을 제어하기위해 제어할때 사용하는 장치로, 추상 메서드의 집합.
오직 추상메서드와 상수, default 메서드, static 메서드만을 멤버로 가질수 있으며, 그 외의 다른 요소를 허용하지 않는다.
* 그래서 추상클래스보다 추상화 정도가 높음
- 인터페이스의 모든 멤버의 제어자는 외부에서 기능을 제어하기 위해 public이여야 한다 (외부 접근 허용을 위해)
- 모든 멤버변수는 public static final 이여야 하며, 해당 키워드 생략 가능
- 모든 메서드는 public abstract 이여야 하며, 해당 키워드 생략 가능
* 단 static메서드와 default 메서드는 예외
인터페이스 구현
인터페이스의 추상메서드를 완성하기 위해서는 클래스를 통해 구현할 수 있다.
- 인터페이스를 구현하는 클래스를 생성하여 해당 인터페이스의 멤버에 대한 동작을 완성한다.
인터페이스 상속
추상 클래스처럼 그 자체로 인스턴스를 생성할수 없고, 인터페이스로부터만 상속받을 수 있으며 다중 상속이 가능하다
* static 상수만 정의할 수 있으므로 조상클래스의 멤버변수와 충돌하는 경우는 거의 없고, 클래스 이름을 붙이면 구분이 가능
* 추상 매서드는 구현부가 완성되어 있지 않기 때문에 메서드의 이름이 같더라도 충돌 문제가 나지 않음
만일, 구현하는 인터페이스의 메서드 중에 일부만 구현한다면 abstract을 붙여서 추상 클래스로 선언하면된다.
상속과 구현을 동시에 하는 것도 가능하다
다형성
Fightable f = new Fighter();
Fightable f = (Fightable) new Fighter();
- 인터페이스를 참조변수로 구현한 클래스의 인트턴스를 참조 가능, 인터페이스 타입으로 형변환도 가능
* 따라서 메서드의 매개변수의 타입으로도 사용 가능하다
Fighterable method(){
Fighter f = new Fighter();
retrun f;
}
- 인터페이스를 메서드의 리턴타입으로 지정 가능
인터페이스 사용 이유
class B가 인터페이스를 구현하고 있고, class A가 인터페이스를 통해 class B의 요소에 접근하여 사용하고 있을때
인터페이스의 구현이 class B가 아닌 class C로 바뀌어도 class A는 변경하지 않아도 된다.
이는 변경에 유리한 객체 지향의 특징에 부합한다.
class InterfaceTest{
public static void main(String[] args){
A a = new A();
a.method(new B());
}
}
class A {
void method(I i){
i.methodB();
}
}
Interface I{
public abstract void methodB();
}
class B Implement I{
public void methodB(){
System.out.println("method B in class B");
}
}
장점
- 개발시간 단축
- 표준화
- 서로 관계없는 클래스들에게 관계 형성
- 독립적인 프로그래밍 가능
인터페이스 vs 추상 클래스
공통점: 추상 메서드르 가지고 있다.
차이점: 인터페이스는 iv, 생성자, 인스턴스 메서드를 가질수 없다.
'Language > Java' 카테고리의 다른 글
6.1 java.lang 패키지 (object 클래스) (0) | 2021.07.15 |
---|---|
5. 예외처리 (0) | 2021.07.14 |
4.6 객체 지향 프로그래밍 (다형성) (0) | 2021.07.09 |
4.5 객체 지향 프로그래밍 (제어자) (0) | 2021.07.09 |
4.4 객체 지향 프로그래밍 (상속, 오버라이딩) (0) | 2021.07.09 |