Java/Java 이론

MVC 디자인 패턴

2주녘 2023. 9. 22. 12:28
반응형
package chap06.sec04.exam01;

/**
 * packageName : chap06.sec04.exam01
 * fileName : Calculator
 * author : GGG
 * date : 2023-09-20
 * description : 모델 클래스
 *              함수(멤버 메소드)
 * 요약 :
 *          MVC 디자인 패턴 : M(Model), V(View), C(Controller)
 *          TODO : <요약>
 *              함수형태 :
 *              접근제어자 리턴자료형 함수명(매개변수1...., 매개변수 n) {실행문 ;}
 *              ex) public void sample(int a, String b, double c) { }
 *              접근제어자 : public(공용), default(생략, package 내에서는 사용가능) 등...
 *              함수이름 명명법 : 낙타표기법(카멜표기법), 첫 글자는 소문자, 단어 + 단어는 대문자
 *              매개변수 : 함수 실행시 전달되는 데이터
 *              리턴자료형 : 함수가 실행된 이후 결과값을 내보내기 할 떄 사용
 *              리턴값이 없는 함수 형태 호출: 객체변수.함수()
 *              리턴값이 있는 함수 형태 호출: 자료형 변수명 = 객체변수.함수()
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2023-09-20         GGG          최초 생성
 */
public class Calculator {
//      TODO: 속성(필드), 생성자함수, 함수(메소드)
//    속성생략 : 사물이나 사람의 특징을 나타냄
//    생성자생략 :
//    TODO: 함수 : 사물이나 사람의 동작을(행동) 나타냄

    /**
     * 전원 켜는 함수 : 리턴값 없이 만들기 : void 예약어 사용
     * 사용법 : 접근제어자 리턴자료형 함수명(매개변수1, ... 매개변수 n){};
     * 접근제어자 : public(공용 *), private(개인 *), default(생략), protected
     */

    void powerOn(){
        System.out.println("전원을 켭니다.");
    }

    void powerOff(){
        System.out.println("전원을 끕니다.");
    }

    /**
     * 더하기 함수 : 리턴값이 있는 함수
     */
    int plus(int x, int y){
        int result = x + y;
        return result;      // 결과 내보내기의 자료형이(정수:int)
    }

    /**
     * 나누기 함수
     */
    double divide(int x, int y){
        double result = (double) x / y;
        return result;
    }

}
package chap06.sec04.exam01;

/**
 * packageName : chap06.sec04.exam01
 * fileName : CalculatorApplication
 * author : GGG
 * date : 2023-09-20
 * description :    실행 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2023-09-20         GGG          최초 생성
 */
public class CalculatorApplication {
    public static void main(String[] args) {
        Calculator calculator = new Calculator();
//        TODO: 1) 전원을 on
        calculator.powerOn();

//        TODO: 2) 덧셈계산
//              리턴값이 있는 함수를 사용하는 전용 패턴(형태)
        int result = calculator.plus(5,6);
        System.out.println(result);

//        TODO: 예제 3) 계산기에 나눗셈 기능을 추가하려고 합니다.
//                      나눗셈을 추가하고 결과를 실행하세요

        double result2 = calculator.divide(10, 4);
        System.out.println(result2);

//        TODO : 예제 4) 추가 기능을 요청해서 추가했습니다.
//                      계산기를 끄는 기능을 추가해주세요.
        calculator.powerOff();
    }
}

 

package chap06.sec04.exam02;

/**
 * packageName : chap06.sec04.exam02
 * fileName : Computer
 * author : GGG
 * date : 2023-09-20
 * description :   컴퓨터모델 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2023-09-20         GGG          최초 생성
 */
public class Computer {
//    TODO: 속성, 생성자함수, 함수(메소드)
//    속성생략
//    생성자함수 생략
//    TODO: 함수
//          배열을 함수의 매개변수로 사용하면 장점이 있음
//          실행시에 함수의 매개변수로 1개를 넣을지, 2개를 넣을지 정해지지 않았을 때

    int sum1(int[] value) {
        int sum = 0;
//        매개변수 배열의 개수까지 모두 더하는 로직
        for (int i = 0; i < value.length; i++) {
            sum += value[i];     // 누적합
        }
        return sum;
    }

//    TODO: 기능추가 : 매개변수의 모든 값을 곱하는 함수를 만들어보세요

    int multi(int[] value) {
        int mul = 1;
        for (int i = 0; i < value.length; i++) {
            mul *= value[i];
        }
        return mul;
    }

    //    TODO: 자바의 새로운 기능 : ... 연산자
//          ...value : 매개변수의 각각의 변수를 배열로 만들어 줌
    int sum2(int... value) {
        int sum = 0;
//        매개변수 배열의 개수까지 모두 더하는 로직
        for (int i = 0; i < value.length; i++) {
            sum += value[i];     // 누적합
        }
        return sum;
    }

}
package chap06.sec04.exam02;

