디폴트 메서드

김진욱·2022년 11월 18일
0

java

목록 보기
12/13

디폴트 메서드

자바 8에서는 인터페이스에 기본 구현을 제공할 수 있도록 디폴트 메서드라는 기능을 제공한다. 기존 인터페이스를 구현하는 클래스는 자동으로 인터페이스에 추가된 새로운 메서드의 디폴트 메서드를 상속받게 된다. 이렇게 하면 기존의 코드 구현을 바꾸지 않아도 된다는 장점이 있다.

인터페이스는 다중 상속을 지원한다.

자바에서 클래스는 한 개의 다른 클래스를 상속할 수 있지만 인터페이스는 여러 개 구현할 수 있다.

  • 기능이 중복되지 않는 최소의 인터페이스
pulbic interface Rotatable {
	void setRotationAngle(int angleInDegrees);
    int getRotationAngle();
    default void rotateBy(int angleInDegrees) {
    	setRotationAngle((getRotationAngle () + angleInDegrees) % 360);
    }
}

위 인터페이스는 구현해야 할 다른 메서드에 따라 뼈대 알고리즘이 결정되는 템플릿 디자인 패턴과 비슷해 보인다.
Rotatable을 구현하는 모든 클래스는 setRotationAngle() 과 getRotationAngle의 구현을 하게 되면 rotateBy는 구현하지 않더라도 기본적으로 사용할 수 있게 된다.

인터페이스의 해석 규칙

  1. 클래스가 항상 이긴다. 클래스나 슈퍼클래스에서 정의한 메서드가 디폴트 메서드보다 우선권을 갖는다.
  2. 1번 규칙 이외의 상황에서는 서브인터페이스가 이긴다. 상속관계를 갖는 인터페이스에서 같은 시그니처를 갖는 메서드를 정의할 때는 서브인터페이스가 이긴다. 즉 B가 A를 상속받는다면 B가 A를 이긴다.
  3. 여전히 디폴트 메서드의 우선순위가 결정되지 않았다면 여러 인터페이스를 상속받는 클래스가 명시적으로 디폴트 메서드를 오버라이드하고 호출해야 한다.

위의 규칙을 쉽게 표현하자면 구체적일수록 우선순위를 갖는다이다. 스프링에서도 통용되는 규칙이다. 구체적일수록 우선순위를 갖는다를 기억하자.

0개의 댓글

관련 채용 정보