[Java] 객체, 생성자

Sec 02

Exam 01

Car.java

package chap06.sec02.exam01;

/**
 * packageName : chap06.sec02.exam01
 * fileName : Car
 * author : GGG
 * date : 2023-09-19
 * description : 자동차 클래스
 * 요약 :
 *      클래스        : 객체의 구조를 정의하는 곳 (속성(필드, 멤버변수), 생성자, 함수(메소드))
 *      객체(인스턴스) : 클래스로부터 생성되면 new 생성자함수() 이용해서 생성함
 *      new 연산자    : 객체 생성 연산자이며 , 생성자함수를 호출하고 힙 메모리방에 객체를 저장함
 *      사용법        : 클래스 객체변수 = new 생성자함수();
 *      객체변수      : 힙 메모리 방번호(주소)가 저장됨
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2023-09-19         GGG          최초 생성
 */
public class Car {
//    클래스의 3요소 : 속성, 생성자함수, 함수 (메소드)
//    TODO: 속성(필드, 멤버변수)
    String company = "현대자동차";
    String model = "그랜저";
    String color = "검정";
    int maxSpeed = 350;
    int speed; // 기본 초기화 (0)
}

CarApplication.java

package chap06.sec02.exam01;

/**
 * packageName : chap06.sec02.exam01
 * fileName : CarApplication
 * author : GGG
 * date : 2023-09-19
 * description : 실행 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2023-09-19         GGG          최초 생성
 */
public class CarApplication {
    public static void main(String[] args) {
//        객체 생성 : 클래스명 객체변수명 = new 생성자함수();
//        생성자함수명 == 클래스명
        Car car = new Car();
//      TODO: 클래스의 속성 출력하기 : 사용법 : 객체변수명.속성명
        System.out.println("제작회사 :" + car.company);
        System.out.println("모델명 :" + car.model);
        System.out.println("색깔 :" + car.color);
        System.out.println("최고속도 :" + car.maxSpeed);
        System.out.println("현재속도 :" + car.speed); // 기본값 출력

//        Car 클래스 속성값 수정(현재속도 : car.speed) : 0 => 60
        car.speed = 60;
//        결과 출력
        System.out.println("수정된 속도 : " + car.speed);
    }
}

결과

제작회사 :현대자동차
모델명 :그랜저
색깔 :검정
최고속도 :350
현재속도 :0
수정된 속도 : 60

 

Exam 02

FieldInit.java

package chap06.sec02.exam02;

/**
 * packageName : chap06.sec02.exam02
 * fileName : FieldInit
 * author : L.DH
 * date : 2023-09-20
 * description :    필드 초기화
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-20         L.DH         최초 생성
 */
public class FieldInit {
//  TODO: 속성(필드), 생성자함수, 함수(메소드) 설계 선택

//  TODO: 속성(필드)
//  정수 : byte, short, int, long
    byte bField;
    short sField;
    int iField;
    long lField;

//  실수 : float, double
    float fField;
    double dField;

//  char / boolean
    char cField;
    boolean boField;

//  string / int[]
    String strField;
    int[] arrField;

}

FieldInitApplication.java

package chap06.sec02.exam02;

/**
 * packageName : chap06.sec02.exam02
 * fileName : FieldApplication
 * author : L.DH
 * date : 2023-09-20
 * description :    실행 클래스 (main())
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-20         L.DH         최초 생성
 */
public class FieldApplication {
    public static void main(String[] args) {
//      TODO : 객체 생성 : new 연산자(힙방에 해당 객체를 생성함)
//      TODO : 클래스명 명명법 : 첫글자 대문자 나머지 소문자, 단어 사이는 대문자(파스칼표기법)
//      사용법 : 클래스명 객체변수명 = new 생성자함수();
        FieldInit fieldInit = new FieldInit();

//      TODO: 예제 : fieldInit 객체변수의 모든 속성 출력하세요.
//      TODO : 힌트 : sout
        System.out.println("byte : " + fieldInit.bField);   // 0
        System.out.println("short : " + fieldInit.sField);   // 0
        System.out.println("int : " + fieldInit.iField);   // 0
        System.out.println("long : " + fieldInit.lField);   // 0
        System.out.println("==================");
        System.out.println("float : " + fieldInit.fField);   // 0.0
        System.out.println("double : " + fieldInit.dField);   // 0.0
        System.out.println("==================");
        System.out.println("char : " + fieldInit.cField);   // "\"u(유니코드(숫자)로 떠서 결과가 출력이 안됨)
        System.out.println("boolean : " + fieldInit.boField);   // false
        System.out.println("==================");
        System.out.println("String : " + fieldInit.strField);   // null
        System.out.println("int[] : " + fieldInit.arrField);   // null
    }
}

