작성 :  2024. 4. 8. 

 

자바 언어를 배우는 순서 및 목록

  1. 자바의 특징
  2. 코드 구조
  3. 변수와 자료형
  4. 구문규칙 및 주석
  5. 자료형 ( 숫자, 불, 문자, 문자열, StringBuffer, 배열, 리스트, 맵, 집합, 상수집합, 형변환과 final)
  6. 제어문
  7. 객체지향 - 클래스, 매서드, 호출
  8. 상속
  9. 생성자
  10. 인터페이스
  11. 다향성
  12. 추상클래스
  13. 입출력
  14. 패키지
  15. 접근 제어자
  16. 스태틱
  17. 예외처리
  18. 스레드
  19. 함수형 프로그래밍

지난 주 클래스까지 배움. 자료형을 다 다뤄보진 않아서 알고 넘어가는 게 필요할 것 같다.

미리 책을 살펴봤을 때 ‘다향성’ 부분이 이해가 잘 안되던데 수업에서는 어떻게 다룰지 잘 들어봐야겠다.

  • 매개 변수 - call by reference (참조형 (주소값)) : 클래스명, 배열
// 일단 클래스를 하나 만들기, 주소값을 사용하기 위해 참조할 주소가 되는 클래스 

public class Data {

// call by reference (참조형 (주소값)) : 클래스명, 배열
// 0408 수업
// 맴버변수 하나 저장

int x;
}

 

// call by reference (참조형 (주소값)) : 클래스명, 배열


	public class Function {

	// 클래스명의 변수를 썼다 -> 참조형, 배열 사용, 참조방식
	void change2(Data d) {
		d.x = 1000;
	}

	// 배열
	void arrChange(int[] arr) {

		arr[0] = 10;

	}
	
	
	
+ 메서드의 정의 방식 2가지

	// 인스턴스 메서드
	// 클래스 메서드
	
		void instanceMethod() {
		System.out.println("인스터스 메서드 호출");
	}
	
	static void staticMethod() {
		System.out.println("클래스 메서드 호출");
	}

}
// call by reference (참조형 (주소값)) : 클래스명, 배열


import java.util.Arrays;

public class FunctionTest {



		// 클래스 메서드는 생성 없이 사용할 수 있다
		// 공유의 개념!
		Function.staticMethod();  // 클래스 메서드 호출

		Function f = new Function();


		Data d = new Data();
		d.x = 10;

		f.change2(d);
		
		System.out.println(d.x);  // 1000
		
		int[] arr = {1, 2, 3, 4, 5};
		
		f.arrChange(arr);
		System.out.println(Arrays.toString(arr));  // [10, 2, 3, 4, 5]




		f.instanceMethod();  // 인스터스 메서드 호출
		f.staticMethod();  // 클래스 메서드 호출



}

 

public class Function2 {

	// 맴버변수와 메서드 간의 호출관계에 대해 알아보자

	int iv;
	static int cv;

	void instanceMethod1() {
		iv = 10;
		cv = 20;
	}

	void instanceMethod2() {
		instanceMethod1();
		staticMethod1(); // 호출가능

	}

	static void staticMethod1() {
		// iv = 30; // 생성 전에는 메모리 X, 객체를 생성하는 시점에 만들어짐.
		cv = 40; //static 한 메서드는 static 변수를 쓸 수 있다.
	
	}
	
	static void staticMethod2() {
		// instanceMethod1(); // 불가능
		staticMethod1(); // 가능
	
		// 인스턴스는 인스턴스끼리 할당시점이 같고
		// static 은 static 끼리 할당시점이 같다
	
	}
}

 

public class Function2 {

	// 맴버변수와 메서드 간의 호출관계에 대해 알아보자

	int iv;
	static int cv;

	void instanceMethod1() {
		iv = 10;
		cv = 20;
	}

	void instanceMethod2() {
		instanceMethod1();
		staticMethod1(); // 호출가능

	}

	static void staticMethod1() {
		// iv = 30; // 생성 전에는 메모리 X, 객체를 생성하는 시점에 만들어짐.
		cv = 40; //static 한 메서드는 static 변수를 쓸 수 있다.
	
	}
	
	static void staticMethod2() {
		// instanceMethod1(); // 불가능
		staticMethod1(); // 가능
	
		// 인스턴스는 인스턴스끼리 할당시점이 같고
		// static 은 static 끼리 할당시점이 같다
	
	}
}

 

public class Function3Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Function3 f3 = new Function3();
		
		
		int x = 10;
		int y = 20;
		
		System.out.println(f3.add(x,y));
		
		int[] arr = {1, 2, 3, 4, 5};
		
		//f3.add(arr);  // void 함수는 실행할 수 없음.
		                // return 받기 전까진 알 수 없음
		                // 실행하면 오류가 남.
		
		System.out.println(f3.add(arr));

	}

}

 

 

  • 가변인자

 

메서드를 호출하고자 할때 인수의 갯수가 가변적일 때 가변인수를 처리하면 손 쉽게 처리할 수 있다.

참조)

 

[Java]가변인자(varargs)을 왜 쓰는거지? 쉬운 이해와 활용

가변인자(varargs) ...String 0 .개요 가변인자는 메서드의 매개변수를 동적으로 처리할 수 있도록 해준다. 이를 사용하면 메서드 호출 시 전달되는 인자의 개수를 동적으로 변경할 수 있다. public void

hirodevelodiary.tistory.com

 

public class Function4 {
	// 가변인자를 받는 형태
	void varArgs(int... args) { // int ...args -> 배열 형식
		for (int num : args) {
			System.out.println(num);
		}
	}
}


// 수업이 끝나고 나면 목차 정리를 하고 구체적으로 정리해보새요. 

// 메소드에 대해 배운 것들! 
// 1. 기본형식 (4개)
// 2. return 특징
// 3. 오버로딩
// 4. 가변인자
// 5. call by value / call by reference

 

public class Function4Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Function4 f4 = new Function4();
		f4.varArgs(1, 2, 3, 4, 5);
		
		
		int[] arr = { 6, 7, 8, 9, 10 };
		f4.varArgs(arr);

	}

}

 

 

  • 생성자

기능과 속성

속성과 연결되어져서 값을 다룰 때 사용할 수 있는 개념!

public class Car {

	// 속성

	// 생성자 : **** 멤버변수의 초기화 ( 대상 : 인스턴스 변수 )
	// 클래스 변수는 생성자를 사용하지 않음
	// 클래스명과 대소문자 동일하게 작성된다
	// 메서드처럼 생겼지만 리턴 타입이 없다
	// 직접 호출해서 사용할 수 없다
	// 객체를 생성할때 1번만 호출 가능
	// 속성 밑에 작성
	// 생성자 오버로딩이 가능, 매개변수와 타입값을 다르게

	// 기능

	// 속성
	String color;
	String gearType;
	int door;

	// 생성자
	Car() {
		color = "red";
		gearType = "auto";
		door = 4;
	}

	// 생성자가 없어도 기본값이 설정되어 있어 값이 나옴 (null, 0 과 같은)

//	Car() {
//		
//	}  <- 역할이 없는 기본 생성자, 단독인 경우 생략이 가능하다!
// 무조건 생략 가능한 게 아니라 생성자 오버로딩 시 생략은 판단해야 한다.

	// 속성과 같게
	Car(String color) {
		this.color = color;  // 이름이 같을 경우, 구분을 위해 this. 붙이기
	}

	Car(String color, String gearType) {
		this.color = color;
		this.gearType = gearType;

	}

	Car(String color, String gearType, int door) {
		this.color = color;
		this.gearType = gearType;
		this.door = door;
	}

}
public class CarTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		// 객체 생성  생성자를 호출하는 부분! 
		Car c = new Car();
		System.out.println(c.color);
		System.out.println(c.gearType);
		System.out.println(c.door);
		
	}

}
public class Car {

	// 속성

	// 생성자 : **** 멤버변수의 초기화 ( 대상 : 인스턴스 변수 )
	// 클래스 변수는 생성자를 사용하지 않음
	// 클래스명과 대소문자 동일하게 작성된다
	// 메서드처럼 생겼지만 리턴 타입이 없다
	// 직접 호출해서 사용할 수 없다
	// 객체를 생성할때 1번만 호출 가능
	// 속성 밑에 작성
	// 생성자 오버로딩이 가능, 매개변수와 타입값을 다르게
	// 생성자 간 상호 호출 가능

	// 기능





	// 속성
	String color;
	String gearType;
	int door;

	// 생성자
//	Car() {
//		color = "red";
//		gearType = "auto";
//		door = 4;
//	}

	// 생성자가 없어도 기본값이 설정되어 있어 값이 나옴 (null, 0 과 같은)

	Car() {
		
		// 생성자 간 상호 호출 가능
		// this.color = "pink"; 이렇게 하는 것 X
		this("pink", "auto", 2);
		
	}  //<- 역할이 없는 기본 생성자, 단독인 경우 생략이 가능하다!
	// 무조건 생략 가능한 게 아니라 생성자 오버로딩 시 생략은 판단해야 한다.
	// 생성자간 호출 : this()
	// this() : 생성자의 가장 위쪽에 작성!
	

	// 속성과 같게
	Car(String color) {
		// this.color = color;  // 이름이 같을 경우, 구분을 위해 this. 붙이기
		this(color, "auto", 5);  // 생성자 간 상호 호출 가능
	}

	Car(String color, String gearType) {
		this.color = color;
		this.gearType = gearType;

	}

	Car(String color, String gearType, int door) {
		this.color = color;
		this.gearType = gearType;
		this.door = door;
	}

}

 

public class CarTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		// 객체 생성  생성자를 호출하는 부분! 
		Car c = new Car();
		System.out.println(c.color);
		System.out.println(c.gearType);
		System.out.println(c.door);
		
		Car c2 = new Car("red");
		System.out.println(c2.color);
		System.out.println(c2.gearType);
		System.out.println(c2.door);
		
		Car c3 = new Car("blue" , "auto");
		System.out.println(c3.color);
		System.out.println(c3.gearType);
		System.out.println(c3.door);
		
		Car c4 = new Car("black" , "auto", 4);
		System.out.println(c4.color);
		System.out.println(c4.gearType);
		System.out.println(c4.door);
		
		
	}

}

 

  • 초기화 순서 자동초기화 - 명시적 초기화 - 초기화 블럭 - 생성자 - 생성 후 초기화

  • 변수 생성자 메서드 - 클래스에서 작성되는 세 가지를 다 배웠습니다.

-개념과 코드를 같이 정리해서 공부하기

-개념을 적어두고 그 아래 코드를 써보며 공부

매개변수를 써라. 하면 못쓰겠다.

 

public class Student {
	
	
	// 내 풀이 (답이 정수로만 나왔다..) 
	// 속성
	// 생성자
	// 기능
	
	String name;
	int ban;
	int no;
	int kor;
	int eng;
	int math;
	
