반응형

이번에는 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;

 

상수를 선언할 수도 있는데 이 경우에는 고정값으로 절대 변경할 수 없습니다.

반응형