패키지 형태
- 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 |