	int getTotal(int kor, int eng, int math) {
		return ( kor + eng + math );
	}
	
	int getAverage(int kor, int eng, int math) {
		return ( (kor + eng + math)/3 );
	}
	// int 가 아니라 float 를 쓰는 것이 조건.
	// 그렇게 하지 않았기 때문에 답이 정수로만 나옴
	
-----------------------------------------------------------------------------
	
	// 강사님 풀이 1)
	String name;
	int ban;
	int no;
	int kor;
	int eng;
	int math;
	
	int getTotal() {
		return kor + eng + math;
	}
	
	float getAverage() {
		return (int) (getTotal() / 3.0f * 10 + 0.5f) / 10f ;
	}
	
	
}


// 강사님 풀이 2)

String name;
	int ban;
	int no;
	int kor;
	int eng;
	int math;

	Student() {
		
	}
	
	Student(String name, int ban, int no, int kor, int eng, int math ) {
		this.name = name;
		this.ban = ban;
		this.no = no; 
		this.kor = kor;
		this.eng = eng;
		this.math = math;
	}
	
		// Source에 들어가서 자동 생성 가능
	  // 보통 위처럼 두 개의 생성자를 만들어 사용함
	

	int getTotal() {
		return kor + eng + math;
	}

	float getAverage() {
		return (int) (getTotal() / 3.0f * 10 + 0.5f) / 10f;
	}

}
public class StudentTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		// 내 풀이 
		Student S = new Student();
		
		int kor = 70;
		int eng = 12;
		int math = 97;
		
		System.out.println("총 점수의 합 : " + S.getTotal(kor, eng, math) + "점");		
		float f = S.getAverage(kor, eng, math);
		
		System.out.println("평균 점수 : " + f + "점");
		

-----------------------------------------------------------------------------

		// 강사님 풀이
		
		Student s = new Student();
		s.name = "yuna";
		System.out.println(s.name);
		
		Student s2 = new Student("yuna", 1, 1, 62, 85, 100);
		int total = s2.getTotal();
		float avg = s2.getAverage();
		
		System.out.printf("총점 : %d\n평균 : %f" , total , avg);
	
		}

}

배우는 내용이 너무 많아서 언제 이걸 꺼내 사용해야 하는 건지 감이 안잡힌다..

 

  • 롬북사용
// 자동으로 생성자 만드는 법

import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;

@NoArgsConstructor
@AllArgsConstructor


이제 여러 개의 클래스를 만들고 그 안에서 관계성을 가지고 작업해 볼 예정.

 (부모) class —— 관계 맺음——  (자식) class

      변수 3개   — 상속 ———> 변수 원래 2개 + 상속 3개 = 총 5개 사용 가능 

        생성자              생성자 

   메서드 3개    — 상속 ———> 메서드 원래 2개 + 상속 3개 = 총 5개 사용 가능

최소 2명 이상의 자식이 있을 때 ‘상속’이라는 개념 사용

부모가 변수가 3개 있다고 한 자식한테 3개를 준다고 부모 클래스가 사라지는 것이 아님.

똑같이 여러 자식 클래스에게 상속할 수 있음 (코드의 재사용성)

-공통요소를 부모 클래스에 정의 → 똑같이 자식에게 물려줌

-왜 이렇게 해야하나? → 동일한 코드를 반복적으로 정의하는 것을 막기 위해. 코드를 관리할 때 유리해짐.

부모클래스 - 추상화 클래스 ( 변수와 메서드를 상속하는 클래스)

// 상속하는 법
public class Parent {
	
	// 상속 
	// 두개 이상의 클래스와 부모와 자식을 개념으로 관계를 맺는 것
	// 상속의 대상은 변수와 메서드이다.
	// 단일 상속만 가능하다.
	// 상속에 상속은 가능하다 (다중 상속)
	
	
	int age;
	
	void add(int x, int y) {
		System.out.println(x + y);
	}

}
// 상속받는 법
public class Child extends Parent {

}
public class InheritanceTest {

	public static void main(String[] args) {
	
	Child c = new Child();
	c.age = 10;
	
	System.out.println(c.age);
	
	}
}

 

// 상속
public class Tvs {

	String color;
	boolean power;
	int channel;

	public void power() {
		power = !power;
	}

	public void channelUp() {
		channel++;
	}

	public void channelDown() {
		channel--;
	}

}
// 상속
public class TvCaption extends Tvs {

}
public class Tv3D extends Tvs {

	// 클래스를 만들 때도 Superclass 에서 상속 가능
}

여기까지 배운 시점에서 전의 내용을 내가 확실하게 알지 않으면 더 이상 따라가기 힘들 것이라고 판단,

생활 코딩을 보며 부족한 개념을 보충하기로 한다.

부족했던 개념 :

상수의 데이터 타입)

 

상수의 데이터 타입 - 생활코딩

상수 변수는 변하는 값을 의미한다. 그 대척점에 있는 것이 상수인데, 상수(常數, constant)란 변하지 않는 값을 의미한다. 아래의 코드 중에서 a는 변수이고, 1은 상수이다. int a = 1; 변수 a는 대입

www.opentutorials.org

 

자바에서 데이터 타입이 정수인 상수는 int, 실수형 상수는 double의 데이터 타입.

float 형 변수를 사용할 때는?

-float 형이라는 것을 명시해주면 됨.

float a = 2.2F;
            --- F는 이 기호 앞의 숫자가 float 데이터 타입이라는 것을 명시적으로 표현하는 방법이다.
 

자습 시간 반복문까지 읽고 있었음

→ 반복문부터는 실습하며 다시 읽어볼 것!

 

'2024_UIUX 국비 TIL' 카테고리의 다른 글

UIUX _국비과정 0411  (0) 2024.05.29
UIUX _국비과정 0409  (0) 2024.05.29
UIUX _국비과정 0405  (0) 2024.05.29
UIUX _국비과정 0404  (0) 2024.05.29
UIUX _국비과정 0403  (0) 2024.05.29

작성 : 2024. 4. 6. 13:56

  • obsidian 사용법 알아보기

지난 시간동안 기본 문법을 다 배웠습니다. 앞으로는 예제를 수정하며 더 공부해보세요.

오늘은 클래스에 대해 배웁니다.

오늘 배운 내용이 자바에서 제일 중요한 내용!

  • 클래스

클래스(class) 란 객체를 정의하기 위한 틀, 설계도

이런 클래스를 가지고 여러 객체를 생성하여 사용.

중요한 키워드 : 관계! 클래스와 객체 사이 관계성을 가지고 프로그램이 동작함.

클래스 - 메인함수를 사용한 것 + 메인함수 사용 X = 같이 하나의 동작을 하게 됨

→ 원리

자바 = OOP (Object-Oriented Programming) = 객체지향프로그램

객체 : 유형, 무형의 사물들 , 현실에 존재하는 모든 것들을 코드화 할 수 있다..

// 클래스 함수에 들어가는 것들

public class Person {

 속성 : 눈, 코, 입, 팔, 다리, 머리카락, 이름, 나이, 주소, 신분 ...
 속성 - 문법적 형식으로 '변수' 사용
 
 게임의 캐릭터를 생각해보면 됨
 
 움직임을 표현할 수 있는 속성, 아닌 속성이 있음. 움직임을 표현하는 속성으로 나타낼 수 있는 것이 기능!
 기능 : 눈 깜박이기, 숨쉬기, 달리기 ...
 기능 - 문법적 특성 '메서드' 사용
 필요한 속성과 기능을 잘 골라내서 사용하기


 클래스 - '설계도'라고 함.
 어떤 것을 표현한 형태!
 인스턴스화
 
}

 

 

public class Tv {

// Tv에 대한 설계도 

// 티비의 속성 :
// 색상
String color;
// 전원버튼 (토글 형태 - boolean 을 씀)
boolean power;
// 채널
int channel;

// 속성들 중에 기능(변화가 생길 수 있는지)을 할 수 있는지 판단하고 기능을 메서드로 만들어줘야 함.
// Tv에서 기능 : 전원버튼, 채널

// 메서드 사용 예시
// 변수이름과 메서드는 형식으로 구분할 수 있어서 이름이 같아도 상관 없음.

// 전원
void power() {
	power = !power;
}

// 채널 버튼 올리고 내리고 두 개.
void channelUp() {
	channel++;
}

void channelDown() {
	channel--;
}

  // 이렇게 하면 Tv 에 대한 설계가 끝났다.
	// 여기까지 하면 정의만 한 것, 어떤 일도 일어나지 않음 
	// '객체의 생성'을 한 것! = 인스턴스화
	
}

 

public class TvTest {

public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 객체를 가지고 와서 실제로 동작시키는 역할을 함.
		
		// 객체를 생성 (메모리 로딩 - Tv 클래스에 있는 변수 3개와 메서드 3개 총 6개 할당)
		// 프로그램은 변수와 메서드를 사용하기 위해 메모리에 할당하는 역할을 하는 것!
		// 메모리를 할당하면 주소값을 가지게 됨.
		// new Tv(); // Tv를 만들었다 - 객체 생성
		// new __(); <- 주소값 
		// 이 주소값에 접근 하는 방법 new __() . <- 이 점을 통해 접근한다 ;
		// 예시 ) new Tv().channel;
		// 위와 같이 하면 일회성만 사용할 수 있음
		
		Tv t = new Tv(); // 객체 생성
		// t는 주소값을 가짐. t로 변수에 접근. 참조형 변수 -> 대문 주소만 알면 방은 다 접근할 수 있다
		// 해당클래스 이름이 타입이 됨. 
		// 클래스를 만들면 클래스 자체가 참조형을 만들 수 있는 타입이 됨. 
		
		t.color = "red"; // 맴버변수의 초기화 (초기화가 값을 설정해준다는 의미)
		t.power = true; 
		t.channel = 10; 
		
		System.out.println(t.channel);
		
		t.channelUp();  // 메서드의 호출 - 안에 있는 기능을 사용하겠다
		
		System.out.println(t.channel);  // 매서드가 작동됨! 객체를 정의하고 나서 안의 멤버를 생성해 할당, 변수나 메서드를 참조해 접근
		// 메서드 호출을 통해 사용하면 '동작'을 하게 됨.
		
		//-------------------------------------------------------------------------
		
		// Tv 설계도(클래스)가 있으니 똑같은 것을 여러 개 만들 수 있음
		
		Tv t2 = new Tv();
		// t 와 t2 는 다른 객체, 주소값이 다름 
		// 객체는 생성될 때마다 메모리에 값을 할당. 매번 새로운 객제가 만들어지는 것.
		
		t2.color = "blue";
		
		System.out.println(t2.color);
		// t2.color 가 변수명이 되는 것
		
		System.out.println(t.color);
		
