데일리로그C:

<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밖에 안됨
		
	}
}
profile

데일리로그C:

@망밍

포스팅이 도움됐다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...