👀 전체 정리 : https://dev-eunse.tistory.com/97
Interface : class와 비슷한 성격을 가지고 있음. 즉,모든 메소드를 그룹화함(근데 다름)
- 기본 메소드가 {} 없음(public) - public 안에는 문법 작성 x,인자값은 작성해야함
- default란 interface에서 유일하게 기본메소드를 활용할 수 있는 선언문,default를 붙여야 {}사용 가능
- ⭐ default메소드는 사용해도되고 안해도 됨,public은 필수
- private,protected 사용불가(default,public 가능),static 메소드 또한 사용 가능함(메소드 안에 문법 작성 가능)
- 무조건 별도 파일
- interface를 직접 class파일에 사용하지 못함(로드를 활용해서 사용해야함)
- interface는 즉시실행은 없음
abstract와 interface의 차이
* abstract는 써도 되고 안써도 되고,활용가능 / interface는 쓰라는데로 써야함(찍어내듯이 뭔가를 만들어낼때)
* abstract는 한개만 / interface는 한개 이상 .java 파일을 로드 할 수 있다
->한개만 쓸거면 굳이 interface 쓸 필요 x
* 즉시실행 메소드가 없다
로드방식
class op7_box implements inter1 {
@Override
메소드{}
}
⚡ interface(inter1,inter2 연계)package oop2; public class oop_class7 { public static void main(String[] args) { op7_box op = new op7_box(); op.point(); } } //interface를 직접 class파일에 사용하지 못함(로드를 활용해서 사용해야함) //public interface inter2{ // //} // abstract와 interface의 차이 : // abstract는 써도 되고 안써도 되고,활용가능/interface는 쓰라는데로 써야함(찍어내듯이 뭔가를 만들어낼때) class op7_box implements inter1,inter2_2 { //interface에 extends를 적용해서 가져옴(inter2.java) //--inter2 메소드 @Override public void money() { //필수(public, inter2 로드시) } //--inter2_2 메소드 @Override public void point() { //필수(public) System.out.println(this.p); } //-- inter1 메소드 //default메소드는 사용해도되고 안해도 됨,public은 필수 @Override //abstract와 동일하게 사용한다. public String names() { // TODO Auto-generated method stub return null; } @Override public void setbox(String id) { //super도 동일하게 사용된다. inter1.super.setbox(id); } @Override public Integer age() { // TODO Auto-generated method stub return null; } };
🔽 inter1.javapackage oop2; //interface public interface inter1 { public String names(); //기본 메소드가 {} 없음 public Integer age(); //private,protected 사용불가 //default란 interface에서 유일하게 기본메소드를 활용할 수 있는 선언문 //setter default void setbox(String id) { //default를 붙여야 {}사용 가능! }; //getter default String getbox() { return null; }; }
🔽 inter2.javapackage oop2; public interface inter2 { //public inter2(); interface는 즉시실행은 없음 public String data[] = {"유재석","강호동","신동엽","정상훈","아이유"}; public void money(); } //기존 내용 외에 추가적인 메소드 및 전역변수 자료형이 있을 경우 //기존 interface를 로드 후 추가 옵션코드를 작성함 interface inter2_2 extends inter2{ Integer p = 1000; public void point(); @Override default void money() { //써도 되고 안써도 됨 } } /* [핵심] 1. extends로 interface를 로드시 기존에 있는 메소드를 default 변경 유/무 선택 2. 새로운 메소드를 생성시 implements를 한 class에 추가 메소드를 오버라이드 해야함 3. 즉시실행되는 메소드는 없음! */
⚡ inter3,inter4 연계작업(은행)
동일한 이름을 가진 변수가 두개 이상일 경우 : this는 사용불가 / 한개면 this 잘 먹힘
❗❗❗❗ [중요] interface에서 만들어진 전역변수는 모두 final(상수) - 값을 가져올순 있지만 변경은 x
//중복된 코드가 너무 많음..이건 걍 예제일뿐.. 실무에서도 이렇게 하면 안됨.. package oop2; import java.util.Scanner; //inter3,inter4 연계작업(은행) public class bank { public static void main(String[] args) { allbank ab = new allbank(); Scanner sc = new Scanner(System.in); System.out.println("1.국민은행, 2.신한은행 / 은행을 선택해 주세요 : "); Integer bankno = sc.nextInt(); switch(bankno) { case 1: //국민 inter3 ab.KB_bank(); break; case 2: //신한 inter4 ab.SH_bank(); break; default: System.out.println("해당 은행코드는 존재하지 않습니다."); break; } sc.close(); } } class allbank implements inter3,inter4 { Scanner sc2 = new Scanner(System.in); String userpass = ""; //사용자가 입력한 비밀번호 받는 변수 String part = ""; //입금,출금을 구분하기 위한 변수 Integer usermoney = 0; //입금,출금 사용자가 입력한 금액 저장 변수 Integer money = 0; //은행의 최종 잔여금액 변수 public allbank() { //즉시실행메소드 this.money = inter3.money; //동일한 이름을 가진 변수가 두개 이상일 경우 : this는 x / 한개면 this 잘 먹힘 //System.out.println(this.money); //System.out.println(inter3.bankname); } @Override public void SH_bank() { //inter4 신한, 수수료필요 System.out.printf("%s은행 패스워드 입력 : %n",inter4.bankname); this.userpass = this.sc2.nextLine(); if(this.userpass.equals(inter4.password)) { System.out.println("1.입금 , 2.출금 : "); this.part = sc2.nextLine(); //출금만..ㅎ if(this.part.equals("2")) { System.out.println("출금 금액을 입력해주세요 : "); this.usermoney = sc2.nextInt(); sc2.close(); this.out_money(true); //출금시 수수료 적용 } }else { System.out.println("계좌 비밀번호가 틀립니다"); } } @Override public void KB_bank() { //inter3 국민, 수수료필요x System.out.printf("%s은행 패스워드 입력 : %n",inter3.bankname); this.userpass = this.sc2.nextLine(); if(this.userpass.equals(inter3.password)) { System.out.println("1.입금 , 2.출금 : "); this.part = sc2.nextLine(); //출금만..ㅎ if(this.part.equals("2")) { System.out.println("출금 금액을 입력해주세요 : "); this.usermoney = sc2.nextInt(); sc2.close(); this.out_money(false); //출금시 수수료 적용x } }else { System.out.println("계좌 비밀번호가 틀립니다"); } } //입금,출금처리 메소드(return 메소드) public Integer in_money() { //입금 //입금은 알아서.. return 0; } public Integer out_money(boolean z) { //출금(수수료 발생) if(z == true) { //수수료 있음(신한) this.money = this.money - (this.usermoney + inter4.cg); System.out.println("최종 금액은 : " + this.money); }else { //수수료 없음(국민) this.money = this.money - this.usermoney; System.out.println("최종 금액은 : " + this.money); } return 0; } }
🔽 inter3.javapackage oop2; //static 메소드 또한 사용 가능함(메소드 안에 문법 작성 가능) /* [중요] interface에서 만들어진 전역변수는 모두 final(상수) - 값을 가져올순 있지만 변경은 x */ public interface inter3 { static Integer money = 100000; //입금 완료된 금액 public void KB_bank(); //국민은행 String password = "1234"; //국민계좌 비밀번호 String bankname = "국민"; }
🔽 inter4.javapackage oop2; public interface inter4 { public void SH_bank(); //신한은행 String password = "5678"; //신한 계좌 비밀번호 String bankname = "신한"; Integer cg = 1300; //수수료 }
'CLASS > JAVA' 카테고리의 다른 글
#11-1 / Exception : 예외처리 (0) | 2024.05.16 |
---|---|
#10-2 / 단어 검토 및 변경(정규식 코드) (0) | 2024.05.14 |
#9-3 / class + class (0) | 2024.05.13 |
#9-2 / abstract(추상 클래스) (0) | 2024.05.13 |
#9-1 / 배열에 해당 클래스를 로드하여 적용하는 방법(DTO),protected (0) | 2024.05.13 |