[Java] chapter_06

DEVELOPERS_Ivan ㅣ 2023. 9. 20. 14:08

패키지 형태

- package chap06.Sec06;   
- 패키지 : 일종의 폴더와 비슷함
- 패키지 구조 : 상위패키지.하위패키지.클래스명 으로 사용함
- 자바에서 어떤 클래스의 전체 이름 : 패키지명 + 클래스명
ex) chap06.Sec06.Car

- 클래스에 패키지를 사용하면 : 제일 위에 패키지를 정의(선언) 해야함
- 사용법 : packge 상위패키지.하위패키지;
- public calss 클래스명{...}
- (참고) 인텔리제이 자동 import 기능 : 커서를 그 위치에 놓고 alt + enter


객체 지향 설계하기
chap06.sec02.exam01.Car 자동차클래스 (속성(필드, 멤버변수), 생성자함수)
chap06.sec02.exam01.CarApplication 실행 클래스 (main())

- ***개념***
- 클래스 : 객체의 구조를 정의하는 곳(속성(필드, 멤버변수), 생성자, 함수(메소드))
- 객체(인스턴스) : 클래스로부터 생성되면 new 생성자함수() 이용해서 생성함
- new 연산자 : 객체 생성 연산자이며, 생성자함수를 호출하고 힙 메모리방에 객체를 저장함
- 사용법 : 클래스 객체변수 = new 생성자함수();
- 객체변수 : 힙 메모리 방번호(주소)가 저장됨

- ※ 클래스(생성자함수) 작성 후 실행 클래스 작성하기

- 클래스의 3요소 설계 선택해서 작성 : 속성(필드, 멤버변수), 생성자함수, 함수(메소드)

- 객체 생성 : new 연산자(힙방에 해당 객체를 생성함)
- 클래스명 명명법 : 첫글자 대문자 나머지 소문자, 단어 사이는 대문자(파스칼표기법)
더보기
package chap06.sec02.exam01;

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

} // end of class
더보기
package chap06.sec02.exam01;

/**
 * packageName : chap06.sec02.exam01
 * fileName : CarApplication
 * author : L.DH
 * date : 2023-09-19
 * description :    실행 클래스 (main())
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-19         L.DH         최초 생성
 */
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);
    } // end of main

} // end of class

객체 지향 설계하기
chap06.sec02.exam02.FieldInit 필드 초기화(생성자 함수)
chap06.sec02.exam02.FieldApplication 실행 클래스 (main())
더보기
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;

} // end of class
더보기
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
    } // end of main

} // end of class

연습문제) 객체 지향 설계하기
chap06.sec02.Verify.Memer 회원 정보 클래스
chap06.sec02.Verify.MemerApplication 실행 클래스 (main())
더보기
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;            // 회원 나이
}
더보기
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);
    }
}

 

생성자 오버로딩_매개 변수 사용
chap06.sec03.exam01.Car
chap06.sec03.exam01.CarApplication

- 자바소스 (.java) => 컴파일러(컴파일) => (.class) => 실행
- 기본 생성자 : 생성자가 1개도 없을 경우 클래스 선언(정의) 시 컴파일러에 의해 자동으로 추가되는 생성자
(만약에 있을 경우(2nd 생성자 등) 자동 추가되지 않음)

- 오버로딩 : 함수의 이름이 같은 경우라도 에러를 발생시키지 않고 정의하게 하는 기능
(주로 함수의 이름이 같고, 매개변수 자료형/개수/순서가 다른 경우에 오버로딩이 됨)
더보기
package chap06.Sec03.exam01;

/**
 * packageName : chap06.Sec03.exam01
 * fileName : Car
 * author : L.DH
 * date : 2023-09-20
 * description :    생성자 함수
 * 요약 :
 *          자바소스 (.java) => 컴파일러(컴파일) => (.class) => 실행
 *          기본 생성자 : 생성자가 1개도 없을 경우 클래스 선언(정의) 시 컴파일러에 의해 자동으로 추가되는 생성자
 *          (만약에 있을 경우(2nd 생성자 등) 자동 추가되지 않음)
 *          오버로딩 : 함수의 이름이 같은 경우라도 에러를 발생시키지 않고 정의하게 하는 기능
 *                    (주로 함수의 이름이 같고, 매개변수 자료형/개수/순서가 다른 경우에 오버로딩이 됨)
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-20         L.DH         최초 생성
 */
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;
    }

}   // end of class
더보기
package chap06.Sec03.exam01;

/**
 * packageName : chap06.Sec03.exam01
 * fileName : CarApplication
 * author : L.DH
 * date : 2023-09-20
 * description :    실행 클래스 (main())
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-20         L.DH         최초 생성
 */
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);
    Car car3 = new Car("파랑", 2500);
//  결과 출력 : 1st 자동차(car)
    System.out.println(car.col);
    System.out.println(car.ccNum);

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

//  결과 출력 : 3rd 자동차(car3)
    System.out.println(car3.col);
    System.out.println(car3.ccNum);

    } // end of main
} // end of class