		t2 = t; 
		// 이렇게 되면 t2 의 참조가 끊김 -> 자바 내부에서  G.C 실행, 오버플로우를 막기 위해.
		// 자바는 G.C가 하나 있기 때문에 이렇게 참조가 끊길 경우 실행이 오래 걸리게 됨. 
		// 웹은 해당 사항이 없지만 자바를 쓰기 때문에 G.C에 대해 알아보기.
		
		t2.color = "black";
		// t가 가리키는 것의 색이 바뀐 것.
		
		System.out.println(t.color);
		System.out.println(t2.color);
		// t가 할당받았던 곳의 주소값을 t2가 같이 참조한다는 것을 알 수 있음.
		
		System.out.println(t);  // 이렇게 하면 주소값을 알 수 있음. 
		System.out.println(t2); // t와 똑같은 주소값.
	}

}

 

 

  • 객체배열
public class Time {
// 객체배열

// 시계의 속성 : 시, 분, 초

// 시
private int hour; // 표현 가능 범위 : 0 ~ 23 객체를 구성할때 범위 이상 사용 못하도록 제어
// 분
private int minute; // 0 ~ 59
// 초
private float second; // 0 ~ 59

// private -> 제어
// private 때문에 접근 불가능힌 것을
// Gatter(읽기) / Satter(쓰기) 로 만들어 처리.
// Gatter / Satter 만들기

// 반드시 public 붙이고 대문자
public int getHour() {
	return hour;
}

// 반드시 public 붙이고 대문자 (변수명)
// 변수를 넣어줄 때 선언
public void setHour(int hour) {

	// 이 조건에 포함되지 않으면
	if (!(hour >= 0 && hour <= 23)) {
		return;
	}

	// 실행 X
	this.hour = hour;
}

public int getMinute() {
	return minute;
}

public void setMinute(int minute) {

	if (!(minute >= 0 && minute <= 59)) {
		System.out.println("범위를 벗어난 값입니다.");
		return;
	}

	this.minute = minute;
}

public float getSecond() {
	return second;
}

public void setSecond(float second) {

	if (!(second >= 0 && second <= 59)) {
		System.out.println("범위를 벗어난 값입니다.");
		return;
	}

	this.second = second;
}

(앞으로 더 자세히 배울 예정)

private → 접근 제한자

 

  • 접근 제한자

public : 제한 없이 모든 패키지, 모든 클래스에서 가능

protected : 같은 패키지 안에서 사용 가능, 다른 패키지라도 자식 클래스라면 접근가능

default : 같은 패키지 내에서만 접근 가능

private : 같은 클래스 내에서만 접근 가능

접근 범위가 넓은 쪽에서 좁은 쪽

public < protected < default < private

 

public class TimeTest {
	
	// 생성을 위한 메인함수
	public static void main(String[] args) {
		// TODO Auto-generated method stub

//		Time t1, t2, t3; 
//		// 동일한 타입의 변수가 세 개를 사용할 때는 위와 같은 형태보다 배열을 사용하는 것이 효과적! 
//		
//		t1 = new Time();
//		t2 = new Time();
//		t3 = new Time();
		
//		t1.hour = 12;
//		t1.minute = 10;
//		t1.second = 34;
//		
//		t2.hour = 6;
//		t2.minute = 30;
//		t2.second = 54;
//		
//		t3.hour = 3;
//		t3.minute = 23;
//		t3.second = 45;

		
		// 객체의 배열
		// 배열은 인덱스 번호 포함된 것까지가 변수 
		Time[] t = new Time[3];
		
		t[0] = new Time();
		t[1] = new Time();
		t[2] = new Time();
		
		t[0].setHour(12);
		t[0].setMinute(56);
		t[0].setSecond(22);
		System.out.println(t[0].getHour());
		System.out.println(t[0].getMinute());
		System.out.println(t[0].getSecond());
		// 가로 안의 값이 Time 클래스로 넘어감.
		
//		t[0].hour = 12;
//		t[0].minute = 10;
//		t[0].second = 34;
//		
//		t[1].hour = 1;
//		t[1].minute = 11;
//		t[1].second = 34;
//		
//		t[2].hour = 2;
//		t[2].minute = 9;
//		t[2].second = 19;
//		
//		t[3].hour = 7;
//		t[3].minute = 27;
//		t[3].second = 36;
		
		
	}

}

 

수월한 getter, setter 생성을 위해 lombok 이라는 라이브러리를 추천.

lombok 설치 (완.)

  • lombok 이용 방법 알아보기
  • 공식사이트 가서 알아보기
  • 자바에서 클래스를 사용한다는 것은 메모리값을 활용하는 것.

 

public class Card {

// 맴버 변수 (class) 에는
// 자동초기화
// 인스턴스 변수, - 반드시 생성 후에 사용
// 클래스 변수 두 가지가 있다.
// 클래스 변수 - 1. 생성없이 사용 가능 (앞에 static를 붙임.)
//            2. 변수가 공유 된다.


int iv; // 인스턴스 변수
static int cv; // 클래스 변수

// 클래스 영역에는 for문을 쓸 수 없다.
// 클래스 안에 다른 형태의 블록을 만들어서 for문, if문 등 사용 -> 메서드
// 메서드를 만들고 그 안에 코드를 넣어 사용
// 모든 영역을 메서드로 구성해 동작 -> 자바

// 트럼프카드 (서양카드)

// 카드의 속성 : 숫자, 모양(무늬), 색, 조커유무, 영어알파벳(A), 크기 등등
// 인스턴스 변수
String kind; // 무늬
int number; // 숫자
static int width = 100; // 폭
static int height = 200; // 높이
// 폭과 높이는 클래스 변수로,, 고정된 값이기 때문에!

}
public class CardTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		// 클래스를 구성하는 요소 - 변수와 메서드!
		
//		System.out.println(Card.cv);
//		//                 소속클래스명 = 이 자체가 생성을 의미한다.
//		
//		Card c = new Card();
//		System.out.println(c.iv);
//		System.out.println(c.cv);
		
		Card c1 = new Card();
		Card c2 = new Card();
		
		c1.kind = "Hart";
		c1.number = 10;
		
		c2.kind = "space";
		c2.number = 20;
		
		System.out.println(c1.kind + " : " + c1.number); // 결과 : Hart : 10
		System.out.println(c1.width); // 결과 : 100
		System.out.println(c2.height); // 결과 : 200
		System.out.println(c2.kind + " : " + c2.number); // 결과 : space : 20

		c1.iv = 10;
		c2.iv = 20;

		System.out.println(c1.iv); // 결과 : 10
		System.out.println(c2.iv); // 결과 : 20

		// 각각의 독립된 변수

		c1.cv = 30;

		System.out.println(c1.cv);  // 결과 : 30 
		System.out.println(c2.cv);  // 결과 : 30

		c2.cv = 100;

		System.out.println(c1.cv);  // 결과 : 100
		System.out.println(c2.cv);  // 결과 : 100
		// 변수는 공유되어진다는 것을 알 수 있음

	}

}

 

public class Function {
	// 클래스는 변수와 메서드만 작성
	// 메서드에 대해 알아봅니다.
	// 메세지 교환 방식

	// 메서드 힙 영역에서 한번만 할당
	// 메서드는 데이터를 주고 받음.

	// 리턴타입 메서드명([매개변수]) { <- [ ] 표시 - 어떤 경우에는 쓰고 어떤 경우에는 안쓰는 것을 판단해서 써야함.
	// 실행문;
	// [return;] <- 리턴타입이 void 의 경우 생략한다.
	// }

	// 함수 정의 - 속성을 이용해 기능 표현

	// 리턴타입 : 기본형, 참조형, void (세 가지 중 하나 사용)

	// 매개변수 사용 X
	void add() {
		System.out.println(2 + 3);
	}

	// 매개변수 사용
	// 매개변수는 지역변수
	void add2(int x, int y) { // x = 10 , y = 20
		System.out.println(x + y);
	}

	void add3(int x, int y) {
		int sum = x + y;
	}

	// 돌려받으려는 값의 타입 적어줘야함.
	int add4(int x, int y) {
		int sum = x + y;
		return sum; // 확인하는 역할의 return
	}

	// return 구문을 쓸 때 특징
	// 꼭 값을 돌려줄 때 쓰는 게 아님!

	void add5(int x) {
		if (x >= 10) {
			System.out.println("return문에 의한 종료");
			return; // 메서드 강제종료 = 조건이 맞으면 종료한다.
			// void 타입에서는 return을 쓸 수 없지만 조건문의 강제종료를 위해 사용가능
		}

		System.out.println(x); // 위 조건에 만족하지 않으면 해당 코드가 실행됨.
	}

	int add6(int x, int y) {
//		if (x > y) {
//			return x;  // 반대조건에 대해서도 리턴해줘야 함.
//		} else {
//			return y;
//		}

		// 위 코드와 같은 의미

		if (x > y) {
			return x;
		}
		
		return y; // 간략한 표현
	}
	
	// 매개변수의 타입에 따른 분류
	// call by value (기본형) : 값의 복사
	// call by reference (참조형 (주소값)) : 클래스명, 배열
	
	
	// ' call by value (기본형) : 값의 복사 ' 를 사용한 매개변수 사용
	void add(int x, int y) {
		
		System.out.println(x);
		System.out.println(y);
		
		x = 100;
		y = 200;
		
		System.out.println(x + y);
	}
	
	// ' call by reference (참조형 (주소값)) '
	// 다음 시간에..

}
public class FunctionTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// Function 클래스 생성

		Function f = new Function();

		// 함수를 사용하는 방법
		f.add(); // = 메소드의 호출
		f.add2(10, 20);
		f.add3(100, 200);
		// f.add4(5, 6); **** class에 있는 return으로 돌려받는 값이 됨.
		System.out.println(f.add4(5, 6));
		// Function 클래스에 있는 sum 과는 다른 sum
		int sum = f.add4(9, 8);
		System.out.println(sum);

		f.add5(3);
		f.add5(11);
		int max = f.add6(10, 50);
		System.out.println(max);
		
		
		// Function 클래스의 x, y와는 다른 값
		int	x = 10;
		int y = 20;
		
		f.add(x, y);
		
		System.out.println(x);
		System.out.println(y);
	}

}

'2024_UIUX 국비 TIL' 카테고리의 다른 글

UIUX _국비과정 0409  (0) 2024.05.29
UIUX _국비과정 0408  (0) 2024.05.29
UIUX _국비과정 0404  (0) 2024.05.29
UIUX _국비과정 0403  (0) 2024.05.29
UIUX _국비과정 0402  (0) 2024.05.29

작성 : 2024. 4. 6. 13:49

 

자동 import : Command + Shift + o

배열을 이용한 프로그램 알아보기

배열의 복사 :

ex) arr1 → arr2 옮기기

  1. 반복문
  2. 메소드
// 반복문을 이용

배열의 한 자리 복사하는 코드:


//    (배열의 선언 = 초기화 방법들)
//		int[] arr1;  // 배열의 선언
// 		arr1 = new int[5];  // [] 안에다 배열의 크기를 정해 주기, 위와 세트
// 		int[] arr1 = {10, 20, 30, 40, 50};  // 안에 어떤 값이 있는지까지 정해 한번에 선언하는 방법

