요코하마맨

JAVA
자바의 인터페이스 디폴트메서드 static메서드
2020.03.13 03:32

인터페이스에서는 추상메서드만 선언할 수 있는데
JDK1.8부터는 디폴트메서드와 static메서드도 추가할 수 있다.

1. static메서드는 인스턴스와 관계없는 독립적인 메서드이기 때문에서 인터페이스에 추가하지 못할 이유가 없었다. 하지만 규칙을 단순화하기 위해서 인터페이스에는 추상메서드만 선언 할 수 있었다. 그래서 java.util.Collection인터페이스가 있는데 추상 메서드만 선언할 수 있는 원칙 때문에 static메서드를 Collection 클래스에 들어가게 되었다.

2. 인터페이스에 하나의 추상메서드를 추가하면 이 인터페이스를 구현한 모든 클래스에 새 메서드를 다시 구현해야할 것이다. 그래서 고안해낸게 디폴트메서드이다.
추상 메서드가 아니기 때문에 디폴트메서드가 추가되어도 해당 인터페이스를 구현한 클래스를 변경하지 않아도 된다. 디폴트역시 접근지시자는 public이며 생략가능하다.
void newMethod() -> default void newMethod() { } 
인터페이스에 디폴트메서드를 추가하면 조상클래스에 메서드를 추가 한 것과 같이 된다.

단 새로 추가된 디폴트 메서드가 기존에 메서드와 이름이 중복되는 경우가 있다.
1. 여러 인터페이스의 디폴트 메서드 간의 출돌
* 인터페이스를 구현한 클래스에서 디폴트메서드를 오버라이딩 해야한다.
2. 디폴트메서드와 조상클래스의 메서드간의 충돌
* 조상클래스의 메서드가 상속되고, 디폴트메서드는 무시된다.

인터페이스의 장점
1. 개발시간을 단축할 수 있다.
* 메서드를 호출하는 쪽에서 메서드의 내용에 관계없이 선언부만 알면 된다.
* 한 쪽에서 인터페이스를 구현하는 클래스를 작성하게 되면, 클래스가 작성될 때까지 기다리지 않고 양쪽에서 동시에 개발을 진행 할 수 있다.
2. 표준화가 가능하다.
* 프로젝트에 사용되는 기본 틀을 인터페이스로 작성 후 개발자들에게 인터페이스를 구현하여 작성하도록 함으로써 정형화된 프로그램의 개발이 가능하다.
3. 서로 관계없는 클래스들에게 관계를 맺어 줄 수 있다.
* 서로 상속관계가 아니고, 같은 조상클래스도 아닌 관계없는 클래스들에게 하나의 인터페이스를 공통적으로 구현함으로써 관계를 맺어 줄 수 있다.
4. 독립적인 프로그래밍이 가능하다.
* 클래스의 선언과 구현을 분리시킬 수 있기 때문에 실제 구현에 독립적인 프로그램을 작성하는 것이 가능하다.
* 클래스와 클래스간의 직접적인 관계


JAVA카테고리 다른 글
번호 제목 날짜 조회
70 자바의 익명클래스 03.13 329
71 자바의 인터페이스 03.13 365
72 자바의 인터페이스 디폴트메서드 static메서드 03.13 332
73 자바의 형식화 03.13 328
74 자바의 추상메서드 03.13 313