생성자 오버로딩_매개 변수 사용
chap06.sec03.exam02.Korean
chap06.sec03.exam02.KoreanApplication
더보기
package chap06.Sec03.exam02;

/**
* packageName : chap06.Sec03.exam02
* fileName : Korean
* author : L.DH
* date : 2023-09-20
* description :    한국인 클래스(생성자 함수)
* 요약 :
*
* ===========================================================
* DATE            AUTHOR             NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-20         L.DH         최초 생성
*/

public class Korean {
//  TODO : 속성, 생성자함수, 함수(메소드)
//  속성
    String name;    // 이름
    String ssn;     // 주민번호

//   생성자함수
//  기본 생성자 : 만들지 않아도 컴파일러가 자동으로 1개 생성함(생략 가능)
    Korean(){};  // 기본생성자

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

}   // end of class
더보기
package chap06.Sec03.exam02;

/**
 * packageName : chap06.Sec03.exam02
 * fileName : KoreanApplication
 * author : L.DH
 * date : 2023-09-20
 * description :    실행 클래스 (main())
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-20         L.DH         최초 생성
 */
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");

//      K1 결과 출력
        System.out.println("k1.name : " + k1.name);
        System.out.println("k1.ssn : " + k1.ssn);
//      K2 결과 출력
        System.out.println("k2.name : " + k2.name);
        System.out.println("k2.ssn : " + k2.ssn);
    }   // end of main

}   // end of class

생성자 오버로딩_this. 사용
chap06.sec03.exam03.Car
chap06.sec03.exam03.CarApplication

- this (객체 자기자신(현재 위치에 클래스)을 의미하는 객체변수)
- 객체의 사용 : 객체변수.속성명

- ※ 매개 변수 자동화 기능 이용 : alt + insert => 생성자 속성 선택 후 확인
- 사용법 : 마우스 우 클릭 생성 클릭(단축키 : alt + insert)
더보기
package chap06.Sec03.exam03;

/**
 * packageName : chap06.Sec03.exam03
 * fileName : Car
 * author : L.DH
 * date : 2023-09-20
 * description :    자동차 클래스(생성자 함수)
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-20         L.DH         최초 생성
 */
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){
//    TODO : this (객체 자기자신(현재 위치에 클래스)을 의미하는 객체변수)
//          객체의 사용 : 객체변수.속성명
        this.model = model;
        this.color = color;
    }
//  매개변수 3개짜리 생성자
//  TODO : 자동화 기능 이용 : alt + insert => 생성자 속성 선택 후 확인
//  사용법 : 마우스 우 클릭 생성 클릭(단축키 : alt + insert)
    public Car(String model, String color, int maxSpeed) {
        this.model = model;
        this.color = color;
        this.maxSpeed = maxSpeed;
    }
} // end of class
더보기
package chap06.Sec03.exam03;

/**
 * packageName : chap06.Sec03.exam03
 * fileName : CarApplication
 * author : L.DH
 * date : 2023-09-20
 * description :    실행 클래스 (main())
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-20         L.DH         최초 생성
 */
public class CarApplication {
    public static void main(String[] args) {
//      객체 생성 : 모든 생성자 이용하기
        Car car1 = new Car();   // 기본 생성자
        Car car2 = new Car("자가용");   // 매개변수 1개짜리 생성자
        Car car3 = new Car("자가용", "빨강");   // 매개변수 2개짜리 생성자
        // 매개변수 3개짜리 생성자
        Car car4 = new Car("자가용", "빨강", 200);

//      결과 출력 : 2개 , 기본생성자 vs 4개 생성자
        System.out.println(car1.color);     // null
        System.out.println(car1.company);   // 현대자동차
        System.out.println(car1.maxSpeed);  // 0
        System.out.println(car1.model);     // null
        System.out.println("============");
        System.out.println(car4.color);     // 빨강
        System.out.println(car4.company);   // 현대자동차
        System.out.println(car4.maxSpeed);  // 200
        System.out.println(car4.model);     // 자가용
    }   // end of main

} // end of class

연습문제) 생성자 오버로딩_this. 사용
chap06.sec03.Verify.exam02.Member 회원 관리 클래스
chap06.sec03.Verify.exam02.MemberApplication 실행 클래스(Main)
더보기
package chap06.Sec03.Verify.exam02;

/**
 * packageName : chap06.Sec03.Verify.exam02
 * fileName : Member
 * author : L.DH
 * date : 2023-09-20
 * description :    회원 관리 클래스(생성자 함수)
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-20         L.DH         최초 생성
 */
public class Member {
//  TODO : 속성(필드), 생성자함수, 함수(메소드)
//  속성
    String name; // 회원명
    String id; // 회원 id

//  매개변수 2개짜리 생성자
    Member(String name, String id){
        this.name = name;
        this.id = name;
    };

}   // end of class
더보기
package chap06.Sec03.Verify.exam02;

/**
 * packageName : chap06.Sec03.Verify.exam02
 * fileName : MemberApplication
 * author : L.DH
 * date : 2023-09-20
 * description :    실행 클래스(Main)
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-20         L.DH         최초 생성
 */
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);

    }   // end of main
}   // end of class