결과

byte : 0
short : 0
int : 0
long : 0
==================
float : 0.0
double : 0.0
==================
char :  
boolean : false
==================
String : null
int[] : null

 

Verify

Member

package chap06.sec02.Verify;

/**
 * packageName : chap06.sec02.Verify
 * fileName : Member
 * author : L.DH
 * date : 2023-09-20
 * description :    회원 정보 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-20         L.DH         최초 생성
 */
public class Member {
    String name;        // 회원명
    String id;          // 회원 id
    String password;    // 회원 패스워드
    int age;            // 회원 나이
}

MemberApplication

package chap06.sec02.Verify;

/**
 * packageName : chap06.sec02.Verify
 * fileName : MemerApplication
 * author : L.DH
 * date : 2023-09-20
 * description :    실행 클래스 (main())
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-20         L.DH         최초 생성
 */
public class MemerApplication {
    /**
     * Member 객체를 생성하고 속성에 아래의 값으로 저장한 후 속성의 값을 출력하세요.
     * 결과 :
     *     이름 : 최하얀
     *     id : 23
     * @param args
     */
    public static void main(String[] args) {
//      객체 생성
//      사용법 : 클래스명 객체변수명 = new 생성자함수()
        Member member = new Member();
//      속성 정의
        member.name = "최하얀";
        member.id = "23";
//      속성 값 결과 출력
        System.out.println("이름 : " + member.name);
        System.out.println("id : " + member.age);
    }
}

결과

이름 : 최하얀
id : 0

 

Sec 03

Exam 01

Car

package chap06.sec03.exam01;

/**
 * packageName : chap06.sec03.exam01
 * fileName : Car
 * author : GGG
 * date : 2023-09-20
 * description : 생성자 함수
 * 요약 :
 *       자바소스 (.java ) => 컴파일러(컴파일) => (.class) => 실행
 *      기본 생성자 : 생성자가 1개도 없을 경우 클래스 선언(정의) 시
 *                  컴파일러에 의해 자동으로 추가되는 생성자
 *      (만약에 있을 경우(2nd 생성자 등) 자동 추가되지 않음)
 *      오버로딩   : 함수의 이름이 같은 경우라도 에러를 발생시키지 않고 정의하게 하는 기능
 *         (주로 함수의 이름이 같고, 매개변수 자료형/개수/순서가 다른 경우에 오버로딩이 됨)
 *
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2023-09-20         GGG          최초 생성
 */
public class Car {
    //    TODO: 속성(필드), 생성자함수, 함수(메소드)
//    속성
    String col;    // 자동차 색깔
    int    ccNum;  // 자동차 배기량
    //   TODO: 생성자 함수
//  기본 생성자 : 만들지 않아도 컴파일러가 자동으로 1개 생성함(생략 가능)
//  1) 생성자함수 이름은 클래스명과 같음
//  2) 생성자함수는 여러개를 만들수 있음 : 생성자 오버로딩(overloading)
//  사용법 : 클래스명(){}
    Car(){};

    //  TODO: 2nd 생성자 함수 : 개발자가 정의하기 나름(매개변수 있고 자유롭게 정의 가능)
//      **) 생성자 오버로딩 : 같은 이름을 가진 함수를 여러개 정의할 수 있게 하는 기능 (객체지향언어만 가능)
    Car(String color, int cc) {
//  TODO: 생성자 함수의 역할 : 속성의 초기화를(변수에 값을 처음 넣어두는 행위) 담당
        col = color;
        ccNum = cc;
    }
}

Car

package chap06.sec03.exam01;

/**
 * packageName : chap06.sec03.exam01
 * 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) {
//        객체 생성 :
//        사용법: 클래스명 객체변수명 = new 생성자함수();
//      2nd 생성자함수 : Car(String color, int cc)
        Car car = new Car("검정", 3000);
        Car car2 = new Car("흰색", 2000);
//        결과 출력 : 1st 자동차(car)
        System.out.println(car.ccNum);
        System.out.println(car.col);

        //        결과 출력 : 2nd 자동차(car2)
        System.out.println(car2.ccNum);
        System.out.println(car2.col);
    }
}

결과

3000
검정
2000
흰색

Exam 02

korean

package chap06.sec03.exam02;

/**
 * packageName : chap06.sec03.exam02
 * fileName : Korean
 * author : GGG
 * date : 2023-09-20
 * description : 한국인 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2023-09-20         GGG          최초 생성
 */
