인터페이스
- 모든 메서드가 추상 메서드로 선언됨
- 모든 변수는 상수로 선언됨
- 자바 8 부터 디폴트 메서드(default method)와 정적 메서드(static method) 기능의 제공으로 일부 구현 코드가 있음
- default 메서드 : 구현을 가지는 메서드, 인터페이스를 구현하는 클래스들에서 공통으로 사용할 수 있는 기본 메서드, 재정의 가능
- static 메서드 : 인스턴스 생성과 상관 없이 인터페이스 타입으로 사용할 수 있는 메서드
- private 메서드 (자바9 이후) :
인터페이스를 활용한 다형성 구현 (dao 구현하기)
인터페이스를 활용한 다형성 구현(dao 구현하기)
인터페이스 default, static, private 메서드 예시
![](https://velog.velcdn.com/images/frost_12/post/5274cbaa-614a-4993-a1ec-a08f8771d299/image.png)
Calc.java
public interface Calc {
double PI = 3.14;
int ERROR = -99999999;
int add(int num1, int num2);
int substract(int num1, int num2);
int times(int num1, int num2);
int divide(int num1, int num2);
default void description() {
myMethod();
mystaticMethod();
System.out.println("정수를 계산합니다. ");
}
private void myMethod() {
System.out.println("private method");
}
static int total(int[] arr) {
mystaticMethod();
int total = 0;
for (int i : arr) {
total += i;
}
return total;
}
private static void mystaticMethod() {
System.out.println("private static method");
}
}
Calculator.java
public abstract class Calculator implements Calc {
@Override
public int add(int num1, int num2) {
return num1 + num2;
}
@Override
public int substract(int num1, int num2) {
return num1 - num2;
}
}
CompleteCalc.java
public class CompleteCalc extends Calculator {
@Override
public int times(int num1, int num2) {
return num1 * num2;
}
@Override
public int divide(int num1, int num2) {
return num1 / num2;
}
}
CalculatorTest.java
public class CalculatorTest {
public static void main(String[] args) {
Calc calc = new CompleteCalc();
int num1 = 10;
int num2 = 2;
System.out.println(num1 + "+" + num2 + " = " + calc.add(num1, num2));
System.out.println(num1 + "-" + num2 + " = " + calc.substract(num1, num2));
System.out.println(num1 + "*" + num2 + " = " + calc.times(num1, num2));
System.out.println(num1 + "/" + num2 + " = " + calc.divide(num1, num2));
calc.description();
int[] arr = { 1, 2, 3, 4, 5 };
int total = Calc.total(arr);
System.out.println(total);
}
}
결과
![](https://velog.velcdn.com/images/frost_12/post/ec9dd3ff-e370-45e3-85f4-e3b696f74966/image.png)