연습문제) 생성자 오버로딩_this. 사용
chap06.sec03.Verify.exam03.Board 모델 클래스
chap06.sec03.Verify.exam03.BoardApplication 실행 클래스(Main)
더보기
package chap06.Sec03.Verify.exam03;

/**
 * packageName : chap06.Sec03.Verify.exam03
 * fileName : Board
 * author : L.DH
 * date : 2023-09-20
 * description :    모델 클래스(속성(필드), 생성자함수)
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-20         L.DH         최초 생성
 */
public class Board {
//  TODO : 속성(필드), 생성자함수, 함수(메소드)

//  TODO : 속성
    String title;   // 제목
    String content; // 내용
    String writer; // 작가

//  TODO : 생성자함수
//  매개변수 1개짜리 생성자
    public Board(String title) {
        this.title = title;
    }

//  매개변수 2개짜리 생성자
    public Board(String title, String content) {
        this.title = title;
        this.content = content;
    }

//  매개변수 3개짜리 생성자
    public Board(String title, String content, String writer) {
        this.title = title;
        this.content = content;
        this.writer = writer;
    }
}   // end of class
더보기
package chap06.Sec03.Verify.exam03;

/**
 * packageName : chap06.Sec03.Verify.exam03
 * fileName : BoardAppliction
 * author : L.DH
 * date : 2023-09-20
 * description :    실행 클래스(Main)
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-20         L.DH         최초 생성
 */
public class BoardAppliction {
    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("=======================");
        System.out.println("title2 : " + board2.title);
        System.out.println("content2 :" + board2.content);
        System.out.println("=======================");
        System.out.println("title3 : " + board3.title);
        System.out.println("content3 : " + board3.content);
        System.out.println("content3 : " + board3.writer);
    }   // end of main

}   // end of class

전원 켜는 함수 : 리턴값 없이 만들어보기
chap06.sec04.exam01.Calculator 모델 클래스 함수(멤버 메소드)
chap06.sec04.exam01.CalculatorApplication 실행 클래스(main)

- MVC 디자인 패턴 : M(Model), V(View), C(Controller)

- 함수 형태 사용법 : 접근제어자 리턴자료형 함수명(매개변수1, ... , 매개변수n){실행문;}
  ex) public void sample(int a, String b, double c){}
- 접근제어자 : public(공용), private(개인,*), default(생략, package 내에서는 사용가능), protected 등
- 함수이름 명명법 : 낙타표기법(카멜표기법), 첫글자는 소문자, 단어 + 단어는 대문자
- 매개변수 : 함수 실행 시 전달되는 데이터
- 리턴자료형 : 함수가 실행된 이후 결과값을 내보내기 할 떄 사용

- ***) 리턴값이 없는 함수 형태 호출 : 객체변수.함수();
- ***) 리턴값이 있는 함수 형태 호출 : ex) double result = 객체변수.함수(
더보기
package chap06.Sec04.exam01;

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

    double divide(int x, int y) {
        double result = (double) x / (double) y;

        return result;  // TODO : 결과 내보내기의 자료형(정수:int)
    }

}   // end of classpackage chap06.Sec04.exam01;

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

    double divide(int x, int y) {
        double result = (double) x / (double) y;

        return result;  // TODO : 결과 내보내기의 자료형(정수:int)
    }

}   // end of class
더보기
package chap06.Sec04.exam01;

/**
 * packageName : chap06.Sec04.exam01
 * fileName : CalculatorApplication
 * author : L.DH
 * date : 2023-09-20
 * description :   실행 클래스(main)
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-20         L.DH         최초 생성
 */
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);
//      결과 출력
        System.out.println(result);

        System.out.println("------------------------------");

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

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


    }   // end of main
    
}   // end of class

함수(메소드)
chap06.sec04.exam02.Computer 컴퓨터 모델 클래스(멤버 메소드)
chap06.sec04.exam02.ComputerApplication 실행 클래스(main)

- 함수(메소드)
배열을 함수의 매개변수로 사용하면 장점이 있음
실행시에 함수의 매개변수로 1개를 넣을지, 2개를 넣을지 정해지지 않았을 때 사용

- 더하기 함수 실행
- 곱하기 함수 실행
- 자바의 새로운 기능 : ... 연산자
...value : 매개변수의 각각의 변수를 배열로 만들어 줌
더보기
package chap06.Sec04.exam02;

/**
 * packageName : chap06.Sec04.exam02
 * fileName : Computer
 * author : L.DH
 * date : 2023-09-20
 * description :    컴퓨터 모델 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-20         L.DH         최초 생성
 */
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;    // TODO : 초기값
//      매개변수 배열의 개수까지 모두 더하는 로직
        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;
    }

}   // end of class
더보기
package chap06.Sec04.exam02;

/**
 * packageName : chap06.Sec04.exam02
 * fileName : ComputerApplication
 * author : L.DH
 * date : 2023-09-20
 * description :    실행 클래스(main)
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-20         L.DH         최초 생성
 */
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); // 6

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

