JAVA_40_인터페이스의 장점, 디폴트메소드, static메소드

charl hi·2021년 8월 31일
0

JAVA

목록 보기
40/53

인터페이스의 장점

  • 두 대상(객체) 간의 연결, 대화, 소통을 돕는 중간역할을 한다.

  • 자판기의 껍데기! 컴퓨터의 GUI!

  • 선언(설계, 껍데기)과 구현(알맹이)을 분리

  • 느슨한 결합 : 인터페이스 덕분에 B가 변경되어도 A는 바꾸지 않아도 된다.

  • 개발시간 단축

  • 변경에 유리한 유연한 설계

  • 표준화 가능 - JDBC 자바 인터페이스 집합

  • 서로 관계없는 클래스들을 관계 맺기



class A{	//다른 클래스의 메소드 호출
	public void method(I b) {	//인터페이스 I 구현한 객체B, C만 들어갈 수 있음!!!
		b.method();
	}
}
//껍데기
interface I{
	void method();
}
//알맹이
class B implements I{
	public void method() {
		System.out.println("B메소드 호출");
	}
}

class C implements I{
	public void method() {
		System.out.println("C메소드 호출");
	}
}


public class InterfaceTest {

	public static void main(String[] args) {
		A a = new A();
		a.method(new B());	//A가 B, C를 사용(A가 B, C에 의존)
		a.method(new C());
	}

}

B메소드 호출
C메소드 호출


인터페이스의 디폴트메소드, static메소드

  • 인터페이스에 새로운 메소드(추상메소드)를 추가하기 어려움
    :
    • 추상메소드를 추가하면, 구현 클래스에도 구체화한 메소드를 추가해야 한다. 번거로움!!
    • -> 해결책 : 디폴트 메소드 default
  • 디폴트메소드는 인스턴스메소드 <- 인터페이스 규칙 위반

interface MyInterface{
	void method();	//추상
    	default void newMethod() {}
        //이런식으로 생략하면 안됨
}

디폴트메소드가 기존의 메소드와 충돌 시 해결책

  • 여러 인터페이스의 디폴트메소드 간의 충돌
    -> 인터페이스 구현 클래스에서 디폴트메소드를 오버라이딩

  • 디폴트메소드와 조상클래스의 메소드 간의 충돌
    -> 조상클래스의 메소드가 상속되고, 디폴트메소드는 무시

  • 그냥 우리가 직접 오버라이딩하면 된다! 😉




Ref

0개의 댓글

관련 채용 정보