인터페이스의 장점
- 두 대상(객체)간의 연결, 대화, 소통을 돕는 중간 역할을 한다. (ex윈도우)
- 선언과 구현을 분리 (변경에 유리한 유연한 설계)
- 개발시간을 단축한다.
- 표준화가 가능하다. (JDBC)
- 서로 관계없는 클래스들을 관계를 맺어줄 수 있다.
클래스 B 를 인터페이스 사용해서 나타내기
class B {
public void method() {
System.out.println("methodB");
}
}
interface I {
public void method();
}
위의 코드를 보면 메서드를 멤버로 받는 새로운 인터페이스를 선언한다. 추상메서드로 만들어 선언부(껍데기)만 떼어낸다.
class B inplements I {
public void method() {
System.out.println("methodInB");
}
}
B클래스가 인터페이스를 구현하도록 한다.
인터페이스를 구현하지 않은 코드는 변경에 유연하지 않다. 껍데기와 알갱이가 같이 있는 형태이다.
A가 B를 사용하려고 한다. (A가 B를 의존)
그림과 같이 A가 B를 의존하고 있는 관계에서 B를 사용하지 않고 C클래스를 만든다고 하면 A의 코드를 다시 변경해야 한다.
중간에 인터페이스가 끼게 되면 A클래스는 I 인터페이스만 관계가 되고 B클래스가 바뀌어도 영향을 받지 않는다.
즉 B라는 클래스는 껍데기인 I 인터페이스를 사용하기 때문에 껍데기를 바꿔서 사용을 하는 것이 가능하다.
인터페이스 디폴트메서드
인터페이스에 새로운 메서드(추상메서드)를 추가하기 어려움
해결책 => 디폴트 메서드(default method)
디폴트 메서드는 인스턴스 메서드(인터페이스 원칙위반)
interface Myinterface {
void method();
void newMethod(); //추상메서드
}
interface Myinterface{
void method();
default void newMethod() {}
}
- 디폴트 메서드가 기존의 메서드와 충돌할 때의 해결책
1. 여러 인터페이스의 디폴트 메서드 간의 충돌
- 인터페이스를 구현한 클래스에서 디플트 메서드를 오버라이딩해야 한다.
2. 디폴트 메서드와 조상클래스의 메서드 간의충돌
- 조상 클래스의 메서드가 상속되고, 디폴트 메서드가 무시된다.
'객체지향' 카테고리의 다른 글
참조변수의 형변환 (0) | 2021.11.08 |
---|---|
다형성 (0) | 2021.11.08 |
[상속] 제어자, static , final (0) | 2021.11.06 |
[상속] 참조변수 super, 생성자 super() (0) | 2021.11.05 |
[상속] 오버라이딩 (0) | 2021.11.05 |