public class Korean {
    //    TODO: 속성, 생성자함수, 함수(메소드)
//    속성
    String name;   // 이름
    String ssn;   // 주민번호

    //    생성자함수
    Korean(){};  // 기본생성자

    Korean(String strName, String strSsn){
//        생성자의 역할 : 속성에 값을 처음에 넣어 두는 행위
        name = strName; // 매개변수 이름 값을 속성에 저장
        ssn = strSsn;  // 매개변수 주민번호 값을 속성에 저장
    }

}

koreanApplication

package chap06.sec03.exam02;

/**
 * packageName : chap06.sec03.exam02
 * fileName : KoreanApplication
 * author : GGG
 * date : 2023-09-20
 * description : 실행 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2023-09-20         GGG          최초 생성
 */
public class KoreanApplication {
    /**
     * 한국인 객체를 생성하고 매개변수 2개짜리 생성자를 이용해서 속성을 초기화하세요.
     * 초기화 한 결과를 출력하세요
     * TODO: 힌트 : Korean 클래스 속성 : String name, String ssn
     *       객체의 사용 : 객체변수.속성명
     * //        결과 :
     * //            k1.name : 박자바 (문자열)
     * //            k1.ssn : 011225-1234567 (문자열)
     * //            k2.name : 김자바
     * //            k2.ssn : 930525-0654321
     */
    public static void main(String[] args) {
//        객체 생성
//        사용법: 클래스명 객체변수명 = new 생성자함수(변수1, 변수2);
        Korean k1 = new Korean("박자바", "011225-1234567");
        Korean k2 = new Korean("김자바", "930525-0654321");

//        결과 각각 출력 : sout , 줄복사 : ctrl + d
        System.out.println("k1.name : " + k1.name);
        System.out.println("k1.ssn : " + k1.ssn);

        System.out.println("k2.name : " + k2.name);
        System.out.println("k2.ssn : " + k2.ssn);

    }
}

결과

k1.name : 박자바
k1.ssn : 011225-1234567
k2.name : 김자바
k2.ssn : 930525-0654321

Exam 03

car

package chap06.sec03.exam03;

/**
 * packageName : chap06.sec03.exam03
 * fileName : Car
 * author : GGG
 * date : 2023-09-20
 * description : 생성자 오버로딩
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2023-09-20         GGG          최초 생성
 */
public class Car {
    //    TODO: 속성(필드), 생성자함수, 함수(메소드)
//    속성
    String company = "현대자동차";    // 제조사
    String model;   // 자동차 모델(SUV, 세단)
    String color;   // 자동차 색깔
    int maxSpeed;   // 최고속도

    //    기본 생성자
    public Car(){}

//    매개변수 1개짜리 생성자
    public Car(String model){
//    TODO: this (객체 자기자신을 의미하는 객체변수)
//        객체의 사용 : 객체변수.속성명
        this.model = model;
    }

//    매개변수 2개짜리 생성자
    public Car(String model, String color) {
        this.model = model;
        this.color = color;
    }

    public Car(String model, String color, int maxSpeed) {
        this.model = model;
        this.color = color;
        this.maxSpeed = maxSpeed;
    }
}






carApplication

package chap06.sec03.exam03;

/**
 * packageName : chap06.sec03.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 car1 = new Car(); // 기본 생성자
        Car car2 = new Car("자가용"); // 매개변수 1개짜리 생성자
        Car car3 = new Car("자가용","빨강"); // 매개변수 2개짜리 생성자
        Car car4 = new Car("자가용","빨강",200); // 매개변수 3개짜리 생성자

//        결과 출력 : 2개
        System.out.println(car1.color);
        System.out.println(car1.company);
        System.out.println(car1.maxSpeed);
        System.out.println(car1.model);

        System.out.println(car4.color);
        System.out.println(car4.company);
        System.out.println(car4.maxSpeed);
        System.out.println(car4.model);

    }
}

결과

null
현대자동차
0
null
빨강
현대자동차
200
자가용

 

Verify

exam02

Member

package chap06.sec03.verify.exam02;

/**
 * packageName : chap06.sec03.verify.exam02
 * fileName : Member
 * author : GGG
 * date : 2023-09-20
 * description : 회원 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2023-09-20         GGG          최초 생성
 */