배열 선언 후 

for (int i = 0; i < arr1.length; i++) {
 arr1[i] = arr2[i];
}


배열의 여러 자리 복사하는 코드:

배열 선언 후

for (int i = 0; i < 3; i++) {
 arr2[i + 2] = arr1[i];
}


잘 들어갔는지 확인하기 위해 배열에 숫자를 넣어 실행해봄.

-------------------------------------------------------------------------------

배열의 한 자리 복사하는 코드:

 		int[] arr1 = {10, 20, 30, 40, 50};
 		int[] arr2 = {1, 2, 3, 4, 5};
		
 		for (int i = 0; i < arr1.length; i++) {
 			 arr1[i] = arr2[i];
 			}
 			
 		System.out.println(Arrays.toString(arr1));
 		System.out.println(Arrays.toString(arr2));


결과 :

[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
-------------------------------------------------------------------------------
 
 배열의 여러 자리 복사하는 코드:
 		
 		for (int i = 0; i < 3; i++) {
 			 arr2[i + 2] = arr1[i];
 			}
 			
 	  System.out.println(Arrays.toString(arr1));
 		System.out.println(Arrays.toString(arr2));
 		
 			
결과 :

[10, 20, 30, 40, 50]
[1, 2, 10, 20, 30]
 		
 		
 		
 		// 강사님의 예시
		
		
		
		int[] arr1 = {1, 2, 3, 4, 5};
		int[] arr2 = new int[5];
 		
		for(int i = 0; i < 3; i++) {
			arr2[ i + 2 ] = arr1[i];
		}
		
		System.out.println(Arrays.toString(arr1));
 		System.out.println(Arrays.toString(arr2));
 		
결과 :

[1, 2, 3, 4, 5]
[0, 0, 1, 2, 3]



--------------------------------------------------------------------------------
    
    // 메서드를 이용한 배열의 복사 01.

    int[] arr1 = {1, 2, 3, 4, 5};
		int[] arr2 = new int[5]; 		
		
		System.arraycopy(arr1, 0, arr2, 2, 3);  
		// arraycopy (값을 가진 배열, 인덱스값, 값을 복사할 배열, 인덱스값, 크기)  
		System.out.println(Arrays.toString(arr2));
		
		
		결과 :
		
		[0, 0, 1, 2, 3]
		
--------------------------------------------------------------------------------		
	
		// 메소드를 이용한 배열의 복사 02.
	
		// arraycopy (값을 가진 배열, 인덱스값, 값을 복사할 배열, 인덱스값, 크기)
		
		System.arraycopy(arr1, 0, arr2, 0, arr1.length); //전체 복사
		System.out.println(Arrays.toString(arr2));
		
--------------------------------------------------------------------------------			
		
		// 메소드를 이용한 배열의 복사 03.
		
		// Arrays 객체 사용
		// copyof() 사용
		
		arr2 = Arrays.copyOf(arr1, 3);  // ( 위치, 몇 개 복사하고 싶은지 )
		System.out.println(Arrays.toString(arr2));
		
		
		// copyofRange() 사용
		
		arr2 = Arrays.copyOfRange(arr1, 2, 5);  
		// ( 위치, 시작인덱스 , 종료인덱스 (마지막은 포함이 안되기 때문에 포함하는 값 + 1 하기))
		System.out.println(Arrays.toString(arr2));
		
--------------------------------------------------------------------------------			
		
		
		값교환하는 방법
		// 'temp (동일한 타입)' 라는 임시저장공간에 옮겨줌. 
		
		int temp;
		int x = 10;
		int y = 20;
		
		System.out.println(x + ", " + y);
		
		temp = x;
		x = y;
		y = temp;
		
		System.out.println(x + ", " + y);
		
		결과 :
		
		10, 20
    20, 10
    
    
    
    중첩반복문 사용
    
    // 값을 오름차순으로 정렬하기

		int[] arr1 = { 2, 7, 3, 5, 1 };

		for (int i = 0; i < (arr1.length - 1); i++) { // (arr1.length - 1) 총 돌아야하는 횟수
			for (int j = (i + 1); j < arr1.length; j++) { // i와 비교하는 값 j
				int temp;
				if (arr1[i] > arr1[j]) {
					temp = arr1[i];
					arr1[i] = arr1[j];
					arr1[j] = temp;
				}
			}
		}

		System.out.println(Arrays.toString(arr1));
		
		결과 :
		
		[1, 2, 3, 5, 7]
		
		
		// 내림차순 정렬
		
		for (int i = 0; i < (arr1.length - 1); i++) {
			for (int j = (i + 1); j < arr1.length; j++) {
				int temp;
				if (arr1[i] < arr1[j]) {
					temp = arr1[i];
					arr1[i] = arr1[j];
					arr1[j] = temp;
				}
			}
		}
		
		System.out.println(Arrays.toString(arr1));
		
		결과 :
		
		[7, 5, 3, 2, 1]
		
		
		
		// Arrays.sort 를 이용해 오름차순 정렬
		
		Arrays.sort(arr1);
		System.out.println(Arrays.toString(arr1));
		
		결과 :
		
		[1, 2, 3, 5, 7]
		
		
		// Arrays.sort, Collections.reverseOrder 를 이용한 내림차순 정렬
		
		// 이때는 int 사용 불가 
		Integer[] arr2 = { 2, 7, 3, 5, 1 };
		
		Arrays.sort(arr2,Collections.reverseOrder());
		System.out.println(Arrays.toString(arr2));
		
		결과 :
		
		[7, 5, 3, 2, 1]

 

 

  • 2차원 배열

이상은 거의 쓰지 않음

행렬의 구조

// 2차원 배열
    // 행열의 구조 = 표의 형태
    // 행 = 세로, 열 = 가로
    
    //int[][] arr1; // 배열의 선언
    //arr1 = new int[5][3];  // 배열의 생성, [행][열] = [행] * [열] = 15의 인덱스를 가진 배열
		
		
		int[][] arr1 = new int[5][3];    // 한번에 선언과 생성
		
		arr1[0][0] = 1;  // 행렬의 순차적 처리
		arr1[0][1] = 2;
		arr1[0][2] = 3;
		
		arr1[1][0] = 4;
		arr1[1][1] = 5;
		arr1[1][2] = 6;
		
		arr1[2][0] = 7;
		arr1[2][1] = 8;
		arr1[2][2] = 9;
		
		arr1[4][0] = 13;
		arr1[4][1] = 14;
		arr1[4][2] = 15;
		
		// 이렇게 찍어보면 해당 위치에 있는 인덱스의 번호가 나옴.
		System.out.println(arr1[0][0]);
	  System.out.println(arr1[4][2]);
​

​

	// 문제 : 행의 크기가 2 이고 열의 크기가 5 인 이차원배열을 생성해라
	// 1부터 10까지 반복문을 사용해서 초기화한다
	// 홀수만 출력한다


// 풀이 1번 -> for문을 이용한 초기화가 아님

	int[][] arr1 = { // 선언 생성 초기화 동시에
			{ 1, 2, 3, 4, 5 }, // 한 행이 만들어짐
			{ 6, 7, 8, 9, 10 }, };

	for (int i = 0; i < arr1.length; i++) {
		for (int j = 0; j < arr1[0].length; j++) {
			if (arr1[i][j] % 2 != 0) {
				System.out.print(arr1[i][j] + " ");
			}
		}
	}
	
	
	// 풀이 2번
	
	int[][] arr1 = new int[2][5];

		for (int i = 0; i < arr1.length; i++) {
			for (int j = 0; j < arr1[0].length; j++) {
				arr1[i][j] = i * 5 + j + 1;
				if (arr1[i][j] % 2 == 1) {
					System.out.print(arr1[i][j] + " ");
				}
			}
		}

//		// deepToString 이차원 배열에서 출력
//		System.out.println(Arrays.deepToString(arr1));

결과 :

1 3 5 7 9 

// 결과는 둘 다 잘 나옴..

 

  • 배열을 초기화 한다는 것은?

배열을 초기화한다는 것은 배열의 각 요소에 값을 할당하거나 설정하는 것을 말합니다. 즉, 배열을 사용하기 전에 각 요소에 대해 값을 설정하는 것입니다. 배열을 선언하면 메모리에 공간이 할당되지만, 그 안의 각 요소는 초기화되지 않은 상태입니다. 이 때, 초기화를 수행하여 각 요소에 값을 설정해야 배열을 사용할 수 있습니다.

예를 들어, int 타입의 배열을 초기화한다고 할 때, 각 요소에는 정수 값이 할당됩니다. 자바에서는 배열을 선언한 후에 각 요소를 초기화하는 과정이 필요합니다. 이는 반복문이나 직접적인 할당을 통해 이루어집니다. 이것이 배열을 초기화한다는 개념입니다.

-GPT 참조..

 

 

import java.util.Arrays;
import java.util.Scanner;

public class Bingo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		// 변수 <-> 상수 (상반된 개념)

//		int x;
//		x = 10;
//		x = 20;   // 변수는 계속 변할 수 있음. 
//		
//		// 상수는 final 를 쓰고 상수명을 대문자로 씀
//		final double PI = 3.14; // 상수는 변하지 않는 수, 상수선언을 한 것임. 
//		
//		System.out.println(PI);

		// 빙고게임 만들기
		// 가로 세로 5 X 5

		final int SIZE = 5; // 상수선언
		int x = 0, y = 0;
		int num = 0; // 입력받은 값을 가지고 판단하는 역할

		int[][] bingo = new int[SIZE][SIZE]; // 상수를 사용해서 이차원배열 만들기

		Scanner sc = new Scanner(System.in);

		// 빙고판 초기화
		for (int i = 0; i < bingo.length; i++) {
			for (int j = 0; j < bingo[i].length; j++) {
				// ********  bingo[i][j] 이 위치의 인덱스에 들어갈 값이 나오는 식이 'i * SIZE + j + 1'이다!
				// 잘 모르겠으면 표를 그려보기!
				bingo[i][j] = i * SIZE + j + 1;  
			}
		}

//		System.out.print(Arrays.deepToString(bingo));   // 1 ~ 25 까지 나옴

		// 빙고게임을 만들기 위해 숫자들의 위치를 바꿔야 함. 위치값 자체를 난수로 만들어야 한다.
		// 랜덤

		// 빙고판 랜덤값으로 섞기
		for (int i = 0; i < SIZE; i++) {
			for (int j = 0; j < SIZE; j++) {
				x = (int) (Math.random() * SIZE); // 0 ~ 4 크기의 인덱스에 SIZE * SIZE 까지의 랜덤값을 넣어라
				y = (int) (Math.random() * SIZE);

				// 교환
				int temp = bingo[i][j]; // 빈 자리에 수를 넣어줌
				bingo[i][j] = bingo[x][y];
				bingo[x][y] = temp;

			}
		}

//		System.out.println(Arrays.deepToString(bingo));

		// 5 x 5 빙고판을 화면에 출력해보기

		// for 문으로 표현
//		for (int i = 0; i < SIZE; i++) {
//			for (int j = 0; j < SIZE; j++) {
//				System.out.print(bingo[i][j] + " ");
//			}
//			System.out.println();
//		}

		// arr 배열
		// arr[] 행 -> 이렇게 나누는 이유는 실제 이차원배열에서 참조방식이 행 따로, 열 따로 이기 때문.
		// arr[][] 행렬

		// 향상된 for문 : 편하고 오류를 방지할 수 있다.
		// int[] , int 는 타입, []는 행
		
		
		// 빙고 게임 진행

		do {

			for (int[] a : bingo) {
				for (int n : a) {
					System.out.print(n + " ");
				}
				System.out.println();
			}
			System.out.println();

			System.out.printf("1 ~ %d 의 숫자를 입력하세요. (종료 : 0) > ", SIZE * SIZE);

			// 값을 입력받는 곳
			num = sc.nextInt();

			boolean flag = true;

			// 빙고 안에 들어있는 숫자와 입력받은 숫자가 같은지 보고 같으면 0을 넣어줘라.
			// 입력받은 값이 0이면 멈춰라!
			for (int i = 0; i < SIZE; i++) {
				for (int j = 0; j < SIZE; j++) {
					if (bingo[i][j] == num) {
						bingo[i][j] = 0;
						flag = false;
						break;
					}
				}

				if (!flag) {
					break;
				}
			}
			
			// 빙고인지 체크해주기

			int sum = 0;
			flag = true;

			for (int i = 0; i < SIZE; i++) {
				sum = 0;
				for (int j = 0; j < SIZE; j++) {
					sum += bingo[i][j];
				}

				if (sum == 0) {
					flag = false;
					break;
				}
			}
			
			// 위 조건이 만족되어 빙고가 되면 프로그램 끝내기, do-while문 끝내기
			
			if (!flag) {
				break;
			}
			

		} while (num != 0);
		
		// 다 끝나고 0으로 빙고가 된 화면을 한번 더 출력하기 위해 다시 코드를 한 번 더 넣어줌.
		for (int[] a : bingo) {
			for (int n : a) {
				System.out.print(n + " ");
			}
			System.out.println();
		}


		// 가로로 한 줄이 맞으면 "빙고! "라고 출력하고 종료해라 (추가적인 미션이었지만 미완..)
		System.out.println();
		System.out.println(" ===================== ");
		System.out.println(" ===== B I N G O ===== ");
		System.out.println(" ===================== ");

		}

	}

