JAVA 실습

spolice·2021년 5월 29일
0

2021/5/29
함수의 캡슐화

6월 멈춰..!!
자바 구조적프로그래밍 완강!
자바 객체지향 강의 시작 ^<^

함수의 캡슐화

캡슐화의 장점 : 묶은 캡슐들 안으로 코드의 오류가 한정된다.

캡슐화 이전의 코드

import java.util.Scanner;

public class Program
{
    public static void main(String[] args) {

        ExamList list = new ExamList();
        list.exams = new Exam[3];
        list.current = 0;
        //exams와 current를 포함하여 묶여있는 list라는 클래스를 전달하여 메소드에서 인자로 받을 때에서 List로 보내준다.
        int menu;
        boolean Loop = true;

        while(Loop)
        {
            menu = inputMenu();

            switch(menu) {
                case 1:
                    inputList(list);
                    break;
                case 2:
                    printList(list);
                    break;
                case 3:
                    System.out.println("Bye");
                    Loop = false;
                    break;

                default:
                    System.out.println("error 1~3 입력");
            }
        }
    }

    static void printList(ExamList list) {
        printList(list, list.current);
    }
    static void printList(ExamList list, int size) {
        System.out.println("성적 출력");
        //int size = list.current;
        Exam[] exams = list.exams;

        for(int i = 0; i<size; i++) {
            Exam exam = exams[i];
            int kor = exam.kor;
            int eng = exam.eng;
            int math = exam.math;

            int total = kor+eng+math;
            float avg = total/3.0f;

            System.out.printf("국어:  %d\n ", kor);
            System.out.printf("영어:  %d\n ", eng);
            System.out.printf("수학:  %d\n ", math);
            System.out.printf("총점:  %d\n ", total);
            System.out.printf("평균:  %f\n ", avg);
        }
    }

    static void inputList(ExamList list) {
        Scanner scan = new Scanner(System.in);
        System.out.println("성적입력");
        int kor, eng, math;

        do {
            System.out.printf("국어 : ");
            kor = scan.nextInt();

            if (kor < 0 || 100 < kor)
                System.out.println("국어 성적 범위는 1~100");
        } while (kor < 0 || 100 < kor);

        do {
            System.out.printf("영어 : ");
            eng = scan.nextInt();

            if (eng < 0 || 100 < eng)
                System.out.println("영어 성적 범위는 1~100");
        } while (eng < 0 || 100 < eng);

        do {
            System.out.printf("수학 : ");
            math = scan.nextInt();

            if (math < 0 || 100 < math)
                System.out.println("국어 성적 범위는 1~100");
        } while (math < 0 || 100 < math);

        Exam exam = new Exam();
        exam.kor = kor;
        exam.eng = eng;
        exam.math = math;

        Exam[] exams = list.exams;
        int size = list.current;

        if (exams.length == size) {
            //1. 크기가 더 큰 배열을 생성하기
            Exam[] temp = new Exam[size + 5];
            // 2. 값을 이주 시키기

            for (int i = 0; i < size; i++)
                temp[i] = exams[i];
            //3. list.exams가 새로 만든 temp배열을 넘겨받아 참조할 수 있게 한다.
            list.exams = temp;
        }
        list.exams[list.current] = exam;
        list.current++;

    }
    static int inputMenu() {
        Scanner scan = new Scanner(System.in);
        System.out.println("메인 메뉴");
        System.out.println("1. 성적입력");
        System.out.println("2. 성적출력");
        System.out.println("3. 종료");
        int menu = scan.nextInt();

        return menu;
    }
}
public class ExamList {
        Exam[] exams;
        int current;
}
public class Exam {
        int kor;
        int eng;
        int math;
}

함수 캡슐화 이후의 코드

import java.util.Scanner;

public class Program
{
    public static void main(String[] args) {

        ExamList list = new ExamList();
        ExamList.init(list);
        //exams와 current를 포함하여 묶여있는 list라는 클래스를 전달하여 메소드에서 인자로 받을 때에서 List로 보내준다.
        int menu;
        boolean Loop = true;

        while(Loop)
        {
            menu = inputMenu();

            switch(menu) {
                case 1:
                    ExamList.inputList(list);
                    break;
                case 2:
                    ExamList.printList(list);
                    break;
                case 3:
                    System.out.println("Bye");
                    Loop = false;
                    break;

                default:
                    System.out.println("error 1~3 입력");
            }
        }
    }

    static int inputMenu() {
        Scanner scan = new Scanner(System.in);
        System.out.println("메인 메뉴");
        System.out.println("1. 성적입력");
        System.out.println("2. 성적출력");
        System.out.println("3. 종료");
        int menu = scan.nextInt();
        return menu;
    }
}
import java.util.Scanner;

public class ExamList {
        Exam[] exams;
        int current;

        static void printList(ExamList list) {
                printList(list, list.current);
        }
        static void printList(ExamList list, int size) {
                System.out.println("성적 출력");
                //int size = list.current;
                Exam[] exams = list.exams;

                for(int i = 0; i<size; i++) {
                        Exam exam = exams[i];
                        int kor = exam.kor;
                        int eng = exam.eng;
                        int math = exam.math;

                        int total = kor+eng+math;
                        float avg = total/3.0f;

                        System.out.printf("국어:  %d\n ", kor);
                        System.out.printf("영어:  %d\n ", eng);
                        System.out.printf("수학:  %d\n ", math);
                        System.out.printf("총점:  %d\n ", total);
                        System.out.printf("평균:  %f\n ", avg);
                }
        }
        static void inputList(ExamList list) {
                Scanner scan = new Scanner(System.in);
                System.out.println("성적입력");
                int kor, eng, math;

                do {
                        System.out.printf("국어 : ");
                        kor = scan.nextInt();

                        if (kor < 0 || 100 < kor)
                                System.out.println("국어 성적 범위는 1~100");
                } while (kor < 0 || 100 < kor);

                do {
                        System.out.printf("영어 : ");
                        eng = scan.nextInt();

                        if (eng < 0 || 100 < eng)
                                System.out.println("영어 성적 범위는 1~100");
                } while (eng < 0 || 100 < eng);

                do {
                        System.out.printf("수학 : ");
                        math = scan.nextInt();

                        if (math < 0 || 100 < math)
                                System.out.println("국어 성적 범위는 1~100");
                } while (math < 0 || 100 < math);

                Exam exam = new Exam();
                exam.kor = kor;
                exam.eng = eng;
                exam.math = math;

                Exam[] exams = list.exams;
                int size = list.current;

                if (exams.length == size) {
                        //1. 크기가 더 큰 배열을 생성하기
                        Exam[] temp = new Exam[size + 5];
                        // 2. 값을 이주 시키기

                        for (int i = 0; i < size; i++)
                                temp[i] = exams[i];
                        //3. list.exams가 새로 만든 temp배열을 넘겨받아 참조할 수 있게 한다.
                        list.exams = temp;
                }
                list.exams[list.current] = exam;
                list.current++;

        }
        public static void init(ExamList list) {
                list.exams = new Exam[3];
                list.current = 0;
        }
}
public class Exam {
        int kor;
        int eng;
        int math;
    }
profile
모르는 개 산책

0개의 댓글