<1교시 ch5-Test02, Lotto>
package ex01;
import java.util.Arrays;
public class Test02 { //로또연습
public static void main(String[] args) {
int[] b = new int[10]; // 10개 index[0]~[9]
for(int i=0; i<b.length; i++) {
b[i] = i+1; // 0~9이므로 1씩 더해줘야함
}
System.out.println(Arrays.toString(b));
//Arrays.toString(b);
for (int i =0; i<100; i++) { //100번 섞이게
int x = (int)(Math.random()*10); // 0~9 랜덤값
int y = (int)(Math.random()*10); // 0~9 랜덤값
int temp = b[x]; // temp라는 저장공간에 랜덤값 x 저장하기(그 값은 사라짐)
b[x] = b[y]; // 빈 x에 랜덤값 y 저장하기
b[y] = temp; // 그 랜덤값 y를 temp에 저장하기
System.out.println(Arrays.toString(b));
}
// 6자리 배열 만들기
// 6개의 숫자를 가져온 후
Arrays.sort(b); // 정렬
}
}
package ex01;
import java.util.Arrays;
public class Lotto {
public static void main(String[] args) {
// 로또뽑기
int[] a = new int[45];
for(int i = 0; i<a.length; i++) { //[0]~[44]
a[i] = i +1;
}
//System.out.println(Arrays.toString(a));
// 랜덤값 돌리기
for(int j=1; j<=5; j++) { // 5번 돌리기
for(int i =0; i<300; i++) { // 1번 돌리기
int rd1 = (int)(Math.random()*45);
int rd2 = (int)(Math.random()*45);
int rdBox = a[rd1];
a[rd1] = a[rd2];
a[rd2] = rdBox;
//System.out.println(Arrays.toString(a));
}
// 1~45개 중 6개 뽑기
int[] lt = new int[6];
for(int i = 0; i<lt.length; i++) {
lt[i] = a[i];
}
//System.out.println(Arrays.toString(lt));
Arrays.sort(lt); // 오름차순(작 - 큰)
System.out.println(Arrays.toString(lt));
}
}
}
<2교시 ch06>
클래스
1. 라이브러리용 (ex) Car.java
1) 필드 : 데이터 저장
--> int, String, 등등
--> 우클릭 > source > Generate getters and setters ( set : 입력 / get : 출력 )
--> 우클릭 > source > Generate toString( )
2) 생성자 : 초기화
--> 기본생성자이므로 생략 가능, 클래스이름, 리턴X, 대문자
3) 메소드 : 실행, 동작
2. 실행용 (ex) CarTest.java
2) 생성자
기본생성자 : 매개변수가 없는 생성자 (ex) Car ( ) != 함수(메소드) : 소문자로 시작하고 리턴타입
--> new 연산자 옆에 쓰임
--> 대문자로 시작함(클래스명과 동일)
--> 리턴 없음
--> 생략 가능
매개변수를 이용한 생성자를 써야한다면 위에 기본생성자도 같이 쓰기 - 라이브러리 클래스 [Car]
public Car ( ) { // 기본생성자
}
public Car ( 매개변수1 ) { // 매개변수를 이용한 생성자
}
오버로딩(overloading)
: 매개변수의 타입, 개수, 순서가 다르게 여러 생성자를 선언(타입이 같은 순서라면 오류남, String int 위치가 달라야함)
다른생성자 호출 : this ( 매개변수, ..... , 값, ....) ; --> 잘안씀!!
--> 생성자의 첫 줄에만 적을 수 있음
--> 중복 코드 최소화할 수 있음
package ex01;
public class Car {
// 라이브러리 클래스
// 필드
String company = "현대자동차";
String model = "그랜저";
String color = "검정";
int maxSpeed = 350;
int speed;
// 기본생성자
public Car() {
}
// 매개변수 3개를 이용한 생성자(객체자신의 참조한다고 this.필드명 = 매개변수; 적기)
public Car(String model, String color, int maxSpeed) {
this.model = model;
this.color = color;
this.maxSpeed = maxSpeed;
}
// 매개변수 2개를 이용한 생성자(객체자신의 참조한다고 this.필드명 = 매개변수; 적기)
public Car(String company, String model) {
this.company = company;
this.model = model;
}
@Override
public String toString() {
return "Car [company=" + company + ", model=" + model + ", color=" + color + ", maxSpeed=" + maxSpeed
+ ", speed=" + speed + "]";
}
}
package ex01;
public class CarTest {
// 실행 클래스
public static void main(String[] args) {
// 객체생성
// 오버로딩
Car c = new Car();
/*
System.out.println(c.company);
System.out.println(c.model);
System.out.println(c.color);
System.out.println(c.maxSpeed);
System.out.println(c.speed);
*/
// 필드 변경
c.speed = 60; // 대입
System.out.println(c.toString()); // 위와 동일한 기능임
Car c1 = new Car("아반떼","빨강",300);
System.out.println(c1.toString());
Car c2 = new Car("삼성자동차","sm3");
System.out.println(c2.toString());
}
}
[p244 Q02]
package ex01;
public class Q2 {
String name;
String id;
public Q2() {
}
//오버로딩
public Q2(String name, String id) {
this.name = name;
this.id = id;
}
@Override // 오버라이드(다른 곳에 만들어져있는 메소드를 가져와서 재정의할때 사용)
public String toString() {
return "Q2 [name=" + name + ", id=" + id + "]";
}
}
package ex01;
public class Q2Test {
public static void main(String[] args) {
Q2 q = new Q2();
Q2 q1 = new Q2("홍길동","hong");
System.out.println(q1.toString());
}
}
<3교시>
오버라이드(override)
: 다른 곳에 만들어져있는 메소드를 가져와서 재정의할때 사용
[p245 Q03]
package ex01;
public class Q3 {
String id;
String pass;
String name;
String phone;
String email;
public Q3() {
}
public Q3(String id, String pass, String name, String phone, String email) {
this.id = id;
this.pass = pass;
this.name = name;
this.phone = phone;
this.email = email;
}
@Override
public String toString() {
return "Q3 [id=" + id + ", pass=" + pass + ", name=" + name + ", phone=" + phone + ", email=" + email + "]";
}
}
package ex01;
import java.util.Scanner;
public class Q3Test {
public static void main(String[] args) {
// Scanner 클래스 이용 : 키보드 입력을 받아 회원가입 처리
// 아이디:
// 비밀번호:
// 이름:
// 연락처:
// 메일주소:
// 객체.toString() 이용해 출력하시오
Q3 q = new Q3();
Scanner sc = new Scanner(System.in);
Q3 q3 = new Q3();
System.out.print("아이디: ");
q3.id = sc.nextLine();
System.out.print("비밀번호: ");
q3.pass = sc.nextLine();
System.out.print("이름: ");
q3.name = sc.nextLine();
System.out.print("연락처: ");
q3.phone = sc.nextLine();
System.out.print("메일주소: ");
q3.email = sc.nextLine();
System.out.println("===================회원가입====================");
System.out.println(q3.toString());
}
}
[p246 Q04]
package ex01;
public class Q4 {
String h; // subject
String t; // comment
String name;
String date;
public Q4() { // 기본생성자
}
public Q4(String h) { // 매개변수 1
this.h = h;
}
public Q4(String h, String t) { // 매개변수 2
this.h = h;
this.t = t;
}
public Q4(String h, String t, String name) { // 매개변수 3
this.h = h;
this.t = t;
this.name = name;
}
public Q4(String h, String t, String name, String date) { // 매개변수 4
this.h = h;
this.t = t;
this.name = name;
this.date = date;
}
public String getH() {
return h;
}
public void setH(String h) {
this.h = h;
}
public String getT() {
return t;
}
public void setT(String t) {
this.t = t;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
@Override
public String toString() {
return "Q4 [h=" + h + ", t=" + t + ", name=" + name + ", date=" + date + "]";
}
}
package ex01;
public class Q4Test {
public static void main(String[] args) {
//게시판
// 제목, 내용, 글쓴이, 작성일 4개의 변수를 이용
Q4 q = new Q4(); // 기본생성자
q.h="제목이다";
q.t="내용이다";
q.name="홍길동";
q.date="2023-01-11 12:02:22";
System.out.println(q.toString());
Q4 q1 = new Q4("제목1"); // 매개변수 1개
q1.t="내용1이다";
q1.name="홍길동1";
q1.date="2023-01-11 12:04:22";
System.out.println(q1.toString());
Q4 q2 = new Q4("제목2","내용2"); // 매개변수 2개
q2.setName("홍길동2");
q2.setDate("2023-01-11 12:05:22");
System.out.println(q2.toString());
Q4 q3 = new Q4("제목3","내용3","홍길동3"); // 매개변수 3개
q2.date="2023-01-11 12:07:22";
System.out.println(q3.toString());
Q4 q4 = new Q4("제목4","내용4","홍길동4","2023-01-11 12:10:22"); // 매개변수 4개
System.out.println(q4.toString());
}
}
<4교시>
3) 메소드
리턴타입 메소드이름 ( 매개변수 ) {
실행
}
(ex1)
void powerOn( ) {
System.out.println("전원ON")
}
(ex2)
int plus(int x, int y) {
return x + y;
}
리턴타입
(1) 리턴값 없음. 출력만 : void
--> main 리소드
--> 리턴문(return; ) : 메소드 실행 종료 = break문
(2) 리턴값 있음 : double, int 등등
--> 반드시 리턴문(맨마지막에 적기)으로 리턴값 지정해야함 (ex) return result; or return x+y;
메소드 이름
--> 예약어 불가능
--> 소문자로
* 동일한 변수명, 매개변수가 여러 메소드에 적혀도 상관없는 이유 [ Cal result, intx inty 등등 ]
ㄴ> 하나의 메소드를 실행하여 값을 반환(return)하고나면 메모리상에서 사라지기 때문
ㄴ> 메소드 안에 있는 변수명, 매개변수는 그 해당 메소드안에서만 이용되기 때문
* public 접근제한자 :
[p250 예제]
package ex04;
public class Cal {
void powerOn() { // void 리턴값 없음. 출력만함
System.out.println("전원 ON");
}
int plus(int x,int y) { // 더하기 함수(매개변수 있음)
int result = x + y; // result 변수에 더한 값 넣기
return result; // result를 반환
// return x + y; 위 두줄을 한줄로 만들어도 됨
}
double divide(int x, int y) { // 나누기 함수
double result = x / (double)y;
return result;
}
void powerOff() {
System.out.println("전원 OFF");
}
}
package ex04;
public class CalTest {
public static void main(String[] args) {
Cal c = new Cal();
c.powerOn(); // 메소드 실행(전원 ON)
//c.plus(2, 3); 5(result에 담아져있음 출력 x)
int result = c.plus(2,3);
System.out.println(result); // 5 출력
// c.divide(1, 2); 0.5 값 가지고있음
double result1 = c.divide(1, 2);
System.out.println(result1); // 0.5 출력
c.powerOff(); // 메소드 실행(전원 OFF)
}
}
[p256 예제]
package ex04;
public class Car {
int gas;
public void setGas(int gas) {
this.gas = gas;
}
boolean isLeftGas() { // if, else 다 작성해야함
if(gas==0) {
System.out.println("gas가 없습니다.");
return false;
} else { // else 생략하고 내용만 적어도됨
System.out.println("gas가 있습니다.");
return true;
}
}
void run( ) {
while(true) {
if(gas>0) {
System.out.println("달립니다.(gas잔량: " + gas + ")");
gas --; // 달릴때마다 1씩 차감
} else {
System.out.println("멈춥니다.(gas잔량: " + gas + ")");
return; // break;
}
}
}
}
package ex04;
public class CarTest {
public static void main(String[] args) {
Car c = new Car();
c.setGas(5); // c.gas = 5; 와 동일
boolean gasState = c.isLeftGas(); // true or false 값 가짐
if(gasState) {
System.out.println("출발합니다.");
c.run();
}
if(c.isLeftGas()) {
System.out.println("가스를 주입할 필요가 없습니다.");
} else {
System.out.println("가스를 주입하세요.");
}
}
}
[p260 예제]
package ex04;
public class Page260 {
int plus(int x, int y) {
int result = x + y;
return result;
}
double avg(int x, int y) {
double sum = plus(x, y); // 17 --> 17.0
double result = sum / 2; // 17.0 / 2 = 8.5
return result;
}
void execute() {
double result = avg(7,10); // 매개변수값( x =7, y=10) 8.5
println("실행결과: " + result);
}
void println(String message) {
System.out.println(message); // 실행결과: 8.5
}
}
package ex04;
public class Page260Test {
public static void main(String[] args) {
Page260 p = new Page260();
p.execute(); // 8.5
}
}
<5교시>
메소드 안에 다른 메소드 x
메소드 안에 다른 메소드를 실행하는 건 가능
메소드 오버로딩 : 클래스 안에 같은 메소드(함수) 여러개이지만 각 메소드의 매개변수가 다름
[p262 예제]
package ex05;
public class Car {
//필드
int speed;
//생성자
//메소드
int getSpeed() {
return speed;
}
void keyTurnOn() {
System.out.println("키를 돌립니다.");
}
void run() {
for(int i=10; i<=50; i+=10) {
speed = i;
System.out.println("달립니다.(시속:" + speed + "km/h)");
}
}
}
package ex05;
public class CarTest {
public static void main(String[] args) {
Car c = new Car();
c.keyTurnOn();
c.run();
int speed = c.getSpeed();
System.out.println("현재속도: " + speed + "km/h");
}
}
<6교시>
[p268 Q03]
package ex05;
public class MemberService {
// 필드
//생성자
//메소드
boolean login(String id, String pass) {
if(id.equals("hong") && pass.equals("12345")) {
return true;
} else {
return false;
}
}
void logout(String id) {
if(id.equals("hong")) {
System.out.println("로그아웃 되었습니다.");
}
}
}
package ex05;
public class MemberServiceTest {
public static void main(String[] args) {
MemberService m = new MemberService();
boolean result = m.login("hong", "12345");
if(result) {
System.out.println("로그인 되었습니다.");
m.logout("hong"); // 바로 로그아웃 처리
} else {
System.out.println("id 또는 pass가 올바르지 않습니다.");
}
}
}
[p269 Q04]
package ex05;
public class Printer {
// 필드
// 생성자
// 메소드 (리턴받아서 하는게 아니므로 void 처리)
void println(int x) {
System.out.println(x);
}
void println(boolean x) {
System.out.println(x);
}
void println(double x) {
System.out.println(x);
}
void println(String x) {
System.out.println(x);
}
}
package ex05;
public class PrinterTest {
public static void main(String[] args) {
Printer p = new Printer();
p.println(10);
p.println(true);
p.println(5.7);
p.println("홍길동");
}
}
클래스 = 객체의 설계도
1) 인스턴스(=객체) 멤버 : 필드, 생성자, 메소드 ( 객체 생성 : Cal a = new Cal( ); )
--> this 참조 사용
2) 정적(static) 멤버
--> 클래스에 고정된 멤버
--> 객체없이 사용할 수 있는 필드, 메소드를 의미
--> 클래스이름으로 접근
--> 공용데이터인 경우 사용
--> 클래스.필드; / 클래스.메소드(매개변수); 형식
--> this 참조 불가능
싱글톤
: 단 하나의 객체만 생성 (new연산자 이용해 객체 생성 불가능)
ㄴ> 만들어진 싱글톤만 사용할 예정
ㄴ> ex) 로그인 하나만 되는경우(다른곳에 로그인하면 앞에 했던건 로그아웃되는 경우)
* private 접근제한자 : 보안때문에 사용 (외부에서 수정 불가능)
[p276 예제]
package ex05;
public class Cal {
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;
}
}
package ex05;
public class CalTest {
public static void main(String[] args) {
int a = Cal.minus(10, 5);
System.out.println(a);
/* 원래 이건데 static을 사용함으로써 위처럼 사용할 수 있음
Cal aa = new Cal();
int b = aa.minus(10, 5);
System.out.println(b);
*/
plus(10,5);
// minus(10,5); CalTest 안에 static이 없다면 오류남
CalTest c = new CalTest(); // 아니면 이렇게 객체를 사용해야함
c.minus(10, 5);
}
static int plus(int x, int y) {
return x + y;
}
int minus(int x, int y) {
return x - y;
}
}
[싱글톤 예제]
package ex05;
import java.util.Calendar;
public class Calendar2 {
public static void main(String[] args) {
// 대표적인 싱글톤 클래스 & 정적 멤버 가지고있음 (Calendar)
Calendar c = Calendar.getInstance();
int day = c.get(Calendar.DATE); // 일
int month = c.get(Calendar.DAY_OF_MONTH +1); // 월
int year = c.get(Calendar.DAY_OF_YEAR); // 년도
}
}
<7교시>
상수(static final)
--> 변수명을 대문자로 ex) DATE, DAY_OF_MONTH 등
--> 값을 변경할 수 없는 수(불변의 값) ex) 원주율 파이, 지구 둘레 등등
--> static 이면서 final이어야 함
--> 공용성 띔(객체마다 저장 x) : 클래스에만 존재
final 필드
--> 한번 초기화되면 수정 불가능 ( = 최종값)
--> 객체마다 저장됨
--> 여러가지 매개값을 가짐
final 리턴타입 필드 = 초기값;
static 리턴타입 상수(대문자로) = 초기값;
[p281 예제]
package ex05;
public class Person {
final String nation = "korea"; // 고정이므로 값 안받음
final String snn; // 초기화 한번은 받아야함
String name; // 값 받든 안받든 상관없음
public Person(String snn, String name) { // 초기화 처리 안되어있으니 매개변수를 이용해라
this.snn = snn;
this.name = name;
}
}
package ex05;
public class PersonTest {
public static void main(String[] args) {
Person p = new Person("123456-123456","홍길동"); // 기본생성자 안되므로 매개변수 입력, snn 초기화
// p.nation = "dkfd"; final 처리되어있기 때문에 업데이트 안됨
// p.snn = "dkfd"; final 처리되어있기 때문에, 한번 초기화 했기때문에 업데이트 안됨
p.name = "홍길똥";
System.out.println(p.nation);
}
}
상위패키지.하위패키지.클래스 순으로 구성
ㄴ> 패키지(소문자로만) = 폴더, 클래스(첫글자만 대문자로) = 파일
접근제한자
"범위 좁음" "제한 강함" private < default < protected < public "제한 약함" "범위 넓음"
private : 클래스 내에서만 사용 가능(외부 사용 X)
default : 같은 패키지에 소속된 클래스에서만, 선언할때 접근제한자 생략하면 적용됨
protected : 같은 패키지에 소속된 클래스 or 자식 클래스 사용
public : 어떤 클래스에서라도 접근 가능, 형제(동일)패키지 가능
package ex06;
public class AccessTest {
// private < default < protected < public
//private :
// private 붙은 변수, 메소드는 해당 클래스에서만 접근 가능
//default :
//접근 제어자가 없는 변수, 메소드는 default 접근제어자가 생략, 해당 패키지 내에서만 접근 가능
// protected :
//protected 붙은 변수, 메소드는 동일 패키지내의 클래스 또는 클래서를 상속 받은 외부 패키지의 클래스에서 접근 가능
// public :
//public 붙은 변수, 메소드는 어떤 클래스에서라도 접근 가능
}
Getter & Setter 메소드
package ex06;
public class Member { // 클래스명이 적힌 부분에만 public 적을 수 있음 (머리에만)
String id;
private String pass;
// 우클릭 > source > getter & setter 실행
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
// 우클릭 > source > toString 실행
@Override
public String toString() {
return "Member [id=" + id + ", pass=" + pass + "]";
}
}
class Test { // public 적으면 안됨
public static void main(String[] args) {
Member m = new Member();
m.id = "";
m.setId("");
m.setPass(""); // private 붙어있어서 set밖에 안됨
}
}
'JAVA > jsp' 카테고리의 다른 글
230113_추상클래스, 인터페이스(jsp 시작) (0) | 2023.01.13 |
---|---|
230112_상속, 오버라이딩, 다형성 (0) | 2023.01.12 |
230110_참조, 배열, 객체, 필드 (0) | 2023.01.10 |
230109_삼항연산자, 조건문, 반복문,은행 (0) | 2023.01.09 |
230106_ JAVA(타입변환, 전역지역변수, 피라미드) (0) | 2023.01.06 |