인터페이스 기본 메소드

HoJeong Choi·2024년 11월 18일
0

Java8

목록 보기
1/2

defalut 메소드

Spec

  • 인터페이스에서 구현제를 제공
  • Java8 이상 지원
  • 이 기능으로 많은 API 생성

사용

  • 키워드 : default 사용
  • @implSpec : JavaDoc 태그 추가 할것
    * why? 구현체가 알지 못하는 메소드임으로 RuntimeException 발생될 수 있으므로, 문서화 할것!
public Interface Person {
	void printNickName();
    
    /**
      * @impleSpec
      * getName()에 Person 를 붙여 출력한다.
      */
    default void printPerson() {
    	System.out.println(getName()+" Person");
    }
    
    String getName();
}
  • 구현체에서 재정의 가능
    * @Override 사용하여 재정의 가능
  • 상속받은 인터페이스에서 기본 구현체를 제공하고 싶지 않은 경우엔 default 메소드를 추상 메소드로 선언한다.
public Interface Friend extends Person{
	void printNickName();
    
    void printPerson() ;
    
    String getName();
}

다야몬드 problem

public Interface OnlyPerson {
    
    /**
      * @impleSpec
      * getName()에 Person 를 붙여 출력한다.
      */
    default void printPerson() {
    	System.out.println("person");
    }
    
}
  • default void printPerson()의 중복으로 컴파일 에러 발생

<수정>

  • default void printPerson() 를 재정의
public class defualtPerson implement Person, OnlyPerson{
    
    pubic void getPerson() {
    	printPerson()
    }
    
    @Override
    public void printNickName(){
    	...
    }
    
    pubic String getName(){
    	...
    }
    
}

Static 메소드

public Interface Person {
    ...
    /**
      * @impleSpec
      * getName()에 Person 를 붙여 출력한다.
      */
    default void printPerson() {
    	System.out.println("person");
    }
    
    static void printAddress() {
    	System.out.println("Address");	
    }
    
}
  • 사용
Person.printAddress();

0개의 댓글