'2024_UIUX 국비 TIL' 카테고리의 다른 글

UIUX _국비과정 0408  (0) 2024.05.29
UIUX _국비과정 0405  (0) 2024.05.29
UIUX _국비과정 0403  (0) 2024.05.29
UIUX _국비과정 0402  (0) 2024.05.29
UIUX _국비과정 0401  (0) 2024.05.28

작성 : 2024. 4. 3. 

 

개발블로그 운영하기

노션에 메모한 내용으로 TIL작성하기, 깃허브 알아보고 시도해보기

// 반복문 제어
	// break (반복문의 종료), continue


//break (반복문의 종료) 사용

	for (int i = 0; i <= 10; i++) {
		if (i >= 6) {
			break;   // 사용되는 순간 강제종료
		}
		System.out.println( i + ". hello");
	}
	
	결과 :
	
0. hello
1. hello
2. hello
3. hello
4. hello
5. hello


//continue 사용

for (int i = 0; i <=10; i++ ) {
			if (i % 2 == 0) {
				continue; // 홀수만 출력하고 싶을 때. 짝수가 나오면 다시 for문으로 올라가 돌려라.
			}
			System.out.println(i);
		}

결과 :

1
3
5
7
9



//키보드로 부터 데이터를 입력받고 어떤 값인지에 따라 반복문을 실행할지,안할지 결정하는 문제를 만들어보자.
// 점심메뉴 후보 중 1, 2, 3번을 선택할 수 있고 4번을 선택하기 전까지 계속 새로 선택할 수 있다.
		
		java.util.Scanner sc = new Scanner(System.in);
		System.out.println("1.짜장면 2.김치찌개 3.돈까스 4.종료");
		System.out.println("선택>>");
		int sel = sc.nextInt();

		// 무한반복이 필요한 경우 while문을 사용 
		// while문 조건이 참일때 계속 실행, 따라서 해당 코드는 제어문이 없으므로 무한반복
		while (true) {
			if (sel == 1) {
				System.out.println("오늘의 메뉴는 짜장면");
			} else if (sel == 2) {
				System.out.println("오늘의 메뉴는 김치찌개");
			} else if (sel == 3) {
				System.out.println("오늘의 메뉴는 돈까스");
			} else if (sel == 4) {
				System.out.println("종료");
			}
		}
		
		결과 :
		
		1.짜장면 2.김치찌개 3.돈까스 4.종료
    선택>> [키보드로 입력하는 칸]
    
    // 지금까지의 코드는 키보드로 선택 칸에 어떤 번호를 입력하던 무한루프
    
    // -> 내가 추가적으로 만들어보고 싶은 것은 랜덤으로 점심메뉴 정하기. 번호를 입력하면 그 번호에 해당하는 메뉴가 뭔지 보여준다. 위 문제를 해결하고 나면 간단하게 응용해서 바로 만들 수 있을 듯.
    
    
    무한루프를 제어하기 위해 수정된 코드 :
    
    	java.util.Scanner sc = new Scanner(System.in);

		// 무한반복이 필요한 경우 while문을 사용
		while (true) {

			System.out.println("1.짜장면 2.김치찌개 3.돈까스 4.종료");
			System.out.print("선택>>");
			int sel = sc.nextInt();

			if (sel == 1) {
				System.out.println("오늘의 메뉴는 짜장면");
			} else if (sel == 2) {
				System.out.println("오늘의 메뉴는 김치찌개");
			} else if (sel == 3) {
				System.out.println("오늘의 메뉴는 돈까스");
			} else if (sel == 4) {
				System.out.println("종료");
				break; // while문을 종료
			}

		}

		System.out.println("프로그램 종료");
		
		
		
		// break가 어디를 제어하는지 알아보기 위해 작성한 코드
		
		
				for (int i = 1; i <= 5; i++) {

			if (i == 3) {
				break;
			}
			System.out.println("out for ing");

			for (int j = 1; j <= 5; j++) {
				if (j == 2) {
					break; // break를 감싸고 있는 가장 가까운 반복문 제어!
				}
				System.out.println("hello");
			}
		}
		
		결과 :
		
out for ing
hello
out for ing
hello

// 4번 돌아가는 결과가 나옴 (i가 0부터 시작한다는 것 항상 기억)

// for문을 사용해서 로또번호 출력

 1~45 까지의 숫자, 6개를 추출 = 임의의 숫자 6개 -> 난수라고 함.
 난수
 Math.random()
 범위 : 0.0 <= r < 1
 System.out.println(Math.random());  // 찍히는 난수를 볼 수 있음



		System.out.println(Math.random() * 10);  // 0.xx ~ 9.xx 로 범위가 바뀜
		(int)(Math.random() * 10) // 0 ~ 9 로 바뀜
		(int)(Math.random() * 10) + 1 // 1 ~ 10
		(int)(Math.random() * 난수의 갯수) + 난수의 최소값
		난수의 갯수 => 난수의 최대값 - 난수의 최소값 + 1 => 10 - 1 + 1



	// 난수 구하는 공식
		for (int i = 1; i <= 20; i++) {
			System.out.println((int)(Math.random()* 10) + 1);
		}

 

배운 것을 응용해 만들어보고 싶은 것 하나씩 만들어보기!

// -> 내가 추가적으로 만들어보고 싶은 것은 랜덤으로 점심메뉴 정하기. 번호를 입력하면 그 번호에 해당하는 메뉴가 뭔지 보여준다. 위 문제를 해결하고 나면 간단하게 응용해서 바로 만들 수 있을 듯.

 

 1 ~ 45까지 난수 출력
 
			예시) 1 ~ 12까지의 랜덤 숫자 10가지 출력
           (int) (Math.random() * (12-1+1)) + 1
            = (int) (Math.random() * 12) + 1
            
            
	for (int i = 1; i <= 10; i++) {
				System.out.println((int)(Math.random()* 45) + 1);
			}
		}
		
		
		// 로또 번호 생성 -> 중복제거 아직 안함
		
		int lotto;
		
		for (int i = 1; i <= 6; i++) {
			lotto = (int)((Math.random()* 45) + 1) + 1;
			System.out.println(lotto);
		}

 

 

  • 가위바위보 게임 만들기
System.out.println("입력>>");
			me = sc.nextInt();
			
      // 컴퓨터가 보를 내고 사용자가 가위를 내면 컴퓨터가 이기는 조합이 빠져있다.
			if (com == 1 && (me == 1 || me == 3)) {
				System.out.println("다시하기");
			} else if (com == 1 && me == 2) {
				System.out.println("승!");
				break;
			} else if (com == 2 && (me == 1 || me == 2)) {
				System.out.println("다시하기");
			} else if (com == 2 && me == 3) {
				System.out.println("승!");
				break;
			} else if (com == 3 && (me == 3 || me == 2)) {
				System.out.println("다시하기");
				} else if (com == 2 && me == 1) {   // com == 2 가 아니라 3
				System.out.println("승!");
				break;
			}
			
--------------------------------------------------------------------------------
					
수정된 코드 :

		while (true) {
			com = (int) (Math.random() * 3) + 1;
			System.out.println("1.가위 2.바위 3.보");
			System.out.println("입력>>");
			me = sc.nextInt();

      // 내가 이기는 경우에는 종료니까 내가 이기는 경우의 수만 계산하면 됨.
			if ((com == 3 && me == 1) || (com == 1 && me == 2) || (com == 2 && me == 3)) {
				System.out.println("컴퓨터 : " + com);
				System.out.println("당신의 승!");
				break;
				
				// 컴퓨터와 비기는 경우와 나머지는 다시하기
			} else if (com == me) {
				System.out.println("컴퓨터 : " + com);
				System.out.println("다시하기");
			} else {
				System.out.println("컴퓨터 : " + com);
				System.out.println("다시하기");
			}

결과 :

예시) 

1.가위 2.바위 3.보
입력>>
1
컴퓨터 : 3
당신의 승!



