ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 메서드 ATM ||오버로딩 || this.
    과거⚰️ 2020. 12. 11. 18:13

    오버 로딩(over loading)

    한 클래스 내에 같은 이름으로 다른 종류의 인자를 받는 메서드를 만드는 것이다.

    이름은 같아야하고 매개변수의 순서 타입 개수가 달라야 한다.

    오버 라이드와 이름은 비슷하지만 다름 헷갈리지 않게 주의

    package Day052;
    
    import java.util.Scanner;
    
    /*
     * # 영수증 출력하기 : 클래스[변수]
     * 1. 햄버거 주문을 받아 영수증을 출력한다.
     * 2. 출력내용은 각 메뉴의 주문 수량과 총 금액 및 잔돈을 표시한다.
     */
    
    class BurgerShop{
    
        Scanner scan = new Scanner(System.in);
    
        String name = "";		// 가게 이름
        int[] arPrice   = {    2500,       3800,     1500,  1000};
        String[] arMenu = {"치즈버거", "불고기버거", "감자튀김", "콜      라"};
        int[] arCount = new int[4];
        int total = 0;
    
        void showMeu() {
            System.out.println("===== " + name + " =====");
            for(int i=0; i<arMenu.length; i++) {
                System.out.println((i+1) + "." + arMenu[i] + ": " + arPrice[i] + "원");
            }
            System.out.println("5.종료하기");
        }
    
        void select1() { arCount[0] += 1; }
        void select2() { arCount[1] += 1; }
        void select3() { arCount[2] += 1; }
        void select4() { arCount[3] += 1; }
    
        void getReceipt() {
            System.out.println("===== 영수증 =====");
            for(int i=0; i<arMenu.length; i++) {
                System.out.println((i + 1) + "." + arMenu[i] + ": " + arCount[i] + "개");
                total += arPrice[i] * arCount[i];
            }
            System.out.println("총 금액 : " + total + "원");
        }
    
        void run() {
            while(true) {
                // 메뉴 출력
                showMeu();
    
                // 메뉴 선택
                System.out.print("메뉴를 선택하세요 : ");
                int choice = scan.nextInt();
    
                // 치즈버거
                if(choice == 1) { select1(); }
                // 불고기버거
                else if(choice == 2) { select2(); }
                // 감자튀김
                else if(choice == 3) { select3(); }
                // 콜라
                else if(choice == 4) { select4(); }
                // 종료 및 영수증 출력
                else if(choice == 5) {
                    getReceipt();
                    break;
                }
            }
        }
    }
    
    public class Day05209메서드영수증출력 {
        public static void main(String[] args) {
    
            BurgerShop moms = new BurgerShop();
            moms.name = "맘츠터치 햄버거";
    
            moms.run();
    
        }
    }
    
    
    package Day052;
    
    import java.util.Scanner;
    
    //# ATM
    
    class Bank{
    
        Scanner scan = new Scanner(System.in);
    
        String name = "";
    
        String[] arAcc = {"1111", "2222", "3333", "", ""};
        String[] arPw  = {"1234", "2345", "3456", "", ""};
        int[] arMoney  = {87000, 34000, 17500, 0, 0};
    
        int count = 3;
    
        // 로그아웃(-1)
        int loginCheck = 2;			// 3333 로그인 중
    
        void showMember() {
            for(int i=0; i<count; i++) {
                System.out.println(arAcc[i] + " : " + arPw[i] + " : " + arMoney[i] + "원");
            }
        }
    
        void showMenu() {
            System.out.print("# 로그인 상태 : ");
            if(loginCheck == -1){
                System.out.println("로그아웃");
            }else {
                System.out.println(arAcc[loginCheck] + "님, 로그인 중...");
            }
    
            System.out.println("=== " + name + " ===");
            System.out.println("1.회원가입");
            System.out.println("2.회원탈퇴");
            System.out.println("3.로그인");
            System.out.println("4.로그아웃");
            System.out.println("5.입금하기");
            System.out.println("6.이체하기");
        }
    
        int checkAcc(String myAcc) {
    
            int check = 1;
            for(int i=0; i<count; i++) {
                if(arAcc[i].equals(myAcc)) {
                    check = -1;
                }
            }
            return check;
        }
    
        int checkPw(int accCheck) {
            System.out.print("비밀번호를 입력하세요 : ");
            String myPw = scan.next();
    
            int pwCheck = -1;
    
            if(arPw[accCheck].equals(myPw)) {
                pwCheck = 1;
            }
    
            return pwCheck;
        }
    
        int checkAcc() {
    
            System.out.print("탈퇴할 계좌번호를 입력하세요 : ");
            String myAcc = scan.next();
    
            int accCheck = -1;
            for(int i=0; i<count; i++) {
                if(arAcc[i].equals(myAcc)) {
                    accCheck = i;
                }
            }
            return accCheck;
        }
    
        void delMember() {
    
            // 회원탈퇴 제약조건
            if(count == 0) {
                System.out.println("탈퇴할 회원정보가 없습니다.");
                return;
            }
    
            // 계좌번호 유효성 검사
            int accCheck = checkAcc();
    
            if(accCheck != -1) {
                // 비밀번호 유효성 검사
                int pwCheck = checkPw(accCheck);
                if(pwCheck == -1) {
                    System.out.println("비밀번호를 잘 못 입력했습니다.");
                }else {
                    for(int i=accCheck; i<count - 1; i++) {
                        arAcc[i] = arAcc[i + 1];
                        arPw[i] = arPw[i + 1];
                        arMoney[i] = arMoney[i + 1];
                    }
                    count -= 1;
                    System.out.println("탈퇴되었습니다.");
                }
            }else {
                System.out.println("없는 계좌번호 입니다.");
            }
        }
    
        void joinMember() {
    
            // 회원가입 회원 수는 5명까지만 허용
            if(count == 5) {
                System.out.println("더이상 가입할 수 없습니다.");
                return;
            }
    
            // 계좌번호 중복검사
            System.out.print("가입할 계좌번호를 입력하세요 : ");
            String myAcc = scan.next();
            int check = checkAcc(myAcc);
    
            if(check == -1) {
                System.out.println("계좌번호가 중복됩니다.");
            }else {
                System.out.print("비밀번호를 입력하세요 : ");
                String myPw = scan.next();
    
                arAcc[count] = myAcc;
                arPw[count] = myPw;
                arMoney[count] = 1000;
    
                count += 1;
                System.out.println("회원가입을 축하합니다.");
            }
        }
    
        void login() {
    
            if(loginCheck != -1) {
                System.out.println("로그아웃 후 진행해주세요.");
                return;
            }
            System.out.print("계좌번호를 입력하세요 : ");
            String myId = scan.next();
            System.out.print("패스워드를 입력하세요 : ");
            String myPw = scan.next();
    
            // 계좌번호와 패스워드 유효성 검사
            for(int i=0; i<count; i++) {
                if(myId.equals(arAcc[i]) && myPw.equals(arPw[i])) {
                    loginCheck = i;
                }
            }
    
            if(loginCheck == -1) {
                System.out.println("계좌번호와 패스워드를 확인해주세요.");
            }else {
                System.out.println("로그인 성공!");
            }
        }
    
        void logOut() {
            if(loginCheck == -1) {
                System.out.println("로그인 후 진행해주세요.");
            }else {
                loginCheck = -1;
                System.out.println("로그아웃 되었습니다.");
            }
        }
    
        void income() {
            System.out.print("입금할 금액을 입력하세요 : ");
            int money = scan.nextInt();
    
            arMoney[loginCheck] += money;
            System.out.println("입금을 완료하였습니다.");
        }
    
        void trans() {
            System.out.print("이체할 계좌번호를 입력하세요 : ");
            String transAcc = scan.next();
    
            // 이체 계좌번호 유효성 검사
            int check = -1;
            for (int i = 0; i < count; i++) {
                if (arAcc[i].equals(transAcc)) {
                    check = i;
                }
            }
    
            if (check == -1) {
                System.out.println("계좌번호를 확인해주세요.");
            } else {
                System.out.print("이체할 금액을 입력하세요 : ");
                int transMoney = scan.nextInt();
    
                // 이체 금액 유효성 검사
                if (arMoney[loginCheck] >= transMoney) {
                    arMoney[loginCheck] -= transMoney;
                    arMoney[check] += transMoney;
                    System.out.println("이체를 완료하였습니다.");
                } else {
                    System.out.println("계좌잔액이 부족합니다.");
                }
            }
        }
    
        void run() {
    
            while(true) {
                // 전체 회원정보 출력
                showMember();
                // 메뉴 출력
                showMenu();
                // 메뉴 선택
                System.out.print("메뉴를 선택해주세요 : ");
                int choice = scan.nextInt();
                // 회원가입
                if(choice == 1) { joinMember(); }
                // 회원탈퇴
                else if(choice == 2) { delMember();	}
                // 로그인
                else if(choice == 3) { login(); }
                // 로그아웃
                else if(choice == 4) { logOut(); }
                // 입금
                else if(choice == 5) { income(); }
                // 이체
                else if(choice == 6) { trans(); }
            }
        }
    }
    
    
    public class Day05210메서드ATM {
        public static void main(String[] args) {
    
            Bank woori = new Bank();
            woori.name = "우리은행";
    
            woori.run();
    
        }
    }
    
    
    package Day052;
    
    /*
     * # 메서드 오버로딩(overloading)이란?
     * 메서드를 같은 이름으로 만들어도
     * 전달되는 값이 다르면 서로 다른 메서드로 인식하겠다는 의미
     */
    
    class MethodOverloading{
        int add(int x, int y) {
            return x + y;
        }
    
        int add(int x, int y, int z) {
            return x + y + z;
        }
    
        int add(int[] arr) {
            int total = 0;
            for(int i=0; i<arr.length; i++) {
                total += arr[i];
            }
            return total;
        }
    }
    
    public class Day05211메서드오버로딩 {
        public static void main(String[] args) {
    
            MethodOverloading mol = new MethodOverloading();
    
            int[] arr = {1, 2, 3, 4, 5};
    
            int r1 = mol.add(10, 3);
            int r2 = mol.add(10, 3, 1);
            int r3 = mol.add(arr);
    
            System.out.println("r1 = " + r1);
            System.out.println("r2 = " + r2);
            System.out.println("r3 = " + r3);
    
        }
    }
    
    
    package Day052;
    
    class Test {
        int x;
    
        void check() {
    
            // check() 메서드 안의 x변수와 메서드 밖의 x는 서로 다른 x이다.
            int x = 10;
    
            // 메서드 안의 x변수와 메서드 밖의 x변수를 구분짓는 방법은
            // 메서드 밖의 x변수에 this를 붙여주는 것이다.
            // 본래 메서드 안에서 메서드 밖의 변수들은 this.을 붙여주는 것이 원칙이지만, 생략이 가능하다.
            // 하지만 명확성을 위해 붙여주는 것이 좋다.
            this.x = 100;
    
            System.out.println("지역변수 x = " + x);
            System.out.println("클래스 영역의 x변수 = " + this.x);
        }
    }
    
    public class Day05212this {
        public static void main(String[] args) {
    
    
        }
    }
Designed by Tistory.