//  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); // 6

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

    }   // end of main

}   // end of class

함수(메소드) .run() 실행
chap06.sec04.exam03.Car 컴퓨터 모델 클래스(멤버 메소드)
chap06.sec04.exam03.CarApplication 실행 클래스(main)
더보기
package chap06.Sec04.exam03;

/**
 * packageName : chap06.Sec04.exam03
 * fileName : Car
 * author : L.DH
 * date : 2023-09-20
 * description : 자동차 모델 클래스 / .run() 실행
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-20         L.DH         최초 생성
 */

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

}   // end of class

더보기
package chap06.Sec04.exam03;

/**
 * packageName : chap06.Sec04.exam03
 * fileName : CarApplication
 * author : L.DH
 * date : 2023-09-20
 * description : 실행 클래스 (main)
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-20         L.DH         최초 생성
 */
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 를 주입하세요");
        }

    }   // end of main
}   // end of class

계산기 모델 클래스 (덧셈, 평균 구하기)
chap06.sec04.exam04.Calculator
chap06.sec04.exam04.CalculatorApplication
더보기
package chap06.Sec04.exam04;

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

    /**
     * 덧셈 함수
     *
     * @param x
     * @param y
     * @return
     */
// TODO : 함수 : 덧셈, 평균, 계산실행
// 사용법 : 접근제한자 리턴자료형 함수명(매개변수...){}
    int plus(int x, int y) {
        int result = x + y;
        return result;
    }

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

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

    /**
     * 평균과 계산결과를 출력하는 실행 함수
     */
    void execute() {
//   1) 평균 함수
//      TODO : 자신의 클래스 내에서는 자유롭게 함수를 사용할 수 있음
        double result = avg(7, 10);
        println(result + "");   // TODO : "" 사용시 result 가 문자열로 변경됨
    }

}   // end of class
더보기
package chap06.Sec04.exam04;

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

}   // end of class

자동차 모델 클래스(시속 나타내기)
chap06.sec04.exam05.Car
chap06.sec04.exam05.CarApplication

- 현재 속성의 값을 구하는 함수 : getter 함수
- 사용법 : 리턴자료형 get속성명(){ return 속성명; }
- 자동화 기능 : alt + insert => getter 선택
- for (int i = 10; i <= 50; i = i + 10) { }
더보기
package chap06.Sec04.exam05;

/**
 * packageName : chap06.Sec04.exam05
 * fileName : Car
 * author : L.DH
 * date : 2023-09-20
 * description :    자동차 모델 클래스(시속 나타내기)
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-20         L.DH         최초 생성
 */
public class Car {
    //  TODO : 속성, 생성자함수, 함수(메소드)
//  속성
    int speed;  // 시속

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

    /**
     * 키를 돌립니다. 출력 함수
     */
    void keyTurnOn() {
        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)");
        }
    }

} // end of class
더보기
package chap06.Sec04.exam05;

/**
 * packageName : chap06.Sec04.exam05
 * fileName : CarApplication
 * author : L.DH
 * date : 2023-09-20
 * description :    실행 클래스(main)
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-20         L.DH         최초 생성
 */
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");
    } // end of main

}   // end of calss

연습문제) 함수의 오버로딩을 이용한 예제
계산기 모델 클래스 정사각형의 넓이 구하기, 직사각형의 넓이 구하기 함수 사용하기
chap06.sec04.exam06.Calculator
chap06.sec04.exam06.CalculatorApplication
더보기
package chap06.Sec04.exam06;

/**
 * packageName : chap06.Sec04.exam06
 * fileName : Calculator
 * author : L.DH
 * date : 2023-09-20
 * description :    연습문제)계산기 모델 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-20         L.DH         최초 생성
 */
public class Calculator {
// TODO : 속성(필드), 사용자함수, 함수(메소드)
// 속성생략
// 생성자생략

    /**
     * 정사각형의 넓이 구하기 함수
     * 사용법 : 접근제한자 리턴자료형
     * 매개변수 1개 사용
     */
    double areaRectangle(int w) {
        double result = (double) w * w;
        return result;
    }

    /**
     * 직사각형의 넓이 구하기 함수
     * 사용법 : 접근제한자 리턴자료형
     * 매개변수 2개 사용
     */
    double areaRectangle(int w, int h) {
        double result = (double) w * h;
        return result;
    }

}   // end of class
더보기
package chap06.Sec04.exam06;

/**
 * packageName : chap06.Sec04.exam06
 * fileName : CalculatorApplication
 * author : L.DH
 * date : 2023-09-20
 * description :    실행 클래스(main)
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-20         L.DH         최초 생성
 */
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);

    }   // end of main
}   // end of class

로그인 회원 관리 모델 클래스
chap06.sec04.verify.exam03.MemberService
chap06.sec04.verify.exam03.MemberServiceApplication
더보기
package chap06.Sec04.verify.exam03;

/**
 * packageName : chap06.Sec04.verify.exam03
 * fileName : MemberService
 * author : L.DH
 * date : 2023-09-20
 * description :    회원 관리 모델 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-20         L.DH         최초 생성
 */