public class Member {
    String id; // 회원 id
    String name; // 회원명

    //    생성자 : 2
    public Member(String name, String id) {
        this.id = id;
        this.name = name;
    }
}

memberApplication

package chap06.sec03.verify.exam02;

/**
 * packageName : chap06.sec03.verify.exam02
 * fileName : MemberApplication
 * author : GGG
 * date : 2023-09-20
 * description : 실행 클래스(main)
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2023-09-20         GGG          최초 생성
 */
public class MemberApplication {
    /**
     * Member 객체를 생성하고 싶습니다. 생성자에서 name 속성과 id 속성을
     *        초기화 할 수 있도록 Member 클래스를 작성해 보세요.
     * @param args
     */
    public static void main(String[] args) {
        Member member = new Member("홍길동", "hong");

        System.out.println("name :" + member.name);
        System.out.println("id :" + member.id);
    }
}

결과

name :홍길동
id :hong

 

exam03

Board

package chap06.sec03.verify.exam03;

/**
 * packageName : chap06.sec03.verify.exam03
 * fileName : Board
 * author : GGG
 * date : 2023-09-20
 * description : 모델 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2023-09-20         GGG          최초 생성
 */
public class Board {
    //    TODO: 속성, 생성자, 함수
//    속성 정의
    String title; // 제목
    String content; // 본문
    String writer; // 작성자
    //    생성자
    public Board(String title) {
        this.title = title;
    }

    public Board(String title, String content) {
        this.title = title;
        this.content = content;
    }

    public Board(String title, String content, String writer) {
        this.title = title;
        this.content = content;
        this.writer = writer;
    }
}

BoardApplication

package chap06.sec03.verify.exam03;

/**
 * packageName : chap06.sec03.verify.exam03
 * fileName : BoardApplication
 * author : GGG
 * date : 2023-09-20
 * description :
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2023-09-20         GGG          최초 생성
 */
public class BoardApplication {

    public static void main(String[] args) {
        Board board = new Board("제목");
        Board board2 = new Board("제목", "내용");
        Board board3 = new Board("제목", "내용", "작가");

        System.out.println("title :" + board.title);

        System.out.println("title2 :" + board2.title);
        System.out.println("content2 :" + board2.content);

        System.out.println("title3 :" + board3.title);
        System.out.println("content3 :" + board3.content);
        System.out.println("content3 :" + board3.writer);
    }
}

결과

title :제목
title2 :제목
content2 :내용
title3 :제목
content3 :내용
content3 :작가

 

Sec 04

exam 01

Calculator

package chap06.sec04.exam01;

/**
 * packageName : chap06.sec04.exam01
 * fileName : Calculator
 * author : GGG
 * date : 2023-09-20
 * description : 모델 클래스
 *          함수(멤버 메소드)
 * 요약 :
 *      MVC 디자인 패턴 : M(Model), V(View), C(Controller)
 * <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("전원을 켭니다.");
    }

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

    /**
     * 나눗셈 함수 : calculator.divide(10, 4)
     */
    double divide(int x, int y) {
        double result = (double) x / (double) y;

        return result;
    }

    /**
     * 전원 끄는 함수 : calculator.powerOff() , "전원을 끕니다."
     */
    void powerOff() {
        System.out.println("전원을 끕니다.");
    }

}










CalculatorApplication

package chap06.sec04.exam01;

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

//      TODO: 1) 전원을 On
        calculator.powerOn();

//      TODO: 2) 더하기 계산
//            리턴값이 있는 함수를 사용하는 전용 패턴(형태)
        int result = calculator.plus(5, 6); // 11
//        결과 출력 : sout
        System.out.println(result);

//      TODO: 예제 3) 계산기에 나눗셈 기능을 추가하려고 합니다.
//              나눗셈을 추가하고 결과를 실행하세요
        double result2 = calculator.divide(10, 4);
        System.out.println(result2);

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

결과

전원을 켭니다.
11
2.5
전원을 끕니다.

 

exam 02

