반응형
이번에는 interface에 쓰이는 default와 고정상수에 대해서 알아보겠습니다.
코드는 어디서 가져온 거라 꽤 긴데 중요한 부분만 이야기하겠습니다.
package interface_exam2;
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";
}
}
package interface_exam2;
public class KBBank implements Bank{
@Override
public void withDraw(int price) {
System.out.print("KB은행만의 인출 로직...");
if(price < Bank.MAX_INTEGER){
System.out.println(price+" 원을 인출한다.");
}else{
System.out.println(price+" 원을 인출실패.");
}
}
@Override
public void deposit(int price) {
System.out.println("KB은행만의 입금 로직..."+price+" 원을 입금한다.");
}
}
package interface_exam2;
public class SHBank implements Bank{
@Override
public void withDraw(int price) {
System.out.println("SH은행만의 인출 로직...");
if(price < Bank.MAX_INTEGER){
System.out.println(price+" 원을 인출한다.");
}else{
System.out.println(price+" 원을 인출실패.");
}
}
@Override
public void deposit(int price) {
System.out.println("SH은행만의 입금 로직..."+price+" 원을 입금한다.");
System.out.println("SH은행은 별도의 후행처리 작업을 따로 한다.");
}
//JAVA8에서 가능한 defualt 메소드(고객의 휴면계좌 찾아주는 메소드)
// 디폴트메소드 : 인터페이스에서 기본적으로 제공해주지만, 맘에 안들면 각자 구현해서 써라. (선택적)
@Override
public String findDormancyAccount(String custId){
System.out.println("**금융개정법안 00이후 고객의 휴면계좌 찾아주기 운동**");
System.out.println("*SH은행만의 로직 적용*");
return "00은행 000-000-0000-00";
}
}
package interface_exam2;
public class Main {
public static void main(String[] args)
{
Bank bank = new KBBank();
bank.withDraw(100);
bank.deposit(100);
bank.findDormancyAccount("763231");
System.out.println("\n*************인스턴스 교체!!***************\n");
bank = new SHBank();
bank.withDraw(100);
bank.deposit(100);
bank.findDormancyAccount("4311");
/*
* public class KakaoBank{
public void kakaoWithDraw(int price) {
System.out.print("Kakao은행만의 인출 로직...");
System.out.println(price+" 원을 인출한다.");
}
public void kakaoDeposit(int price) {
System.out.println("Kakao은행만의 입금 로직..."+price+" 원을 입금한다.");
}
public void kakaoFindDormancyAccount(){
System.out.println("kakao은행만의 휴면계좌 찾아주기 로직");
}
}
*/
// 마지막으로 아래 신규 인터넷 은행사 카카오뱅크 코드를 보자. 위 코드에서 볼 수 있듯이
// 카카오뱅크는 인터페이스를 implements를 하지 않은 채 자신만의 메소드를 구현했다.
// 어떤 문제점이 있을까? 당연...금융결제원에서 제공해주는 그 어떠한 서비스도 사용할 수 없으며
// 호환성이 없으며 연동이 불가할 것이다.
}
}
default String findDormancyAccount(String custId){
System.out.println("**금융개정법안 00이후 고객의 휴면계좌 찾아주기 운동**");
System.out.println("**금융결제원에서 제공하는 로직**");
return "00은행 000-000-0000-00";
}
여기서 default로 설정하고 interface에다 추상메소드를 만든 경우 필수구현이 아니라 선택사항이 됩니다.
여기서 interface를 쓰는 이유중 하나가 또 나오는데 안 쓰고 만들어도 무방한데 금융결제원에서 제공해주는
어떤 서비스도 사용할 수 없으면 호환성이 없고 연동이 불가능하게 됩니다.
이렇게 interface를 제공해주면 쉽게 프로그램을 개발할 수 있게 해주죠
public int MAX_INTEGER = 10000000;
상수를 선언할 수도 있는데 이 경우에는 고정값으로 절대 변경할 수 없습니다.
반응형