개발자의 서재
[java8] 인터페이스의 변화 - 인터페이스 기본메소드, 스태틱메소드 본문
package com.kevin.java8.interfacemethod;
public interface Foo {
void printName();
String getName();
//* 디폴트 메소드.
//기존에는 인터페이스에 메소드를 추가하면 해당 인터페이스를 구현하는
//모든 클래스에 컴파일에러가 생김. (추가한 메소드를 구현클래스에도 모두 만들어줘야함)
//하지만 인터페이스 메소드앞에 default 를 달아주면, 컴파일에러없이 인터페이스에 내용이 있는 메소드 추가 가능.
//디폴트 메소드도 일반 인터페이스 메소드처럼 구현체에서 오버라이딩 해서 재정의 가능하다.
default void printNameUpperCase(){
System.out.println(getName().toUpperCase());
}
//* static 메소드
//인터페이스에 스태틱 메소드로 추가하는 경우도 구현클래스들에 메소드 추가하지 않아도됨.
//스태틱 메소드는 구현클래스의 인스턴스를 생성할 필요없이 바로 사용가능함.
static void printAnything(){
System.out.println("Anything");
}
}
package com.kevin.java8.interfacemethod;
public class DefaultFoo implements Foo {
String name;
public DefaultFoo(String name){
this.name = name;
}
@Override
public void printName() {
System.out.println("name");
}
@Override
public String getName(){
return this.name;
}
}
package com.kevin.java8.interfacemethod;
public class App {
public static void main(String[] args) {
Foo foo = new DefaultFoo("leesh");
//구현클래스의 Overriding 된 메소드 사용
foo.printName(); //name
//인터페이스의 디폴트 메소드 사용
foo.printNameUpperCase(); //LEESH
//인터페이스의 스태틱 메소드 사용
Foo.printAnything(); // Anything
}
}
'JAVA' 카테고리의 다른 글
[java8]Stream - Stream 소개 (0) | 2022.06.23 |
---|---|
[java8] 인터페이스의 변화 - 자바 8 API의 기본 메소드와 스태틱 메소드(foreach, removeIf, sort(comparator) (0) | 2022.06.20 |
[java8] 함수형 인터페이스와 람다 - 메소드 레퍼런스 (0) | 2022.06.13 |
[java8] 함수형 인터페이스와 람다 (0) | 2022.06.13 |
[java8]새로운 날짜와 시간 API (0) | 2022.06.13 |
Comments