computer

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 = sum + value[i]; // 누적합
        }
        return sum;
    }

    //    TODO: 예제) 기능 추가 : 매개변수의 모든 값을 곱하는 함수 를 만들어 보세요
//         함수명 : multi()
    int multi(int[] value) {
        int mul = 1; // 초기값
//      매개변수 배열의 개수까지 모두 더하는 로직
        for (int i = 0; i < value.length; i++) {
            mul = mul * value[i]; // 누적합
        }
        return mul;
    }

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










computerApplication

package chap06.sec04.exam02;

/**
 * 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();

//        배열 정의
//      TODO: 더하기 함수 실행
        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 : " +result4);

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

    }
}

결과

result1 : 6
result2 : 15
result3 : 6
result4 : 6
result5 : 21

 

exam 03

car

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          최초 생성
 */

/**
 * // gas 체크해서 차가 출발을 합니다.
 * //    gas 있으면 "출발합니다" 출력하고,
 * //    .run() 실행 // gas--; 감소시킴 반복문 종료
 * //    다시 gas > 0 인지 확인해서 "gas를 주입할 필요가 없습니다"
 * //     아니면 "gas"를 주입하세요"
 * //    결과 :
 * //      gas가 있습니다.
 * //      출발합니다.
 * //      달립니다.(gas잔량:5)
 * //      달립니다.(gas잔량:4)
 * //      달립니다.(gas잔량:3)
 * //      달립니다.(gas잔량:2)
 * //      달립니다.(gas잔량:1)
 * //      멈춥니다.(gas잔량:0)
 * //      gas가 없습니다.
 * //      gas를 주입하세요.
 */

public class Car {
//    TODO: 속성(필드), 생성자함수, 함수(메소드)
    int gas; // 기름

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

    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 동일한 효과(강제 중단)
            }
        }
    }
}

carApplication

package chap06.sec04.exam03;

/**
 * packageName : chap06.sec04.exam03
 * fileName : CarApplication
 * author : GGG
 * date : 2023-09-20
 * description : 실행 클래스 (main)
 * 요약 :
 * <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 를 주입하세요");
        }

    }
}

결과

gas 가 있습니다.
출발합니다.
달립니다.(gas잔량:5)
달립니다.(gas잔량:4)
달립니다.(gas잔량:3)
달립니다.(gas잔량:2)
달립니다.(gas잔량:1)
멈춥니다..(gas잔량:0)
gas 가 없습니다. 
gas 를 주입하세요

 

exam 04

calcurator

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 + "");
    }
}




calcuratorApplication

package chap06.sec04.exam04;

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

결과

계산결과 :8.5

 

exam 05

Car

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)");
        }
    }
}







CarApplication

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          최초 생성
 */

/**
 * // 결과 :
 * //    키를 돌립니다.
 * //    달립니다.(시속:10km/h)
 * //    달립니다.(시속:20km/h)
 * //    달립니다.(시속:30km/h)
 * //    달립니다.(시속:40km/h)
 * //    달립니다.(시속:50km/h)
 * //    현재 속도: 50km/h
 */
public class CarApplication {
    public static void main(String[] args) {
        Car car = new Car();
        car.keyTurnOn(); // 키를 돌립니다. 출력
        car.run(); // 5개의 달립니다.
        int speed = car.getSpeed(); // 현재 속도 값을 리턴 (getter 함수 : get속성명())
        System.out.println("현재속도:" + speed + "km/h");
    }
}

결과

키를 돌립니다.
달립니다.(시속:10km/h)
달립니다.(시속:20km/h)
달립니다.(시속:30km/h)
달립니다.(시속:40km/h)
달립니다.(시속:50km/h)
현재속도:50km/h

 

exam 06

Calculator

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;
    }

}

CalculatorApplication

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);
    }
}

결과

정사각형 넓이 :100.0
직사각형 넓이 :200.0

 

Verify

exam03

MemberService

package chap06.sec04.verify.exam03;

/**
 * packageName : chap06.sec04.verify.exam03
 * fileName : MemberService
 * author : GGG
 * date : 2023-09-20
 * description :
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2023-09-20         GGG          최초 생성
 */
public class MemberService {

    boolean login(String id, String password) {
        if (id.equals("hong") && password.equals("12345")) {
            return true;
        } else {
            return false;
        }
    }

    void logout(String id){
       System.out.println( id + "이 로그아웃 되었습니다.");
    }
}

MemberServiceApplication

package chap06.sec04.verify.exam03;

