경주장

8주차 과제: 인터페이스 #8 상속, Default Method (~03.04) 본문

JAVA/whiteship_live-study

8주차 과제: 인터페이스 #8 상속, Default Method (~03.04)

달리는치타 2022. 2. 28. 13:13

✔️ 학습할 것 (필수)

 

  • 인터페이스 정의하는 방법
  • 인터페이스 구현하는 방법
  • 인터페이스 레퍼런스를 통해 구현체를 사용하는 방법
  • 인터페이스 상속
  • 인터페이스의 기본 메소드 (Default Method), 자바 8
  • 인터페이스의 static 메소드, 자바 8
  • 인터페이스의 private 메소드, 자바 9

Evolving Interfaces

인터페이스의 상속과 Default Method

 

두잇! 이라는 interface가 있습니다.

public interface DoIt {
   void doSomething(int i, double x);
   int doSomethingElse(String s);
}

 

DoIt 인터페이스에 새로운 기능을 추가하면서 DoIt 인터페이스를 구현한 다른 클래스에 에러를 일으키지 않으려면 어떤방법이 있을까요? 일단 아래의 메소드를 Dolt 인터페이스에 추가해 보겠습니다.

 boolean didItWork(int i, double x, String s);

=>

public interface DoIt {

   void doSomething(int i, double x);
   int doSomethingElse(String s);
   boolean didItWork(int i, double x, String s);
   
}

DoIt Interface에 직접적으로 새로운 메소드를 추가하면 DoIt 메소드를 구현한 클래스에서는 자신을 Abstract로 만들거나 구현되지 않은 새로운 메소드를 구현할 것을 요구합니다. 물론 두 방식으로도 에러를 해결 할 수 있지만 이번에 다루어볼 방식은 다른 방식입니다.

 

구현 되어있는 DoItImpl 클래스의 코드에 수정없이 DoIt에 새로운 기능을 추가하려면 어떻게 해야될까요? 두가지 방법이 있습니다.

인터페이스의 상속

클래스는 인터페이스를 구현합니다. (implements) 이때 클래스는 인터페이스의 추상 메소드를 모두 구현한 구체클래스 일 수도 있고 추상 메소드를 남겨둔 추상 클래스 일 수도 있습니다.

 

인터페이스는 인터페이스를 상속합니다. (extends) 

public interface DoItPlus extends DoIt {

   boolean didItWork(int i, double x, String s);
   
}

인터페이스의 상속을 통해 기능을 추가한 새로운 인터페이스인 DoItPlus를 손쉽게 구현할 수 있습니다.

 

Default Method (Java 8)

다른 방식은 새로운 Method를 Default Method로 구현하는 것입니다.

public interface DoIt {

   void doSomething(int i, double x);
   int doSomethingElse(String s);
   default boolean didItWork(int i, double x, String s) {
       // Method body 
   }
   
}

 일반적으로 우리는 Interface가 Abstract Method 만을 포함한다고 알고 있지만 Java 8 이후로 등장한 세가지 문법

에서는 메소드 바디가 인터페이스에 포함 되어야 합니다.

  • 인터페이스의 기본 메소드 (Default Method), 자바 8
  • 인터페이스의 static 메소드, 자바 8
  • 인터페이스의 private 메소드, 자바 9

 

 

@출처)

 

Evolving Interfaces (The Java™ Tutorials > Learning the Java Language > Interfaces and Inheritance)

The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer available. See Java Language Changes for a summary of updated

docs.oracle.com