인터페이스
인터페이스란?
- 클래스들이 구현해야 하는 동작을 지정하는데 사용되는 추상 자료형
- 인터페이스를 지정함으로써 해당 클래스가 어떤 역할을 하고 어떤 구현을 해야할지 알 수 있다.
인터페이스의 요소
- 상수 : 인터페이스에서 지정한 값
- 추상 메서드: 구현해야될 메서드 ( 해당 인터페이스의 역할 )
- 디폴트 메서드: 인터페이스에서 기본 제공되는 메서드 ( 오버라이딩 가능 )
- 정적 메서드: 인터페이스에 제공하는 메서드 ( 오버라이딩 불가능 )
public interface Calc {
/* 상수 */
dobule PI = 3.14;
/* 추상 메서드 */
int add(int num1, int num2);
/* 디폴트 메서드 */
default void display(int num1, int num2) {
System.out.println(num1 + "\t" + num2);
}
/* 정적 메서드 */
static void showInfo() {
System.out.println("This is calc");
}
}
인터페이스의 역할은?
- 인터페이스는 클라이언트 프로그램에 어떤 메서드를 제공하는지 알려주는 명세(specification) 또는 약속
- 한 객체가 어떤 인터페이스의 타입이라 함은 그 인터페이스의 메서드를 구현했다는 의미
- 클라이언트 프로그램은 실제 구현내용을 몰라도 인터페이스의 정의만 알면 그 객체를 사용할 수 있음
- 인터페이스를 구현해 놓은 다양한 객체를 사용함 - 다형셩
인터페이스와 strategy pattern
- 인터페이스를 활용하면 다양한 정책이나 알고리즘을 프로그램의 큰 수정 없이 적용, 확장할 수 있음
- 아래와 같이 Sort 인터페이스를 만들었을 경우 인터페이스를 활용하여 원하는 정렬으로 자유자재로 바꿀 수 있다.
public interface Sort {
public List<T> sort(List<T> list);
}
/* 전략 1 버블 정렬 */
pulbic class BubbbleSort implements Sorting {
@Override
public List<T> sort(List<T> list)l {
// bublesort 로직
...
return list
}
}
/* 전략 2 퀵 정렬 */
pulbic class QuickSort implements Sorting {
@Override
public List<T> sort(List<T> list)l {
// bublesort 로직
...
return list
}
}
/* 전략 3 힙 정렬 */
pulbic class HeapSort implements Sorting {
@Override
public List<T> sort(List<T> list)l {
// bublesort 로직
...
return list
}
}