--------------------------------------------------------------------------------
			
			// 강사님의 풀이 -> (com - me)의 값에서 규칙성을 찾아서 품.

		int com; // 컴퓨터의 값을 담을 변수
		int me; // 나의 답을 담을 변수
		Scanner sc = new Scanner(System.in);

		
		while (true) {
			com = (int) (Math.random() + 3) + 1;
			System.out.println("1.가위 2.바위 3.보");
			System.out.println("입력>>");
			me = sc.nextInt();

			int result = me - com;

			if (result == -2 || result == 1) {
				System.out.println("you win!");
				break;
			} else if (result == -1 || result == 2) {
				System.out.println("you lose");
			} else {
				System.out.println("비겼습니다");
			}
		}

 

 

  • boolean 을 이용한 제어문

- thread를 관리하는 것에 유용함.

// break 외의 boolean를 이용한 제어문

  // boolean를 이용해 flag를 true라고 지정해서 제어문에 사용하기
	boolean flag = true;    

	Scanner sc = new Scanner(System.in);

	while (flag) {  
		System.out.println("입력>>");
		int sel = sc.nextInt();
		if (sel == 1) {
			System.out.println("1번");
		} else if (sel == 2) {
			System.out.println("2번");
		} else if (sel == 3) {
			System.out.println("3번 프로그램 종료");
			flag = false;
		}
	}
	
	스레드같은 프로그램 사용할 때 이 방법을 자주 씀.

 

 

  • 배열

- 동일한 타입의 데이터를 여러개 저장하는 변수

- 1차원 배열, 다차원 배열(2차원)

- 배열은 인덱스번호를 이용, 인덱스번호는 0번부터 시작

- 자동초기화가 된다.

- 순차적인 데이터 처리

int x, y, z, k, f;  // 이렇게도 배열을 선언할 수 있지만 효율적이지 X
		
		// 배열선언 방법
		
		// 1번 방법)
		int[] arr;  // 연속된 형태의 배열 선언
		arr = new int[5];  // 배열의 생성 -> 저장공간 5개를 만들 수 있다
		// arr은 주소값을 가지고 있다, arr[인덱스번호] 이를 이용해 각 배열의 위치를 구분할 수 있다!
		
		
		// 2번 방법)
		int[] arr = new int[5];  //선언과 초기화 동시에.
		
		
		
		-> 값 찍어보기
		
		arr[0] = 10;  // 배열의 초기화
		arr[1] = 20;
		arr[2] = 30;
		arr[3] = 40;
//		arr[4] = 50;
		
		System.out.println(arr[0]);
		System.out.println(arr[1]);
		System.out.println(arr[2]);
		System.out.println(arr[3]);
		System.out.println(arr[4]);
		
		결과 :
		
10
20
30
40
0 // 초기화를 하지 않아 값을 찾을 수 X



// 1번과 2번 방법을 한번에

int x, y, z, k, f;
int[] arr = {10, 20, 30, 40, 50};



// 배열에 들어있는 값 출력

	int[] arr = new int[5];
		
		for (int i = 0; i < 5; i++) {  
			arr[i] = (i + 1)* 10;
		}
		
		for (int i = 0; i < 5; i++) {  
			System.out.println(arr[i]);
		}
		
		
	// 같은 코드 	=
		
		// arr.length -> 배열의 길이(크기)를 나타냄.
		
		int[] arr = new int[5];
		
		for (int i = 0; i < arr.length; i++) {  
			arr[i] = (i + 1)* 10;
		}
		
		for (int i = 0; i < arr.length; i++) {  
			System.out.println(arr[i]);
		}

 

 

 

// 문제 풀기!
// int 크기가 10인 배열을 만들어라
// 반복문을 사용해서 1~10 정수로 초기화
// 배열의 값의 총합을 구하는 프로그램을 작성
	
--------------------------------------------------------------------------------	
	// 내가 풀었을 때 코드가 실행되지 않음 -> 해결방법 추가 (완.)

	int[] arr = new int[10];
	int sum = 1; // sum변수의 초기값을 0으로 설정해야함. 1로 설정하는 것은 잘못된 설정. 잘못된 초기값으로 잘못된 결과가 나올 수 있음.

	for (int i = 1; i < arr.length; i++) { // 여기도 0부터 시작할 것.
		arr[i] = i + 1;
		sum += i; // 이게 들어갈 게 아니라,, 배열의 요소값을 더해야 함으로 i대신 arr[i]로 바꾸기
		System.out.println(i); // i를 출력할 것이 아니라 배열의 요소값을 더한 arr[i]를 출력
	}

	System.out.println(sum); // 배열 요소들의 합
	
	
	결과 :
	
1
2
3
4
5
6
7
8
9   
46  총합에서 9가 더해지지 않은 숫자가 나옴. -> 잘못된 코드

--------------------------------------------------------------------------------	

수정된 코드 :

int[] arr = new int[10];
		int sum = 0;  
		
		for (int i = 0; i < arr.length; i++) {
			arr[i] = i + 1;
			sum += arr[i];
			System.out.println(arr[i]);
		}
		
		System.out.println("배열의 요소들의 합: " + sum);
		
		
		결과 :
		
1
2
3
4
5
6
7
8
9
10
배열의 요소들의 합: 55
		
		
--------------------------------------------------------------------------------	
		

    // 강사님 풀이
		
		int[] arr = new int[10];
		int sum = 1;

		for (int i = 0; i < arr.length; i++) {
			arr[i] = i + 1;
		}
		
		int sum = 0;
		for (int i = 0; i < arr.length; i++) {
			sum += arr[i];
		}

		System.out.println(sum);
		
		결과 :
		
		55
		
		
		
		
		
--------------------------------------------------------------------------
		
	import java.util.Scanner;

  //스캐너를 사용해서 점수를 입력받을 예정.
  public class ExamTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		// 학생의 성적을 구하는 프로그램

		String[] subject = { "국어", "영어", "수학", "과학", "사회" };

		// 점수를 담는 배열
		int[] score = new int[5];

		// 총점
		int sum = 0;
		// 평균
		double avg = 0.0;

		// 다섯과목 점수입력, scanner를 쓸 때는 어떤 것을 입력하라는 것인지 메세지를 줘야 함.
		Scanner sc = new Scanner(System.in);

		for (int i = 0; i < score.length; i++) {
			System.out.println("[" + subject[i] + "] 점수를 입력하세요");
			score[i] = sc.nextInt();
		}

		// 총점
		for (int num : score) {
			sum += num;
		}

		// 평균
		// 소수점을 구하기 위해 (double)로 형변환
		avg = sum / (double) score.length;

		// 향상된 for문으로 나타내기
    //		int i = 0; 
    //		// i를 다시 선언
    //		for(String sub : subject) {
    //			System.out.println(sub + " 점수 : " + score[i++]);  // i만 선언해서 알아서 증가하는 게 아니므로 i++ 증가를 해줘야 함.
    //		}

		// 기존 for문으로 나타내기
		for (int i = 0; i < subject.length; i++) {
			System.out.println(subject[i] + " 점수 : " + score[i]);
		}

		// 총점과 평균 출력
		System.out.println("총점 : " + sum);
		System.out.println("평균 : " + avg);

		// 과목 중에 가장 점수가 높은 과목의 이름과 점수를 출력 (문제!)

		// 최고 점수는 구함(완.)
		int max = score[0];
		// 최고, 최저 점수의 과목 구하기(도움.)
		String sub = null;  // 초기화해서 들어오는 값이랑 비교
		// 최저 점수
		int min = score[0];

		for (int i = 1; i < score.length; i++) { // 0번부터 비교하는 것은 무의미함.
			if (score[i] > max) {
				sub = subject[i];
				max = score[i];
			}
			if (score[i] < min) {
				sub = subject[i];
				min = score[i];
			}
		}

		System.out.println(sub + "과목의 점수가 가장 높습니다. " + max + "점");
		System.out.println(sub + "과목의 점수가 가장 낮습니다. " + min + "점");
	}
}

'2024_UIUX 국비 TIL' 카테고리의 다른 글

UIUX _국비과정 0405  (0) 2024.05.29
UIUX _국비과정 0404  (0) 2024.05.29
UIUX _국비과정 0402  (0) 2024.05.29
UIUX _국비과정 0401  (0) 2024.05.28
UIUX _국비과정 0329 첫 날!  (0) 2024.05.28

작성 :  2024. 4. 2. 

  • switch문

등가연산( ==, != ), 범위비교를 할 수 없음 실수 사용은 불가

switch(비교값) {
case1 : 실행문;
break;
}

		int select = 4;

		switch (select) {
		case 1:
			System.out.println("1번 선택");
			break;
		case 2:
			System.out.println("2번 선택");
			break;
		case 3:
			System.out.println("3번 선택");
			break;
			default : System.out.println("번호를 잘못 선택함");
		}
		
		
		
		
		
->  계산기 만들기
// 피연산자(문자), 연산자(숫자)
		
		Scanner sc = new Scanner(System.in);
		// 스캐너를 넘길 때 버퍼에 담아놓고 데이터를 보내줌, 버퍼에서 엔터값을 가지고 와 넘겨줌, 단위테스트를 꼭 해보기

		System.out.print("정수 하나 입력 : ");
		int num1 = sc.nextInt();

		sc.nextLine(); // 엔터값을 가지고 옴. 이렇게 해줌으로서 버퍼가 대기.

		System.out.print("연산자 입력 ( + , - , x , / ) : ");
		String op = sc.nextLine();

		System.out.print("정수 하나 입력 : ");
		int num2 = sc.nextInt();

		switch (op) {
		case "+":
			System.out.println(num1 + num2);
			break;
		case "-":
			System.out.println(num1 - num2);
			break;
		case "x":
			System.out.println(num1 * num2);
			break;
		case "/":
			System.out.println(num1 / num2);
			break;
		default:
			System.out.println("연산자가 잘못 선택됨");
		}

 

  • 반복문

만들어 놓은 실행문은 여러 번 출력하고 싶을 때 for, while, do-while

형태 :

for(초기값; 조건식; 증감식) {

반복할 실행문

}

for (int i = 0; i < 10; i++) {
		System.out.println( i + ". hello" );
	}
	
	
	결과 : 
	
0. hello
1. hello
2. hello
3. hello
4. hello
5. hello
6. hello
7. hello
8. hello
9. hello





int i;  // i를 for문 밖에서 선언하면 더 넓은 범위로 사용할 수 있음. 
           하지만 보통은 for문 내부에서 사용! i는 (지역변수)

	for (i = 0; i < 10; i++) {
		System.out.println( i + ". hello" );
	}
	
	
	
	-------------------------------------------------------------------------
	
	
	-> 감소하는 형태의 forfor (int i = 10; i >= 1; i--) {
			System.out.println( i + ". hello" );
		}
		
		결과:
		
10. hello
9. hello
8. hello
7. hello
6. hello
5. hello
4. hello
3. hello
2. hello
1. hello
		
		------------------------------------------------------------------------
		
		
		-> 증감식을 바꿔보자
		
		
		for (int i = 1; i <= 10; i+=2) {   // i = i + 2 증감식에 따라 반복회수 변경 가능.
			System.out.println( i + ". hello");
		}
		
		결과:
		
