본문 바로가기
Java

인터페이스의 default, static 키워드(Java8)

by BAYABA 2021. 10. 5.
  1. 개인공부 목적으로 작성한 글입니다.
  2. 아래 출처를 참고하여 작성하였습니다.

목차

  1. Intro
  2. default 키워드
    2-1. 샘플 코드
  3. static 메소드
    3-1. 샘플 코드

1. Intro

  1. Java에서 기존의 인터페이스는 상수와 추상 메소드만을 멤버로 가질 수 있었습니다.
  2. 그러나 Java8부터는 default 키워드를 사용해서 인터페이스에 메소드를 선언할 수 있게 되었습니다.
  • 즉, default 키워드를 사용해 선언함으로써 인터페이스에 메소드의 구현부를 작성할 수 있게 되었습니다.
  1. 또한 Java8부터 인터페이스에 static 메소드를 선언할 수 있게 되었습니다.

2. default 키워드


2-1. 샘플 코드


인터페이스

public interface Calculator {

    int add(int x, int y);

    int sub(int x, int y);

    default int multiple(int x, int y) {
        return x * y;
    }
}

구현체

  1. CalculatorImpl 구현체에서 multiple 메서드를 구현하지 않았지만, 인터페이스에 default 키워드로 구현이 되어있기 때문에 컴파일 오류가 나지 않고, 호출해서 사용할 수 있습니다.
  2. 주의할 점은 다중상속을 받을 경우 인터페이스 default 메소드 간에 Method 시그니처가 겹친다면 컴파일 에러가 납니다.
  • 해결 방법은 인터페이스 간 겹치는 default Method를 구현체에서 오버라이딩하면 됩니다.
public class CalculatorImpl implements Calculator {

    @Override
    public int add(int x, int y) {
        return x + y;
    }

    @Override
    public int sub(int x, int y) {
        return x - y;
    }
}

public class Main {

    public static void main(String[] args) {
        Calculator calc = new CalculatorImpl();

        int x = 5;
        int y = 3;

        int resultOfAdd = calc.add(x, y);
        int resultOfSub = calc.sub(x, y);
        int resultOfMultiple = calc.multiple(x, y);
        System.out.println(resultOfAdd);
        System.out.println(resultOfSub);
        System.out.println(resultOfMultiple);
    }

}

//실행 결과
//8
//2
//15

3. static 메소드

  1. Java8부터 인터페이스에 static 메소드를 선언할 수 있습니다.
  • 단, static 메소드는 구현체에서 오버라이딩 할 수 없습니다.
public interface Calculator {

    int add(int x, int y);

    int sub(int x, int y);

    default int multiple(int x, int y) {
        return x * y;
    }

    static void print(int value) {
        System.out.println(value);
    }
}

3-1. 샘플 코드

  1. static 메소드 사용시 주의할 점은, 아래 코드처럼 '인터페이스이름.메소드' 형태로 호출해야 합니다.
public class Main {

    public static void main(String[] args) {
        Calculator calc = new CalculatorImpl();

        int x = 5;
        int y = 3;

        int resultOfAdd = calc.add(x, y);
        int resultOfSub = calc.sub(x, y);
        int resultOfMultiple = calc.multiple(x, y);
        Calculator.print(resultOfAdd);
        Calculator.print(resultOfSub);
        Calculator.print(resultOfMultiple);
    }
}

//실행 결과
//8
//2
//15

출처

  1. JAVA 8 변경 사항 - interface의 default 키워드와 static 메소드

'Java' 카테고리의 다른 글

yyyy vs YYYY  (0) 2021.10.26
LocalDate to LocalDateTime  (0) 2021.10.25
Enum  (0) 2021.10.19