import java.util.ArrayList;
import java.util.List;

/**
 * packageName : chap06.sec04.exam02
 * fileName : ComputerApplication
 * author : GGG
 * date : 2023-09-20
 * description : 실행 클래스(main)
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2023-09-20         GGG          최초 생성
 */
public class ComputerApplication {
    public static void main(String[] args) {
        Computer computer = new Computer();

//       배열정의
        int[] value1 = {1, 2, 3};
        int result1 = computer.sum1(value1);
        System.out.println("result1 : "+ result1);


        int[] value2 = {1, 2, 3, 4, 5};
        int result2 = computer.sum1(value2);
        System.out.println("result2 : "+ result2);

//      TODO: 곱하기 함수 실행
        int[] value3 = {1,2,3};
        int result3 = computer.multi(value3);
        System.out.println("result3 : " + result3); // 6

//      TODO: 새로운 ...연산자 사용하기
        int result4 = computer.sum2(1, 2, 3);
        System.out.println(result4);

        int result5 = computer.sum2(1, 2, 3, 4, 5);
        System.out.println(result5);

    }

}
package chap06.sec04.exam03;

/**
 * packageName : chap06.sec04.exam03
 * fileName : Car
 * author : GGG
 * date : 2023-09-20
 * description : 자동차 모델 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2023-09-20         GGG          최초 생성
 */
public class Car {
    // gas 체크해서 차가 출발을 합니다.
    //    gas 있으면 "출발합니다" 출력하고,
    //    .run() 실행 // gas--; 감소시킴 반복문 종료
    //    다시 gas > 0 인지 확인해서 "gas를 주입할 필요가 없습니다"
    //     아니면 "gas"를 주입하세요"
    //    결과 :
    //      gas가 있습니다.
    //      출발합니다.
    //      달립니다.(gas잔량:5)
    //      달립니다.(gas잔량:4)
    //      달립니다.(gas잔량:3)
    //      달립니다.(gas잔량:2)
    //      달립니다.(gas잔량:1)
    //      멈춥니다.(gas잔량:0)
    //      gas가 없습니다.
    //      gas를 주입하세요.

    int gas;    // 연료

//    속성에 값을 넣지 않고, 1) 생성자를 이용해서 값을 넣거나
//                       2) setter 함수를 이용해서 값을 수정하거나
//    사용법 : void set속성명(int 속성명){ this.속성명 = 속성명; }
//    역할 : 속성에 값을 저장, 수정하는 함수
//    자동화 기능 : alt + insert

    public void setGas(int gas) {
        this.gas = gas;
    }

    /**
     * gas가 남았는지 확인하는 함수
     */
    boolean isLeftGas(){
        if(gas == 0){
            System.out.println("gas가 없습니다.");
            return false;
        } else{
            System.out.println("gas가 있습니다.");
            return true;
        }
    }

    /**
     * 자동차를 달리게 하는 함수 : gas 가 1씩 감소함
     * 계속 달리다가 gas == 0 순간 중단
     */
    void run(){
        while (true){
            if( gas > 0){
                System.out.println("달립니다. (gas잔량 :" + gas + ")");
                gas = gas - 1;
            } else {
                System.out.println("멈춥니다. (gas잔량 :" + gas + ")");
                return; // break 동일한 효과(강제중단)
            }
        }
    }
}
package chap06.sec04.exam03;


/**
 * packageName : chap06.sec04.exam03
 * fileName : CarApplication
 * author : GGG
 * date : 2023-09-20
 * description :
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2023-09-20         GGG          최초 생성
 */
public class CarApplication {
    public static void main(String[] args) {
//        객체 생성
        Car car = new Car();

//        TODO: 1) 기름 넣기 : 5
        car.setGas(5);

//        TODO: 2) 남아있는 기름 확인 : true, 없으면 false
        boolean gasState = car.isLeftGas();

//        TODO: 3) 자동차 출발
        if (gasState){
            System.out.println("출발합니다.");
            car.run();  // 출발
        }

//        TODO: 4) 기름 확인
        if(car.isLeftGas() == true){
            System.out.println("gas 넣을 필요가 없습니다.");
        } else {
            System.out.println("gas를 주입하세요");
        }
    }
}
package chap06.sec04.exam04;

/**
 * packageName : chap06.sec04.exam04
 * fileName : Calculator
 * author : GGG
 * date : 2023-09-20
 * description : 계산기 모델 클래스 (덧셈, 평균)
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2023-09-20         GGG          최초 생성
 */