public class MemberService {
// TODO: login 함수 :  id 가  "hong" 이고(&&) password 가 "12345" => true 리턴
// TODO : 속성(필드), 사용자함수, 함수(메소드)
// 속성생략
// 생성자생략
    boolean login(String id, String password) {
//  로직 완성하기
        if (id.equals("hong") && password.equals("12345")) {
            return true;
        } else {
            return false;
        }
    }

//  TODO: logout 함수 : 매개변수 id(문자열) : "hong이 로그아웃 되었습니다."가 출력
//                    logout("hong")
    void logout(String id) {
//        sout : id + "이 로그아웃 되었습니다."
        System.out.println(id + "이 로그아웃 되었습니다.");
    }

}   // end of class
더보기
package chap06.Sec04.verify.exam03;

/**
 * packageName : chap06.Sec04.verify.exam03
 * fileName : MemberServiceApplication
 * author : L.DH
 * date : 2023-09-20
 * description :    실행 클래스(main)
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-20         L.DH         최초 생성
 */

/**
 * 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가 올바르지 않습니다.");
        }
    }   // end of main
}   // end of class

모델 클래스(static 함수 정의하기) 공유함수 오버로딩 예제
chap06.sec04.verify.exam04.Printer
chap06.sec04.verify.exam04.PrinterApplication

- static 함수 정의하기
사용법 : static void 함수명(자료형 매개변수) { sout + 매개변수 ; }

- 공유함수 호출하는 방법
사용법 : 클래스명.공유함수명();
더보기
package chap06.Sec04.verify.exam04;

/**
 * packageName : chap06.Sec04.verify.exam04
 * fileName : Printer
 * author : L.DH
 * date : 2023-09-20
 * description :    모델 클래스(static 함수 정의하기)
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-20         L.DH         최초 생성
 */
public class Printer {
// TODO: login 함수 :  id 가  "hong" 이고(&&) password 가 "12345" => true 리턴
// TODO : 속성(필드), 사용자함수, 함수(메소드)
// 속성생략
// 생성자생략

// 함수(메소드)
    static void println(int input) {
        System.out.println("공유함수(int) : " + input);
    }

    static void println(boolean input) {
        System.out.println("공유함수(boolean) : " + input);
    }

    static void println(double input) {
        System.out.println("공유함수(double) : " + input);
    }

    static void println(String input) {
        System.out.println("공유함수(String) : " + input);
    }

}   // end of class
더보기
package chap06.Sec04.verify.exam04;

/**
 * packageName : chap06.Sec04.verify.exam04
 * fileName : PrinterApplication
 * author : L.DH
 * date : 2023-09-20
 * description :    실행 클래스(main)
 * 요약 :
 *          static 함수 정의하기
 *          사용법 : static void 함수명(자료형 매개변수) { sout + 매개변수 ; }
 *          공유함수 오버로딩 예제
 *          공유함수 호출하는 방법
 *
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-20         L.DH         최초 생성
 */

/**
 * TODO: 힌트 : static 함수 정의하기
 *      static void 함수명(자료형 매개변수) { sout + 매개변수 ; }
 * 결과 :
 *       공유함수(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("홍길동");
    }   // end of main

}   // end of class

업무로직 함수 : run 이용한 10 ~ 50 증가 속도 출력하는 로직 사용
chap06.sec05.exam01.CarApplication
chap06.sec05.exam01.CarApplication

- (클래스 분리)업무로직 : 업무로직 함수들만 작성
- setter 함수 이용해서 값을 수정 TODO:(좋은 코딩)
더보기
package chap06.Sec05.exam01;

/**
 * packageName : chap06.Sec05.exam01
 * fileName : Car
 * author : L.DH
 * date : 2023-09-21
 * description :    모델 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-21         L.DH         최초 생성
 */
public class Car {
//      TODO : 속성, 생성자, 함수
//      모델  : 속성, 생성자, setter, getter
//      (클래스 분리)업무로직 : 업무로직 함수들만 작성

    String model;   // 자동차 모델(suv, 세단)
    int speed;      // 속도

//  매개변수 1개짜리 생성자 : model
//  자동화기능 :alt + insert
    public Car(String model) {
        this.model = model;
    }

//  setter : speed 속성
//  자동화기능 :alt + insert
    public void setSpeed(int speed) {
        this.speed = speed;
    }

//  업무로직 함수 : run
//  달립니다 10 ~ 50 증가 속도 출력하는 로직
//  반복문 응용  (i++ => TODO : 변경 => i = i + 10)
//
    void run() {
        for (int i = 10; i <= 50; i = i + 10) {
//            this.speed = 1;   // 속성에 값을 넣는 행위(나쁜 코딩)
            this.setSpeed(i);   // setter 함수 이용해서 값을 수정 TODO:(좋은 코딩)
            System.out.println(this.model + "가 달립니다." + this.speed + "(km/h)");
        }
    }
    
}   // end of class
더보기
package chap06.Sec05.exam01;

/**
 * packageName : chap06.Sec05.exam01
 * fileName : CarApplication
 * author : L.DH
 * date : 2023-09-21
 * description :    실행 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-21         L.DH         최초 생성
 */
