# Java 8에서의 interface 변화 자바 8이 나오면서 인터페이스가 변했다던데 무엇이 바뀌었나요?
## 목차 1. 인터페이스가 가질 수 있는 것들 2. 인터페이스의 구현 3. 타입변환 4. 인터페이스 상속 ## 인터페이스가 가질 수 있는 것들 ### 상수필드(public static final) ``` public interface Parent { public static final MAX_VALUE = 100; public static final MIN_VALUE = 0; } ``` ### 추상 메소드(public abstract) ``` public interface Parent { // 상수 필드 public static final MAX_VALUE = 100; public static final MIN_VALUE = 0; // 추상 메소드 public abstract void run(); } ``` ### 디폴트 메소드(public default) ``` public interface Parent { // 상수 필드 public static final MAX_VALUE = 100; public static final MIN_VALUE = 0; // 추상 메소드 public abstract void run(); // 디폴트 메소드 : 실행 내용까지 작성이 가능하다. public default void setState(boolean state) { if (state) { System.out.println("현재 상태는 정상입니다"); } else { System.out.println("현재 상태는 비정상입니다"); } } } ``` ### 정적 메소드(public static) ``` public interface Parent { // 상수 필드 public static final MAX_VALUE = 100; public static final MIN_VALUE = 0; // 추상 메소드 public abstract void run(); // 디폴트 메소드 : 실행 내용까지 작성이 가능하다. public default void setState(boolean state) { if (state) { System.out.println("현재 상태는 정상입니다"); } else { System.out.println("현재 상태는 비정상입니다"); } } // 정적 메소드 public static void change() { System.out.println("상태를 변경합니다."); } } ``` ## 인터페이스의 구현 ### 익명 구현 객체 사용 형식 ``` 인터페이스 변수 = new 인터페이스(){ // 인터페이스에 선언된 추상 메소드의 실제 메소드 선언 }; ``` 구현 예 ``` public class Example{ public static void main(String[] args){ Parent parent = new Parent(){ public void run(){ // 실제 구현 내용 } }; } } ``` ### 다중 인터페이스 구현 클래스 ``` public class Child implements Parent1, Parent2 { // Parent1에 선언된 추상 메소드의 실제 메소드 선언 및 구현 // Parent2에 선언된 추상 메소드의 실제 메소드 선언 및 구현 } ``` ## 타입 변환 ### 자동 타입 변환(Promotion) ``` // 인터페이스 변수 = new 구현체(); Car car = new Bus(); ``` ### 강제 타입 변환(Casting) ``` // 구현클래스 변수 = (구현클래스)인터페이스변수; Bus bus = (Bus)car; ``` ### 객체 타입 확인(instanceof) ``` if (car instanceof Bus) { Bus bus = (Bus) car; } ``` ## 인터페이스 상속 다중 상속 가능 ``` public interface 하위인터페이스 extends 상위인터페이스1, 상위인터페이스2 { /* 생략... */ } ``` ## 레퍼런스 + http://blog.eomdev.com/java/2016/03/30/default-method.html