public class Calculator {
    // TODO : 속성, 생성자함수, 함수(메소드)
    // 속성생략
    // 생성자 생략

    // TODO: 함수 : 덧셈, 평균, 계산실행
    // 사용법 : 접근제한자 리턴자료형 함수명(매개변수....){}

    /**
     * 덧셈 함수
     * @param x
     * @param y
     * @return
     */
    int plus(int x, int y){
        int result = x + y;
        return result;
    }

    /**
     * 평균 구하는 함수
     * @param x
     * @param y
     * @return
     */
    double avg(int x, int y){
//        TODO : 자신의 클래스 내에서는 자유롭게 함수를 사용할 수 있음
        int sum = plus(x, y);   // 합계
        double result = (double) sum / 2;
        return result;
    }

    /**
     * 자신의 계산결과를 출력하는 함수
     */
    void println(String message){
        System.out.println("계산 결과 : " + message);
    }

    /**
     * 평균과 계산결과를 출력하는 실행 함수
     */
    void execute(){
        // 1) 평균 함수
        double result = avg(7, 10);
        println(result + "");
    }



}
package chap06.sec04.exam04;

/**
 * packageName : chap06.sec04.exam04
 * fileName : CalculatorApplication
 * author : GGG
 * date : 2023-09-20
 * description : 실행클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2023-09-20         GGG          최초 생성
 */
public class CalculatorApplication {
    public static void main(String[] args) {
        Calculator calculator = new Calculator();
        calculator.execute();   // 실행함수
    }
}
package chap06.sec04.exam05;

/**
 * packageName : chap06.sec04.exam05
 * fileName : Car
 * author : GGG
 * date : 2023-09-20
 * description :
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2023-09-20         GGG          최초 생성
 */
public class Car {
    //    TODO: 속성, 생성자함수, 함수(메소드)
    int speed;   // 자동차 속도

    /**
     * 현재 속성의 값을 구하는 함수 : getter 함수
     * 사용법: 리턴자료형 get속성명(){ return 속성명; }
     */
//    자동화 기능 : alt + insert => getter 선택
    public int getSpeed() {
        return speed;
    }

    /**
     * 키를 돌립니다. 출력 함수
     */
    void keyTurnOn() {
//        결과 출력 : sout
        System.out.println("키를 돌립니다.");
    }

    /**
     * 달립니다. 5개 출력 + 속도 함수
     */
    void run() {
//        반복문 5번 실행 : 10씩 증가
        for (int i = 10; i <=50 ; i=i+10) {
//            속성 = 10씩 증가
            speed = i;
            System.out.println("달립니다.(시속:" + speed + "km/h)");
        }
    }
}
package chap06.sec04.exam05;

/**
 * packageName : chap06.sec04.exam05
 * fileName : CarApplication
 * author : GGG
 * date : 2023-09-20
 * description : 실행 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2023-09-20         GGG          최초 생성
 */
public class CarApplication {
    public static void main(String[] args) {
        Car car = new Car();
        car.keyTurnOn(); // 키를 돌립니다. 출력
        car.run(); // 5개의 달립니다.
        int speed = car.getSpeed(); // 현재 속도 값을 리턴
        System.out.println("현재속도:" + speed + "km/h");



    }
}
package chap06.sec04.exam06;

/**
 * packageName : chap06.sec04.exam06
 * fileName : Calculator
 * author : GGG
 * date : 2023-09-20
 * description : 계산기 모델
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2023-09-20         GGG          최초 생성
 */
public class Calculator {
//    TODO: 속성, 생성자함수, 함수
    //함수
    /**
     * 정사각형 넓이 구하는 함수 : areaRectangle(10)
     * 사용법: 접근제한자 리턴자료형
     */
    double areaRectangle(double width) {
        return width * width;
    }

    /**
     * 직사각형 넓이 구하는 함수 : areaRectangle(10, 20)
     */
    double areaRectangle(double width, double height) {
        return width * height;
    }

}
package chap06.sec04.exam06;

/**
 * packageName : chap06.sec04.exam06
 * fileName : CalculatorApplication
 * author : GGG
 * date : 2023-09-20
 * description : 실행 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2023-09-20         GGG          최초 생성
 */
public class CalculatorApplication {
    public static void main(String[] args) {
        Calculator calculator = new Calculator();

//        함수의 오버로딩을 이용한 예제
//        정사각형의 넓이 구하기(한변의 길이(가로) * 한변의 길이(가로))
        double result1 = calculator.areaRectangle(10);

//        직사각형 넓이 구하기(가로 * 세로)
        double result2 = calculator.areaRectangle(10, 20);

//        결과 출력
        System.out.println("정사각형 넓이 :" + result1);
        System.out.println("직사각형 넓이 :" + result2);
    }
}
반응형