public class CarApplication {
    public static void main(String[] args) {
//      객체 생성
        Car car = new Car("포르쉐");
        Car car2 = new Car("벤츠");

//      결과 출력
        car.run();  // 반복문 출력
        car2.run();  // 반복문 출력

    }   // end of main
}   // end of class

정적(공유) 속성/함수를 사용하기(정적 변수(공유 변수, 전역 변수) 1개 생성(메소드 방))
chap06.sec05.exam02.Calculator
chap06.sec05.exam02.CalculatorApplication

- 정적(공유) 속성
사용법 : static 접근제한자 리턴자료형 함수명(){} : 정적 함수

- 정적(공유) 속성 변수
사용법 : static 자료형 속성명;
더보기
package chap06.Sec05.exam02;

/**
 * packageName : chap06.Sec05.exam02
 * fileName : Calculator
 * author : L.DH
 * date : 2023-09-21
 * description :    정적 변수(공유 변수, 전역 변수) 1개 생성(메소드 방)
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-21         L.DH         최초 생성
 */
public class Calculator {
//  정적(공유) 속성
//  static 접근제한자 리턴자료형 함수명(){} : 정적 함수
//  TODO : 정적(공유) 속성 변수
//         사용법 : static 자료형 속성명;
    static double pi = 3.14;

    /**
     * 정적(공유) 덧셈 함수
     */
    static int plus(int x, int y) {
        return x + y;
    }

    /**
     * 정적(공유) 뺼셈 함수
     */
    static int minus(int x, int y) {
        return x - y;
    }

}   // end of class
더보기
package chap06.Sec05.exam02;

/**
 * packageName : chap06.Sec05.exam02
 * fileName : CalculatorApplication
 * author : L.DH
 * date : 2023-09-21
 * description :    실행 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-21         L.DH         최초 생성
 */
public class CalculatorApplication {
    public static void main(String[] args) {
//      정적(공유) 속성/함수를 사용하기
//      TODO : 객체 생성이 필요없음 -> 바로 호출 : 클래스명.함수명, 클래스명.속성명
//             클래스명 : Calculator
        double result1 = 10 * 10 * Calculator.pi;     // 원의 넓이
        int result2 = Calculator.plus(10, 5);    // 덧셈 계산
        int result3 = Calculator.minus(10, 5);   // 뺄셈 계산

//      결과 출력
        System.out.println("result1 : " + result1);
        System.out.println("result2 : " + result2);
        System.out.println("result3 : " + result3);

    }   // end of main
}   // end of class
정적(공유) 속성/함수 사용시 주의점(참고)
chap06.sec05.exam03.Car

- public static void main 같은 클래스라도 객체를 생성해서 속성을 사용해야 함
- this. 사용 시 에러 발생(일반 속성을 자유롭게 사용 할 수 없음)
더보기
package chap06.Sec05.exam03;

/**
 * packageName : chap06.Sec05.exam03
 * fileName : Car
 * author : L.DH
 * date : 2023-09-21
 * description :    정적(공유) 속성/함수 사용시 주의점(참고)
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-21         L.DH         최초 생성
 */
public class Car {
    // 속성
    int speed;

    // 함수
    void run() {
        System.out.println(speed + "으로 달립니다.");
    }

    public static void main(String[] args) {
//        this.speed; // TODO : 에러 발생(일반 속성을 자유롭게 사용 할 수 없음)
//        TODO : 같은 클래스라도 객체를 생성해서 속성을 사용해야 함
        Car car = new Car();
        car.speed = 60;
        car.run();
    }

} // end of class

 


디자인 패턴(23)_생성(5)_싱글톤 패턴 1
chap06.sec05.exam04.Singleton
chap06.sec05.exam04.SingletonApplication

- 목적 : 공유(정적, 전역) 객체 : 객체의 상태를 공유하기 위한 목적
- 정적(공유) 속성 변수/함수

- 1) 클래스 내에서 없으면 1개만 생성되게 해야함
- 2) 일단 다른 객체에서 생성을 못하게 막아야함 : 공유(정적) 객체(오직 1개)
      => 다른 객체에서 이 객체의 생성자함수 접근을 막아야함 : private 생성자
-3) 다른 객체에서 만들어진 객체를 사용하게 허가함 : 정적(공유)함수
     => getInstance() 함수를 호출하면 공유속성 singleton 전달받음
- 실행클래스 : 공유 객체 테스트(2개를 만들어서 주소(방번호)가 같은 지 확인)
   같은 주소(방번호) 갖는 지 확인 : 공유객체인지 확인// 비교연산자(=)
더보기
package chap06.Sec05.exam04;

/**
 * packageName : chap06.Sec05.exam04
 * fileName : Singleton
 * author : L.DH
 * date : 2023-09-21
 * description : 디자인 패턴(23)_생성(5)_싱글톤 패턴 1
 * 요약 : 목적 : 공유(정적, 전역) 객체 : 객체의 상태를 공유하기 위한 목적
 *       정적(공유) 속성 변수/함수
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-21         L.DH         최초 생성
 */
