극단적으로 동일한 목적 하에 동일한 기능을 수행하게끔 강제하는 것이 바로 인터페이스의 역할이자 개념이다.
조금더 유식하게 말하면 자바의 다형성을 극대화하여 개발코드 수정을 줄이고 프로그램 유지보수성을 높이기 위해 인터페이스를 사용한다
인터페이스란? 극단적으로 동일한 목적 하에 동일한 기능을 보장하게 하기 위함
어떻게? 자바의 다형성을 이용하여 개발코드 수정을 줄이고 유지보수성을 높인다
public interface 인터페이스명 {
//상수
타입 상수명 = 값;
//추상 메소드
타입 메소드명(매개변수, ... );
//디폴트 메소드
default 타입 메소드명(매개변수, ... ){
//구현부
}
//정적 메소드
static 타입 메소드명(매개변수) {
//구현부
}
}
상수 : 인터페이스에서 값을 정해줄테니 함부러 바꾸지 말고 제공해주는 값만 참조해라(절대적)
추상메소드 : 가이드만 줄테니 추상메소드를 오버라이팅해서 재구현해라(강제적)
디폴트메소드 : 인터페이스에서 기본적으로 제공해주지만 맘에 안들면 각자 구현해서 써라(선택적)
정적메소드 : 인터페이스에서 제공해주는 것으로 무조건 사용(절대적)
public interface Bank {
//상수 (최대 고객에게 인출해 줄 수 있는 금액 명시)
public int MAX_INTEGER = 10000000;
//추상메소드(인출하는 메소드)
void withDraw(int price);
//추상메소드(입금하는 메소드)
void deposit(int price);
//JAVA8에서 가능한 defualt 메소드(고객의 휴면계좌 찾아주는 메소드 : 필수구현은 선택사항)
default String findDormancyAccount(String custId){
System.out.println("**금융개정법안 00이후 고객의 휴면계좌 찾아주기 운동**");
System.out.println("**금융결제원에서 제공하는 로직**");
return "00은행 000-000-0000-00";
}
//JAVA8에서 가능한 정적 메소드(블록체인 인증을 요청하는 메소드)
static void BCAuth(String bankName){
System.out.println(bankName+" 에서 블록체인 인증을 요청합니다.");
System.out.println("전 금융사 공통 블록체인 로직 수행");
}
}
인터페이스는 추상메소드와 상수를 통해 강력한 강제성을 가지게하여 인터페이스를 implements한 클래스가 동일한 동작을 수행하도록 보장한다.
또 java8 부터 디폴트 메소드를 허용하면서 추가요건에 대한 대처를 할 수 있도록 유연성을 확보해주었다.