1. hello
3. hello
5. hello
7. hello
9. hello



  // 초깃값을 두 개 선언해서 활용할 수도 있음
		
		for(int i = 1, j = 10; i <= 10; i++, j--) {
			System.out.println("i: " + i + ". " + "j: " + j);
	}
	
	
	
	
	// for문 중첩반복문
		
		for (int i = 1; i <= 5; i++) {
			for (int j = 1; j <= 3; j++) {
				System.out.println(i + "hello");
			}
		}
		
		
		
		
		// 반복문을 사용한 연산
		// 1 ~ 10 까지 정수를 모두 더해라
		// 규칙성이 있는 연산은 반복문을 사용할 수 있다. 
		
		int sum = 0;   // 값을 담는 곳, 기억하는 공간이라고 생각하면 됨
		
		for(int i = 1; i <= 10; i++) {
			sum = sum + i; 
		}
		
		System.out.println(sum);
		
		
		

-> 5! 를 계산하는 for문을 만들어라! (완.)
		
		int fac = 1;   // 0은 뭘 곱해도 0이므로 1부터 시작
		
		for (int i = 1; i <= 5; i++) {
			fac *= i;  //fac = fac * i;
		}
		
		System.out.println(fac);

 

  • while문

형태 :

초기값

while(조건식) {

실행문

증감식

}

int i = 1;
	while (i <= 10) {
		System.out.println(i + ". hello");
		i++;
	}
	
	
	
	 중첩 whileint i = 1;
		while (i <= 5) { // 5
			int j = 1;  // 위치 중요, while문 밖에 있으면 j가 돌아가지 않음.
			while (j <= 3) { // 3
				System.out.println("hello");
				j++;
			}

			i++;
		}
		
		
		
		--------------------------------------------------------------------
		
		// do - while문  -> 조건을 비교하기 전에 무조건 한 번 돌아감.
		
		형태 :
		
		do {
			실행문
		}while (조건식);
		
		
		예) 
		
		int i = 1;
		
		do {
			System.out.println("hello");
			i++;
		} while (i <= 10);

 

 

이해했다고 착각하지 말 것.

수업 끝난 후 시간을 활용할 것.

하다보면 쌓여서 잘 되는 것.

 

// 별찍기
	
	for (int i = 1; i <= 5; i++) {   // 세로
		for (int j = 1; j <= 10; j++) {    // 가로
			System.out.print("*");
		}
		System.out.println();
	}
	
	
	
	결과 :
	
**********
**********
**********
**********
**********


// while 문으로 바꾸기

		int i = 1;

		while (i <= 5) {
			int j = 1;
			while (j <= 10) {
				System.out.print("*");
				j++;
			}
			System.out.println();
			i++;
		}
		
		
		
		결과 :
		
**********
**********
**********
**********
**********


// 별찍기 예)


for (int i = 1; i <= 5; i++) {
			for (int j = 1; j <= 5; j++) {
				if (i > j) {
					System.out.print(" ");
				} else {
					System.out.print("*");
				}
			}
			
			System.out.println();
		}
		
	
	결과 :
	
*****
 ****
  ***
   **
    *
    
    
    
    
    
    
    
    마름모 윗부분 문제풀이) (완.)
    
    
    for (int i = 1; i <= 5; i++) {
			for (int j = 0; j < (5 - i); j++) {
				System.out.print(" ");
			}
			for (int k = 1; k < (i * 2); k++) {
				System.out.print("*");
			}
			System.out.println();

		}
		
		
		결과 :
		
    *
   ***
  *****
 *******
*********
		
		
		
		// 강사님 풀이
		
		for (int i = 1; i <= 5; i++) {
			for (int j = 1; j <= 5 + i - 1; j++) {
				if (i + j < 6) {
					System.out.print(" ");
				} else {
					System.out.print("*");
				}
			}
			System.out.println();
		}

어쩔 땐 풀고 어떨 땐 못 푸는 걸 보니 이해를 못한듯..;;

→ 맥북으로 수업을 들으니 앞으로 설치할 프로그램들을 미리 알려주시길 부탁했는데 그냥 학원 컴퓨터로 하라고;;

맥북으로는 수업을 못듣는걸까..

'2024_UIUX 국비 TIL' 카테고리의 다른 글

UIUX _국비과정 0405  (0) 2024.05.29
UIUX _국비과정 0404  (0) 2024.05.29
UIUX _국비과정 0403  (0) 2024.05.29
UIUX _국비과정 0401  (0) 2024.05.28
UIUX _국비과정 0329 첫 날!  (0) 2024.05.28

작성 : 2024. 4. 1. 

 

전 시간 내용 복습 :

+ 공부양이 많으니 스스로 정리 매일매일

+ 기사 자격증을 따면 좋겠지만 자격요건이 안되기 때문에 정보처리산업기사 자격증이라도 따기

변수는 기본적으로 자료형의 값을 가지게 된다.

변수는 모양에 맞게 만들어져야 한다.→ 타입! (기본형)

( byte, short, char, int, long ) → 정수

-128~+127 < < < <

차이점은 크기! 값의 범위가 있음.

정수의 기본타입 int형, 내부에서는 int형이 기본!

byte를 써도 내부에서 int형을 쓰기 때문에 처리 속도가 떨어짐.

int은 ‘-21억 4천~ +21억 4천’ 의 범위를 가짐

long은 19자리 숫자 ..


  • 변수명 규칙

  1. 숫자를 첫번 째 값으로 사용 불가 : int 2age; (x), int age2;
  2. 예약어 사용 불가 : int int; (x)
  3. 가능한 특수문자 : '_', '$' -> int a_b; (o) , int age@; (x)

 

작명해야 하는 경우 : 클래스명, 변수명, 메소드명 -> 낙타표기법
ex) 클래스명 : HelloWorld (파스칼 표기법)
ex) 변수명 : 소문자로 시작, helloWorld (카멜 케이스)
ex) 메소드명 : 소문자로 시작, helloWorld() -> 뒤에 ()가 붙음. (카멜 케이스)

 

파스칼 표기법 : 모든 문자의 첫 글자를 대문자로 작성

카멜케이스 표기법 : 두번째 문자부터 대문자로 작성

스네이크 표기법 : 문자 사이에 언더바 삽입 (background_color)

위 세개 중 하나로 통일해서 써야 함.

  • 형변환 (boolean 제외) 자동형변환, 강제형변환

크기 :

-----------------> 자동형변환
		                값을 표현하는 범위가 folat가 더 큼 (소수점 가능)
byte(1) < short(2) < int(4) < long(8) < float(4) < double(8)
		  char(2)  <
	      (바이트)
		                              <----------------- 강제형변환

 

    byte b = 10;
	int i;

	i = b;   // byte -> int (자동형변환)

	int i2 = 10;
	byte b2 = (byte)i2;   // int -> byte (강제형변환)

 

 

  • 연산자
산술연산자 : + , - , *, / (몫) , % (나머지)

	int x = 5;
	int y = 2;

	System.out.println(x + y);         
	System.out.println(x * y);
	System.out.println("몫 : " + (x / y));
	System.out.println("나머지 : " + (x % y));
	System.out.println(x / (float)y); // 5 / 2 -> 5.0f / 2.0f 더 큰 단위로 형변환


증감연산자 (변수에만 적용 가능) : ++ , --
	
	 전치, 후치
	 변수의 값을 1 증가, 1 감소
	 
	 int x = 10;
		int result;
		
    // result = ++x + 10;  // x = 11 result = 21
		
		result = x++ + 10;  // x = 11 result = 20   -> 후치의 경우, 나중에 x가 증가 됨.
		// 전치, 후치로 연산에서의 우선순위에 참여 순위가 정해짐		
		
	  System.out.println(x);
	  System.out.println(result);


비교연산자 : == , != , < (초과), > (미만), <= (이하), >= (이상)
  
    결과 : true , false

	int x = 10;
	int y = 20;

	System.out.println(x == y);  //false
	System.out.println(x != y);  //true
	
	
논리연산자 : && , ||, ! 
	
		 true, false
		 조건1 && 조건2
		 결과 : true, false
		
		true && true  -> true
		true && false  -> false
		false && true  -> false
		false && false  -> false
		
		// && 조건1과 조건2가 만족해야만 true가 나옴
		
		true || true  -> true
		true || false  -> true
		false || true  -> true
		false || false  -> false
		
		// || 연산자는 조건1 이나 조건2 둘 중 하나만 충족해도 true
		
		!true = false
		!false = true
		
		// ! 는 부정
		
		int x = 10;
		int y = 20;
		
		System.out.println((x == 10) && (y == 20)); //true
		System.out.println((x == 10) && (y != 20)); //false
		
		System.out.println((x == 10) || (y == 20)); //true
		System.out.println((x != 10) || (y == 20)); //true 
		System.out.println((x != 10) || (y != 20)); //false
		
			
논리연산자의 범위 연산
		
		int x = 5;
		
		System.out.println(x > 1 && x < 10);  //true
		System.out.println(x < 1 || x > 10);  //false
		
			
최단평가
		
		true && true 
		false && 판단하지 않는다   -> 어차피 false
		
		true || 판단하지 않는다    -> 어차피 true
	 
	 
비트 연산자 (연산을 10으로만 한다)
	 
		 &, | , ^ , ~ 
		 0,1
		 0 & 0 
		 >> , << 
		
		 (조건식) : 우선순위
	   (자료형) : 캐스팅(형변환)
		
		
조건연산자(삼항연산자)
		 
		 (조건식(true/false)) ? 값1 : 값2   -> true 면 값1이 결과 , false 면 값2가 결과
		
		int age = 10;
		String result = age >= 20 ? "성인" : "미성년자";
		System.out.println(result);
		
		
단항연산자 : ++ , --
이항연산자 : + , *
삼항연산자 : 조건식 ? 값1 : 값2 
			
		
대입연산자 : = 
	   
		 +=, -=, *=, /=, |= , >>= , ...
		
		int x = 10;
		int y;
		
		//y += x;  // y = y + x
		
		x += 10;   // x = x + 10
		System.out.println(x);

 

  • 메모리 구조에 대해 알아보기

컴퓨터의 메모리 구조는 매우 복잡한 구성 요소로 이루어져 있습니다. 이는 주로 다음과 같은 메모리 구성 요소를 포함합니다:

  1. 레지스터(Register): 이는 CPU 내부에 존재하며, 계산과 명령어 실행을 담당하는 가장 빠른 메모리입니다.
  2. 캐시 메모리(Cache Memory): CPU와 RAM 사이에 위치하며, 자주 사용되는 데이터를 빠르게 접근하기 위해 사용됩니다.
  3. 주 메모리(Main Memory 또는 RAM): 이는 컴퓨터의 주요 메모리로, 운영 체제, 응용 프로그램, 데이터 등이 로드되는 곳입니다.
  4. 보조 메모리(Secondary Memory): 하드 디스크나 SSD와 같은 저장 장치로, 컴퓨터가 전원을 끄더라도 정보를 저장할 수 있는 영구적인 메모리입니다.