public class Singleton {
//  TODO:  1) 클래스 내에서 없으면 1개만 생성되게 해야함
    private static Singleton singleton = new Singleton(); // 객체 1개 생성

//  TODO: 2) 일단 다른 객체에서 생성을 못하게 막아야함 : 공유(정적) 객체(오직 1개)
//          => 다른 객체에서 이 객체의 생성자함수 접근을 막아야함 : private 생성자
    private Singleton() {
    }

//  TODO: 3) 다른 객체에서 만들어진 객체를 사용하게 허가함 : 정적(공유)함수
    static Singleton getInstance() {
//      getInstance() 함수를 호출하면 공유속성 singleton 전달받음
        return singleton;
    }

}
더보기
package chap06.Sec05.exam04;

/**
 * packageName : chap06.Sec05.exam04
 * fileName : SingletonApplication
 * author : L.DH
 * date : 2023-09-21
 * description : 실행클래스 : 공유 객체 테스트(2개를 만들어서 주소(방번호)가 같은 지 확인)
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-21         L.DH         최초 생성
 */
public class SingletonApplication {
    public static void main(String[] args) {
        Singleton singleton1 = Singleton.getInstance(); // 공유(정적) 함수 호출
        Singleton singleton2 = Singleton.getInstance(); // 공유(정적) 함수 호출

//      TODO: 같은 주소(방번호) 갖는 지 확인 : 공유객체인지 확인
//            비교연산자(=)
        if (singleton1 == singleton2) {
            System.out.println("같은 공유 객체입니다.");
        } else {
            System.out.println("다른 객체입니다.");
        }
    }

}

final 상수 사용법
chap06.Sec05.exam05.Person
chap06.Sec05.exam05.PersonApplication

- 변수 : 중간에 값을 바꿀수 있는 것
- 상수 : 중간에 값을 바꿀수 없는 것
- 상수 사용법 :
- 1) final 자료형 속성명 = "초기값";
- 2) final 자료형 속성명; , 생성자를 이용해 상수 초기화


더보기
package chap06.Sec05.exam05;

/**
 * packageName : chap06.Sec05.exam05
 * fileName : Person
 * author : L.DH
 * date : 2023-09-21
 * description : final(상수) 예제
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-21         L.DH         최초 생성
 */
public class Person {
//   TODO :  속성, 생성자, 함수
//           변수 : 중간에 값을 바꿀수 있는 것
//           상수 : 중간에 값을 바꿀수 없는 것
//           상수 사용법 : 1) final 자료형 속성명  = "초기값";
//                       2) final 자료형 속성명; , 생성자를 이용해 상수 초기화

//  1) final 자료형 속성명 = "초기값";
    final String nation = "Korea";  // 국가

//  2) final 자료형 속성명; , 생성자를 이용해 상수 초기화(참고)
    final String ssn;   // 시리얼 번호(상수)
    String name;        // 일반 속성

//  생성자 : 자동화기능 : alt + insert(ssn, name)
    public Person(String ssn, String name) {
        this.ssn = ssn;
        this.name = name;
    }

}   // end of class
더보기
package chap06.Sec05.exam05;

/**
 * packageName : chap06.Sec05.exam05
 * fileName : PersonApplication
 * author : L.DH
 * date : 2023-09-21
 * description : 실행클래스(main)
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-21         L.DH         최초 생성
 */
public class PersonApplication {
    public static void main(String[] args) {
//      객체 생성
        Person person = new Person("123456-123456", "홍길동");

//      상수 출력
        System.out.println(person.nation);  // 상수
        System.out.println(person.ssn);  // 상수
        System.out.println(person.name);  // 변수

//      테스트 : 상수/변수
        person.name = "강감찬";
//      person.nation = "CANADA"; // TODO : 상수 변경 에러 발생(상수이므로 변경불가)
        System.out.println(person.name);  // 변수 변경 가능
    }   // end of main

}   // end of class

공유(정적, 전역) 상수(static final)
chap06.Sec05.exam06.Earth
chap06.Sec05.exam06.EarthApplication

- 공유(정적) 상수 명명법 : 모두 대문자
- 공유(정적) 함수/변수/상수 : 클래스명.상수명(객체생성 없음)
더보기
package chap06.Sec05.exam06;

/**
 * packageName : chap06.Sec05.exam06
 * fileName : Earth
 * author : L.DH
 * date : 2023-09-21
 * description : 공유(정적, 전역) 상수(static final)
 * 요약 : 공유(정적) 상수 명명법 : 모두 대문자
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-21         L.DH         최초 생성
 */
public class Earth {
//  지구 반지름 속성
    static final double EARTH_RADIUS = 6400;

// 지구의 표면적 : 공식 : 4 * 3.14 * 지구반지름 * 지구반지름
    static final double EARTH_AREA = 4 * Math.PI * EARTH_RADIUS * EARTH_RADIUS;
}   // end of class
더보기
package chap06.Sec05.exam06;