/**
 * packageName : chap06.sec04.verify.exam03
 * fileName : MemberServiceApplication
 * author : GGG
 * date : 2023-09-20
 * description :
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2023-09-20         GGG          최초 생성
 */

/**
 * //MemberService 클래스에 login() 함수와 logout() 함수를 선언하려고 합니다. 클래스를 작성하세요.
 * // login() 함수를 호출할 때에는 매개값으로 id와 password를 제공하고,
 *    logout() 함수는 id만 매개값으로 제공합니다.
 * // MemberService 클래스와 login(), logout() 함수를 선언해 보세요.
 * // login() 함수는 매개값 id가 "hong", 매개값 password 가 "12345" 일 경우에만 true 로 리턴하고,
 * // 그 이외의 값일 경우에는 false 를 리턴하세요.
 * // logout() 함수의 내용은 "hong이 로그아웃 되었습니다."가 출력되도록 하세요.
 * // 리턴타입 : boolean, 함수명 : login, 매개변수타입 : id(String), password(String)
 * // 리턴타입 : void, 함수명 : logout, 매개변수타입 : id(String)
 * // 결과 :
 * //    로그인 되었습니다.
 * //    hong이 로그아웃 되었습니다.
 */
public class MemberServiceApplication {
    public static void main(String[] args) {
        MemberService memberService = new MemberService();
        boolean result = memberService.login("hong", "12345");
        if(result) {
            System.out.println("로그인 되었습니다.");
            memberService.logout("hong");
        } else {
            System.out.println("id 또는 password가 올바르지 않습니다.");
        }

    }
}

결과

로그인 되었습니다.
hong이 로그아웃 되었습니다.

 

exam04

Printer

package chap06.sec04.verify.exam04;

/**
 * packageName : chap06.sec04.verify.exam04
 * fileName : Printer
 * author : GGG
 * date : 2023-09-20
 * description : 프린터 모델 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2023-09-20         GGG          최초 생성
 */
public class Printer {
    //    TODO: 속성, 생성자함수 , 함수(메소드)
//    속성, 생성자함수 생략
//    함수 : 오버로딩 기능
//    .println(10), .println(true), .println(5.7), .println("홍길동")
    static void println(int value){
        System.out.println("공유함수(int) :" + value);
    }
    static void println(boolean value){
        System.out.println("공유함수(boolean) :" + value);
    }
    static void println(double value){
        System.out.println("공유함수(double) :" + value);
    }
    static void println(String value){
        System.out.println("공유함수(String) :" + value);
    }
}

PrinterApplication

package chap06.sec04.verify.exam04;

/**
 * packageName : chap06.sec04.verify.exam04
 * fileName : PrinterApplication
 * author : GGG
 * date : 2023-09-20
 * description :
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2023-09-20         GGG          최초 생성
 */

/**
 * TODO: 힌트 : static 함수 정의하기
 *      static void 함수명(자료형 매개변수) { sout + 매개변수 ; }
 *      정적함수(공유함수, 전역함수) : 프로그램 상에 1개만 존재
 *      일반적으로 객체/함수를 만들면 여러개의 복사본으로 객체/함수가 만들어 질 수 있음
 *      (스택방(기본자료형 값) / 힙방(참조자료형 값), 메소드방(정적함수/정적변수))
 *      => 자바 메모리 관리 : 가비지 컬렉션 (메모리 회수하는 역할하는 프로세스)
 *      => 정적(공유,전역) 함수/변수 : 가비지 컬렉션 대상이 아니어서 메모리가 회수되지 않음
 *        (최소화해서 사용해야함)
 *      => 사용법(정의) : static 리턴자료형 함수명(자료형 매개변수) { }
 *      => 사용법(사용) : 클래스명.함수명();
 * // 결과 :
 * //    공유함수(int) :10
 * //    공유함수(boolean) :true
 * //    공유함수(double) :5.7
 * //    공유함수(String) :홍길동
 */
public class PrinterApplication {
    public static void main(String[] args) {
//        공유함수 오버로딩 예제
//        공유함수 호출하는 방법
//        사용법 : 클래스명.공유함수명();
        Printer.println(10);
        Printer.println(true);
        Printer.println(5.7);
        Printer.println("홍길동");
    }
}

결과

공유함수(int) :10
공유함수(boolean) :true
공유함수(double) :5.7
공유함수(String) :홍길동