컴퓨터는 이러한 메모리 계층 구조를 통해 데이터를 효율적이고 빠르게 처리할 수 있습니다.

-노션 AI 기능을 사용해 정리

 

 

값을 입력받고 조건에 만족하는지 알아보기

조건문 - 실행문을 실행하기 위한 조건

if, switch

if (조건식) { 
실행문
}

위와 같은 형태로 사용함.

-> 20살 이상이면 성인이라는 메세지를 띄워보자.

int age = 10;
		
		if (age >= 20) {
			System.out.println("성인 인증");
		} 
		
		if (age >= 20) {
			System.out.println("성인 인증");  //true
		} else {
			System.out.println("미성년자 입니다. ");  //false
		}
		
		
다중 ifif (조건식) {
			실행1
		} else if(조건식) {
			실행2
		} else if(조건식) {
			실행3
		} else {
			부합하는 조건이 없는 경우 머지막에 무조건 실행 
		}
		
		
		-> 스캐너로 키보드로 입력된 값을 받아 번호를 선택해보자.
		
		Scanner sc = new Scanner(System.in);  // 문자로 받아들임, 키보드로부터 받아들임.
		//sc.nextInt();                         // nextInt -> 숫자로 바꿔줌.
		System.out.print("정수 한 개를 입력하세요 : ");
    //int select = sc.nextInt();    		String str = sc.nextLine();  // -> 문자열을 숫자로 바꿔줘야 함.
		int select = Integer.parseInt(str);  // -> 문자열을 숫자로 바꿔줌.
		
		if(select == 1) {
			System.out.println("1번 선택");
		} else if(select == 2){
			System.out.println("2번 선택");
		} else if (select == 3){
			System.out.println("3번 선택");
		} else if (select == 4){
			System.out.println("4번 선택");
		} else {
			System.out.println("번호를 잘못선택했습니다");
		}
		
		
중첩 ifif(조건문) {
			if (조건문) {
				실행문
			} else {
		  	}
			}
			
			
			
			-> x의 값이 공배수인지 알아보자
			
int x = 6;
		
		if (x % 2 == 0) {
			if (x % 3 == 0) {
				System.out.println("2와 3의 공배수 입니다.");
			} else {
				System.out.println("2와 3의 공배수가 아닙니다.");
			}
		} else {
			System.out.println("2와 3의 공배수가 아닙니다.");
		}
		
		
		-> 아래와 같이 나타낼 수도 있다.
	
		if (x % 2 == 0 && x % 3 == 0) {
			System.out.println("2와 3의 공배수 입니다.");
		} else {
			System.out.println("2와 3의 공배수가 아닙니다.");
		}
		
		
		-> Scanner 를 이용해 숫자를 입력받아 조건에 만족하는지 알아보기
		
		Scanner sc = new Scanner(System.in);
		System.out.print("양의 정수 하나를 입력하세요 (1 ~ 10) : ");
		int num = sc.nextInt();  //스캐너에서 입력된 문자를 숫자로 바꿔줌
		
		if (num >= 1 && num <= 10) {
			System.out.println("1 ~ 10 사이의 값입니다. ");
		} else {
			System.out.println("범위를 벗어난 값입니다. ");
		}

 

'2024_UIUX 국비 TIL' 카테고리의 다른 글

UIUX _국비과정 0405  (0) 2024.05.29
UIUX _국비과정 0404  (0) 2024.05.29
UIUX _국비과정 0403  (0) 2024.05.29
UIUX _국비과정 0402  (0) 2024.05.29
UIUX _국비과정 0329 첫 날!  (0) 2024.05.28

작성 : 2024. 3. 29. 

 

앞으로 배울 것들

  • 자바 언어를 배웁니다. 자바와 c언어 연결하는 법 시도해보세요. 안드로이드 기반의 속도가 중요한 게임, 아이오티,블록체인 등 쓰이는 곳이 많아요.
  • 자바의 웹 관련 분야를 배웁니다. 파이썬은 ai에 특화,,
  • 자바의 단점은 무겁다는 것.
  • html, css, javascript(jquery,react,view,next.js)에 대해 배웁니다. javascript는 많이 알수록 좋아요. -> 프론트엔드
  • UI/UX 디자인(figma) 화면디자인을 해볼겁니다. pc,태블릿,컴퓨터화면 세가지로 꼭 해보기.
  • 반응형 웹을 만들어 볼 예정.
  • db 데이터베이스에 대해 배웁니다. (오라클, mysql, mogdb)
  • jsp(웹프로그래밍) 서버프로그램이라고도 합니다. 실제 웹프로그래밍을 합니다.
  • spring(프레임위크) 만들어진 틀을 가지고 더 나은 것을 만들어보기
  • 대망의 프로젝트

강사님의 말씀 : 다 해야하니까 해야합니다.

기분의 파형을 마인드컨트롤을 통해 조절하세요.

수업만 들어서 안되면 유튜브 보세요.

슬랙이나 노션을 사용해서 수업 내용을 꾸준히 메모하세요.

강사님의 팁 :

  • 자료구조, 알고리즘 공부해보기
  • 자료구조는 실제 프로그램을 짤 때 메모리 관리를 위해 꼭 알아야함.
  • 오늘 수업 끝나고 개인적으로 공부에 대한 스케줄을 짜보기.

노션의 용도 : 소스코드를 올리거나 개념 정리 등을 올려 확인해보기. 수업이 끝나고 복습하며 확인.

유튜브 강의 추천 : 생활코딩

공부 방법 : 강압적으로 두 개씩 들어보기

추가적으로 공부하면 좋은 것들 :

웹 view : 보여지는 화면

아래 모든 것들을 웹이라고 함.

AI (Artificial Intelligence) : 빅데이터를 만들어서 AI를 학습시키면 웹을 통해 보여줌

블록체인 : 변조가 불가능

IoT : 하이패스같은 것. 신호등 등

사물인터넷(Internet of Things, IoT)의 이해 IoT 뜻은 네트워크에 연결된 스마트 기기를 연결 구성하여 다른 기기와 데이터를 주고받는 것을 말합니다.


 

이클립스 설치 및 자바에 대하여..

자바의 새로운 버전은 인공지능 관련 패키지를 많이 지원. 하지만 무거워서 잘 쓰지 않음.

버전 상관 없이 구현이 되게 잘 만드는 것이 중요함.

자바 프로그래밍을 하기 위해 자바와 이클립스 설치 완.

프로그램을 만들 때 고려

  1. 구조
  2. 경량화
  3. 재사용

자바 → 객체지향언어

객체 : 모든 사물 (유형, 무형)

 

class Student {

메인함수 public ststic void main(String[] arg) {

하고 싶은 일

}

}

위와 같은 형태를 이용해 객체를 표현

클래스명 작명규칙 : 클래스명의 첫 글자는 무조건 대문자, 한글 쓰지 말기, 저장할 때 클래스명과 대소문자 똑같이 하기.

 

Student.java → 컴파일 → 바이트(Student.class) (기계가 이해하는 언어) → 로딩 → 실행엔진(JVM)

                            javac                    바이트로 바꿔주는 것 javac.exe

= "바이트로 바꿔주는 것"은 컴파일 과정입니다. 이 과정에서 코드는 컴파일러를 통해 바이트 코드로 변환되며, 이 경우 자바 컴파일러인 'javac.exe'가 이 작업을 담당합니다.

+ 컴퓨터 구조에 대해 공부해야 함.

컴퓨터 구조는 기본적으로 입력장치, 처리장치, 출력장치, 그리고 저장장치로 구성되어 있습니다.

  • 입력장치(Input Device): 키보드, 마우스 등 사용자로부터 데이터를 입력받는 장치입니다.
  • 처리장치(CPU, Central Processing Unit): 입력받은 데이터를 처리하는 장치입니다. CPU는 명령어를 해석하고 연산을 수행하는 등의 역할을 합니다.
  • 출력장치(Output Device): 처리된 결과를 사용자에게 보여주는 장치입니다. 예를 들어, 모니터, 프린터 등이 있습니다.
  • 저장장치(Storage): 데이터를 저장하는 장치입니다. 하드 디스크, SSD, 메모리 등이 있습니다.

이 외에도 컴퓨터는 여러 하드웨어와 소프트웨어로 복잡하게 연결되어 있습니다. 이 모든 것들이 결합하여 컴퓨터가 우리가 원하는 작업을 수행할 수 있게 합니다.

자바는 실행문 끝에 항상 세미콜론을 붙입니다. → ;

+ 실행되지 않았을 때 어떤 이슈가 있었고, 어떻게 해결을 했다. 이걸 꼭 기록해야 함.

+ 배운 문법을 활용하는 것이 관건!

주석을 처리하는 방법

  • // 한줄 주석
  • /* 여러 줄 주석 */

데이터 타입

  • 변수 : 데이터를 저장하는 공간
  • 숫자, 문자, 바이트 등의 데이터를 사용
  • 숫자 : 정수, 실수
  • 문자 : 한 문자(문자), 여러 문자(문자열)
  • 논리형 : 참(true) , 거짓(false)
  • 객체형(참조형) : 주소값

  • 자료형 - 기본형(8개) : boolean -> 논리형 , (byte, short, char, int, long) -> 정수 , (float, doble) -> 실수 - 참조형 자료형(데이터 타입) 변수명

자료형(데이터 타입) 변수명

/* 변수 * 데이터 값을 쓸 때 컴퓨터는 값을 어딘가에 저장해야 함. 메모리에 기억을 시켜놓고 cpu에게 보내 연산 * cpu에게 보내기 위해 변수를 사용 * 메모리에 값이 어디에 저장되어 있는지 주소를 통해 알아냄. * 변수를 알면 주소를 몰라도 메모리 값을 사용할 수 있음. */


개인적으로 추가 정리할 부분 :

데이터 타입을 '프로그래밍 작문 규칙'이라고 알려주셨는데 검색해보니 작문 규칙이라고 부르기엔 좀 헷갈린다.

데이터 타입의 정수형, 자료형 등의 분류와 자바의 작문 규칙을 이참에 찾아서 다시 정리해볼 예정이다.

 


일단 첫 날 배운 건 여기까지 였다. 추가적인 공부가 정말 많이.. 필요할 것 같다.

국비지원 카테고리에는 정말 수업에서 배운 내용까지만 올리고 java 기초정리 카테고리에 추가적인 공부 내용을 올릴 예정이다.

'2024_UIUX 국비 TIL' 카테고리의 다른 글

UIUX _국비과정 0405  (0) 2024.05.29
UIUX _국비과정 0404  (0) 2024.05.29
UIUX _국비과정 0403  (0) 2024.05.29
UIUX _국비과정 0402  (0) 2024.05.29
UIUX _국비과정 0401  (0) 2024.05.28

+ Recent posts