/**
 * packageName : chap06.Sec05.exam06
 * fileName : EarthApplication
 * author : L.DH
 * date : 2023-09-21
 * description : 실행 클래스
 * 요약 : 공유(정적) 함수/변수/상수 : 클래스명.상수명(객체생성 없음)
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-21         L.DH         최초 생성
 */
public class EarthApplication {
    public static void main(String[] args) {
//  결과 출력 : 지구 반지름, 표면적
//  TODO : 공유(정적) 함수/변수/상수 : 클래스명.상수명(객체생성 없음)
        System.out.println("지구의 반지름 : " + Earth.EARTH_RADIUS + " km");
        System.out.println("지구의 표면 : " + Earth.EARTH_AREA + " km^2");
    }   // end of main

}   // end of class

객체 지향 코딩 샘플
chap06.Sec06.exam06.Car
chap06.Sec06.exam06.CarApplication

- 1) 속성 : 외부 객체에서 속성 접근 못하게 막기 : private 자료형 속성;
- 2) 함수 : 외부 객체에서 함수 2개 제공 : public setter(), public getter() 함수

- setter 함수 : 속성에 값을 저장하는 함수 ex) set속성명()
- this. 이용시 버그의 가능성이 있어 if 문 이용하여 코드 수정

- getter 함수 : 속성에 현재값을 확인하는 함수 ex) get속성명()
- boolean으로 getter를 생성하면 is로 생성함
더보기
package chap06.Sec06.exam06;

/**
 * packageName : chap06.Sec06.exam06
 * fileName : Car
 * author : L.DH
 * date : 2023-09-21
 * description : 객체 지향 코딩 샘플
 * 요약 :
 * 1) 속성 : 외부 객체에서 속성 접근 못하게 막기 : private 자료형 속성;
 * 2) 함수 : 외부 객체에서 함수 2개 제공 : public setter(), public getter() 함수
 * setter 함수 : 속성에 값을 저장하는 함수     ex) set속성명()
 * getter 함수 : 속성에 현재값을 확인하는 함수  ex) get속성명()
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-21         L.DH         최초 생성
 */
public class Car {
    //      TODO : 속성, 생성자, 함수(메소드)
//      속성(필드)
// TODO : private 외부에서 사용불가 내부 클래스에서 적용
    private int speed;  // 속도
    private boolean stop; // 상태
    int defaultValue;   // default 테스트 속성

//  생성자 생략
//  TODO  : 함수 : speed 속성(setter/getter), stop 속성(setter/getter) : alt + insert


    public int getSpeed() {
        return speed;
    }

    /**
     * 자동차의 속도(speed) 를 저장/수정하는 함수
     * 속도계 : 음수가 나오면 안됨(음수가 나오면 0으로 강제 저장)
     *
     * @param speed
     */
//  TODO : this. 이용시 버그의 가능성이 있어 if 문 이용하여 코드 수정
    public void setSpeed(int speed) {
        if (speed < 0) {
            this.speed = 0;
            return; // berak (함수에서)
        }
        // 아니면 그냥 저장
        this.speed = speed;
    }

    // TODO : boolean으로 getter를 생성하면  is로 생성함
    public boolean isStop() {
        return stop;
    }

    /**
     * 자동차 정지하면 속도 = 0 이 되야함
     *
     * @param stop
     */
//  TODO : this. 이용시 버그의 가능성이 있어 if 문 이용하여 코드 수정
    public void setStop(boolean stop) {
        this.stop = stop;
//      속도 = 0
        this.speed = 0;
    }
}
더보기
package chap06.Sec06.exam06;

/**
 * packageName : chap06.Sec06.exam06
 * fileName : CarApplication
 * author : L.DH
 * date : 2023-09-21
 * description :    실행 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-21         L.DH         최초 생성
 */
public class CarApplication {
    public static void main(String[] args) {
//      객체 생성
        Car car = new Car();

//      TODO : 테스트 : 속도 음수 넣기
        car.setSpeed(-50);
//      결과 출력
        System.out.println("현재 속도 : " + car.getSpeed());    // 현재 속도 : 0
//      TODO : 테스트 확인 : 정상

//      TODO : 올바른 속도 변경 : 60
        car.setSpeed(60);
//      결과 출력
        System.out.println("현재 속도 : " + car.getSpeed());    // 현재 속도 : 60
//      TODO : 속도 확인 : 정상

//      멈춤
        if(!car.isStop()) {      // 자동차 상태 읽기    // TODO : 가정 : 자동차 속도가 0이(멈춤) 이 아니라면
            car.setStop(true);   // 자동차 멈춤        // TODO : 가정 :  속도 0으로 만들어라
        }
        System.out.println("현재 속도 : " + car.getSpeed());    // 현재 속도 읽기
    }

}

'Java' 카테고리의 다른 글

[Java] chapter_08  (0) 2023.09.22
[Java] chapter_07  (0) 2023.09.21
[Java] chapter_04 ~ 05  (0) 2023.09.19
[Java] chapter_01 ~ 03  (0) 2023.09.18
[JAVA] 자료형과 변수의 기본 문법언어 특성 및 소스 코드 구성  (0) 2023.08.20