* Computer
CPU(프로세서)는 계산과 연산을 수행하는 중앙처리장치
RAM(주기억장치)은 데이터를 일시적으로 저장하는 메모리, CPU가 직접 액세스할 수 있다.
HDD(보조기억장치)는 데이터를 영구적으로 보관하는 디스크 드라이브이다.
CPU는 프로세싱을 담당하고, RAM은 데이터의 임시 보관을 담당하며, HDD는 데이터의 영구 보관을 담당.
* cache 역할
주기억장치 (Main Memory): CPU와 프로그램이 실행되는 데이터와 명령어를 저장하는 공간.
일반적으로 CPU와 직접적으로 연결되어 있으며,
주로 RAM(Random Access Memory)이 주기억장치로 사용.
프로세서 (Central Processing Unit, CPU): 컴퓨터 시스템의 핵심이 되는 부분으로, 데이터를 처리하고 명령어를 실행하는 역할을 함. 프로세서는 주기억장치에서 데이터를 가져와서 연산을 수행하며,
결과를 다시 주기억장치에 저장.
캐시 (Cache): 캐시는 CPU와 주기억장치 사이에 위치한 작고 빠른 임시 저장소. 캐시는 CPU가 자주 사용하는 데이터나 명령어를 미리 저장하여 빠르게 접근할 수 있도록 함. (즉 정확히는 Cache는 CPU 내부에 존재한다.)
주기억장치에 비해 접근 시간이 더 빠르기 때문에, 프로세서는 캐시에서 데이터를 가져와서 처리한다.
캐시는 컴퓨터 시스템에서 성능 향상을 위해 사용되는 임시 저장소로, 주기억장치와 프로세서 사이에 위치.
주요 역할은 속도 향상, 데이터 일관성 유지, 데이터 공유 및 재사용, 전력 절약이다.
캐시는 빠른 데이터 접근과 데이터의 일관성 유지를 통해 프로세서의 대기 시간을 줄이고
전체 시스템 성능을 향상시키며, 여러 프로세서 간의 데이터 공유와 재사용을 가능하게 하며 전력 소비를 최소화함.
비유로 설명하자면, 캐시는 뷔페에서 음식을 소분해서 접시에 담아 가져오는 것과 비슷하다.
뷔페의 음식은 모두 한 곳에 모여있는 메뉴(주기억장치)와는 달리, 각 테이블(프로세서)마다 접시(캐시)에 소분된 음식을 가져와서 먹을 수 있다. 이렇게 하면 여러가지 정보(음식)을 가져오는 속도가 빨라지고,
한 번에 많은 양을 가져오지 않아도 필요한 만큼을 즉시 use 할 수 있다.
* 프로그래밍의 진행
App을 제작하여 Actor의 데이터를 통해 OS에 전달하고 이를 컴퓨터가 실행 가능한 언어로 바꾼다.
앱은 Actor의 데이터를 사용하여 OS에 전달, 데이터 표현에는 리터럴을 사용, 변수와 배열을 사용하여 데이터를 저장조건문과 반복문을 사용하여 데이터를 제어, 함수를 사용하여 명령문을 조직적으로 관리. 함수들은 클래스에 속하며, 클래스들은 패키지나 모듈에 속할 수 있습니다.
Data 표현에서는 Literal.Data 저장에서는 Variables (변수) Array (배열)이 쓰인다.Data 제어에서는 조건문과 반복문이 쓰인다.명령문을 조직적으로 관리하는 것은 아래와 같은 순서로 묶인다.
함수=메서드
▼
클래스
▼
패키지
▼
모듈
* System.out.println(20);
System.
↑
클래스 (메서드묶음 다루는 데이터 설계도 = 도구함)
println
↑
메서드 = 함수 = 특정기능을 수행하는 명령어 묶음 = 작업을 끝낸 후 값을 리턴할 수 있다.
20
↑
메서드를 실행할 때 사용할 값 = argument(인자)
* 값 변수와 주소 변수(reference)
int a;
a = 100;
Date
today
↑
레퍼런스 ← Pointer (메모리 시작 주소를 저장하는 변수)
= new Date();
↓
날짜 및 시간데이터 → 메모리 주소 (2진수)
* Java.io.InputStream Keyboard
* Keyboard next Line()
System.out.print("나이, 이름, 취업여부? ");
# int형 값을 받을 때.
int age = keyboardScanner.nextInt();
# String형 값을 받을 때.
String name = keyboardScanner.next();
# boolean형 값을 받을 때.
boolean working = keyboardScanner.nextBoolean();
# Scanner는 꼭 사용 후에 닫아주어야한다..
keyboardScanner.close();
# age, name, working 은 각각 정수,문자열,불리언이다. %d, %s, %b 으로 형태를 변환해서 출력함
System.out.printf("%d, %s, %b\n", age, name, working);
* 배열 (Array)
https://dev-with-gpt.tistory.com/83
[코드 및 결과값]
public class Exam0130 {
public static void main(String[] args) {
// 현재 날짜 및 시각 정보를 생성한다.
// java.lang 패키지의 멤버를 사용할 때는 그냥 이름을 지정하면 된다.
// 그 외 다른 패키지의 멤버를 사용할 때는 반드시 패키지 이름을 함께 지정해야 한다.
java.util.Date today = new java.util.Date();
01. "%1$tY, %1$ty" 두 가지의 차이점
System.out.printf("%1$tY, %1$ty\n", today);
"%1$tY 는 연도를 추출하여 4글자로 출력
"%1$ty 는 연도를 추출하여 2글자로 출력
[결과]
2023, 23
02. "%1$tB, %1$tb" 두 가지의 차이점
System.out.printf("%1$tB, %1$tb\n", today);
"%1$tB 는 월을 추출하여 전체이름으로 출력
"%1$tb 는 월을 추출하여 단축이름로 출력
[결과]
January, Jan
03. "%1$tm\n"
System.out.printf("%1$tm", today);
"%1$tm 는 월을 추출하여 2자리 숫자로 표현
[결과]
05
04. "%1$td, %1$te"
System.out.printf("%1$td, %1$te\n", today);
"%1$td 는 일을 추출하여 2자리 숫자로 출력
"%1$te 는 일을 추출하여 1자리 숫자로 출력
[결과]
03 3
05. "%1$tA, %1$ta"
System.out.printf("%1$tA, %1$ta\n", today);
"%1$tA 는 요일을 추출하여 긴이름으로 출력
"%1$ta 는 요일을 추출하여 짧은 이름로 출력
[결과]
Tuesday Tue
06. "%1$tH, %1$tI"
System.out.printf("%1$tH %1$tI\n", today);
"%1$tH 는 시각을 추출하여 24시로 출력
"%1$tI 는 시각을 추출하여 12시로 출력
[결과]
11 11
07. "%1$tM"
System.out.printf("%1$tM\n", today);
"%1$tM 는 시각을 추출하여 분을 출력
[결과]
13
08. "%1$tS, %1$tL, %1$tN"
System.out.printf("%1$tS %1$tL %1$tN\n", today);
"%1$tS 는 시각을 추출하여 초을 출력
"%1$tL 는 시각을 추출하여 밀리초을 출력
"%1$tN 는 시각을 추출하여 나노초을 출력
[결과]
17 939 939000000
09. "%1$tS, %1$tL, %1$tN"
System.out.printf("%1$tp\n", today);
%1$tp 는 am/pm 정보를 출력
[결과]
am
10. "%1$tS, %1$tL, %1$tN"
System.out.printf("%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS\n", today);
%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS 는 년-월-일 시:분:초 출력
[결과]
2023-05-30 11:13:17
[전체 코드 및 결과]
package bitcamp.ex99;
//# 콘솔로 출력하기 III - 형식을 갖춰서 날짜 값 출력하기
//
public class Exam0130 {
public static void main(String[] args) {
// 현재 날짜 및 시각 정보를 생성한다.
// java.lang 패키지의 멤버를 사용할 때는 그냥 이름을 지정하면 된다.
// 그 외 다른 패키지의 멤버를 사용할 때는 반드시 패키지 이름을 함께 지정해야 한다.
java.util.Date today = new java.util.Date();
// %t[날짜 및 시각 옵션]
// 날짜 및 시간 옵션
// Y : 날짜 및 시각 데이터에서 년도를 추출하여 4자리로 표현한다.
// y : 날짜 및 시각 데이터에서 년도를 추출하여 뒤의 2자리로 표현한다.
System.out.printf("%1$tY, %1$ty\n", today);
// B : 날짜 및 시각 데이터에서 월을 추출하여 전체 이름으로 표현한다. ex) January
// b : 날짜 및 시각 데이터에서 월을 추출하여 단축 이름으로 표현한다. ex) Jan
System.out.printf("%1$tB, %1$tb\n", today);
// m : 날짜 및 시각 데이터에서 월을 추출하여 2자리 숫자로 표현한다. ex) 12, 01
System.out.printf("%1$tm\n", today);
// d : 날짜 및 시각 데이터에서 일을 추출하여 2자리 숫자로 표현한다. ex) 01, 22
// e : 날짜 및 시각 데이터에서 일을 추출하여 1자리 숫자로 표현한다. ex) 1, 22
System.out.printf("%1$td %1$te\n", today);
// A : 날짜 및 시각 데이터에서 요일을 추출하여 긴 이름으로 표현한다. ex) Sunday
// a : 날짜 및 시각 데이터에서 요일을 추출하여 짧은 이름으로 표현한다. ex) Sun
System.out.printf("%1$tA %1$ta\n", today);
// H : 날짜 및 시각 데이터에서 시각을 추출하여 24시로 표현한다.
// I : 날짜 및 시각 데이터에서 시각을 추출하여 12시로 표현한다.
System.out.printf("%1$tH %1$tI\n", today);
// M : 날짜 및 시각 데이터에서 시각을 추출하여 분을 표현한다.
System.out.printf("%1$tM\n", today);
// S : 날짜 및 시각 데이터에서 시각을 추출하여 초를 표현한다.
// L : 날짜 및 시각 데이터에서 시각을 추출하여 밀리초를 표현한다.
// N : 날짜 및 시각 데이터에서 시각을 추출하여 나노초를 표현한다.
System.out.printf("%1$tS %1$tL %1$tN\n", today);
// p : 오전 오후 출력하기
// 소문자 p를 사용하면 am 또는 pm으로 출력하고,
// 대문자 P를 사용하면 AM 또는 PM으로 출력한다.
// 한글은 대소문자가 없기 때문에 의미없다.
System.out.printf("%1$tp\n", today);
// 년-월-일 시:분:초를 출력하라! 예) 2019-01-04 12:04:30
System.out.printf("%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS\n", today);
}
}
https://dev-with-gpt.tistory.com/84
#중요한 정보
System.out.print("나이, 이름, 취업여부? ");
# int형 값을 받을 때.
int age = keyboardScanner.nextInt();
# String형 값을 받을 때.
String name = keyboardScanner.next();
# boolean형 값을 받을 때.
boolean working = keyboardScanner.nextBoolean();
# Scanner는 꼭 사용 후에 닫아주어야한다..
keyboardScanner.close();
# age, name, working 은 각각 정수,문자열,불리언이다. %d, %s, %b 으로 형태를 변환해서 출력함
System.out.printf("%d, %s, %b\n", age, name, working);
각각 정수형,문자형,불리언형으로 값을 입력받을 때에는 위와 같이 코드를 작성해주면된다.
Exam0210 - 키보드 입력 받기 (System.in 과 java.util.Scanner)
[코드]
package bitcamp.ex99;
//# 키보드 입력 받기 - System.in 과 java.util.Scanner
//
import java.util.Scanner;
Scanner keyScan = new Scanner(System.in);
public class Exam0210 {
public static void main(String[] args) {
// 1) 키보드로 입력한 데이터를 읽을 때 사용할 도구를 준비한다.
java.io.InputStream keyboard = System.in;
// 2) InputStream은 바이트 단위로 읽는 기능이 있다.
// 바이트 단위로 읽어서 int나 문자열로 바꾸려면 또 코딩해야 하는 불편함이 있다.
// 이런 불편함을 줄이기 위해 자바에서는 바이트를 개발자가 원하는 값으로
// 바꿔주는 기능이 들어 있는 도구를 제공한다.
// 그 도구가 java.util.Scanner 이다.
// => 키보드를 스캐너에 연결한다.
java.util.Scanner keyboardScanner = new java.util.Scanner(keyboard);
// print()는 문자열을 출력한 후 줄 바꿈을 하지 않는다.
System.out.print("팀명? ");
// nextLine()
// - Scanner 도구를 사용하여 키보드로부터 한 줄의 문자열을
// 가져올 때 사용하는 명령이다.
// - 동작은?
// 사용자가 한 줄 입력할 때까지,
// 즉 입력 데이터에 줄바꿈을 의미하는 0d0a 2바이트가 들어올 때까지 대기한다.
// 사용자가 엔터키를 누르면,
// 입력값으로 0d0a 2바이트 값이 들어오고,
// nextLine()은 그 전까지 들어온 데이터를 문자열로 만들어 리턴한다.
String str = keyboardScanner.nextLine();
// 사용자가 입력한 문자열을 출력한다.
System.out.println(str);
// 스캐너는 사용 후 키보드와의 연결을 끊고 닫는다.
keyboardScanner.close();
}
}
// System.out
// - 표준 출력 장치.
// - 즉 콘솔(모니터, 명령창)을 가리킨다.
// System.in
// - 표준 입력 장치.
// - 즉 키보드를 가리킨다.
[결과값]
Exam0220 - 키보드 입력 받기 (문자열 한 줄 읽기)
[코드]
package bitcamp.ex99;
//# 키보드 입력 받기 - 문자열 한 줄 읽기
//
public class Exam0220 {
public static void main(String[] args) {
java.io.InputStream keyboard = System.in;
java.util.Scanner keyboardScanner = new java.util.Scanner(keyboard);
// 팀 멤버의 정보를 입력 받아 출력하라.
// 이름, 전화, 이메일, 나이, 재직여부
// 예)
// 이름? 홍길동
// 홍길동
// 전화? 1111-2222
// 1111-2222
// 이메일? hong@test.com
// hong@test.com
// 나이? 20
// 20
// 재직여부? y
// y
System.out.print("이름? ");
System.out.println(keyboardScanner.nextLine());
System.out.print("전화? ");
System.out.println(keyboardScanner.nextLine());
System.out.print("이메일? ");
System.out.println(keyboardScanner.nextLine());
System.out.print("나이? ");
System.out.println(keyboardScanner.nextLine());
System.out.print("재직여부? ");
System.out.println(keyboardScanner.nextLine());
keyboardScanner.close();
}
}
[결과값]
Exam0230 - 키보드 입력 받기 (int, float, boolean 값 읽기)
[코드]
package bitcamp.ex99;
//# 키보드 입력 받기 - int, float, boolean 값 읽기
//
public class Exam0230 {
public static void main(String[] args) {
java.util.Scanner keyScan = new java.util.Scanner(System.in);
System.out.print("int: ");
int i = keyScan.nextInt();
// nextInt()는 한 개의 토큰(token)을 읽을 때가지 기다린다.
// 한 개의 token을 읽으면 4바이트 정수 값으로 바꾼 다음에 리턴한다.
// 토큰(token)?
// => 토큰이란 공백으로 구분되는 단어를 뜻한다.
// 공백(whitespace)?
// => 스페이스(space), 탭, 줄바꿈 코드를 말한다.
// 예) aaa bbb cc ==> aaa, bbb, cc
// 중간에 여러 개의 공백이 들어가더라도 한 개의 공백으로 간주한다.
System.out.print("float: ");
float f = keyScan.nextFloat();
System.out.print("boolean: ");
boolean b = keyScan.nextBoolean();
keyScan.close();
System.out.printf("%d, %f, %b\n", i, f, b);
}
}
[결과값]
Exam0240 - 키보드 입력 받기 (여러 종류의 데이터를 섞어 입력 받기)
[코드]
package bitcamp.ex99;
//# 키보드 입력 받기 - 여러 종류의 데이터를 섞어 입력 받기
//
public class Exam0240 {
public static void main(String[] args) {
java.util.Scanner keyboardScanner = new java.util.Scanner(System.in);
System.out.print("나이? ");
int age = keyboardScanner.nextInt();
// nextInt()는 한 개의 토큰을 읽은 후에 줄 바꿈 코드는 읽기 전 상태로 내비둔다.
// 따라서 다음에 nextLine()을 호출하면 의도치 않게 빈 문자열을 가진 한 줄을
// 읽는 상황이 된다.
// nextInt() 다음에 nextLine()을 호출할 때 이런 상황이 발생한다.
// 해결 방법? nextInt()를 호출한 후 남아있는 엔터 코드를 읽어서 제거하라.
keyboardScanner.nextLine(); // 남아 있는 빈 문자열의 한 줄(LF 코드)을 읽어서 버린다.
System.out.print("이름? ");
String name = keyboardScanner.nextLine();
keyboardScanner.close();
System.out.printf("%d(%s)\n", age, name);
}
}
[결과값]
Exam0250 - 키보드 입력 받기 (여러 개의 데이터를 한 번에 입력하고 쪼개서 읽기)
[코드]
package bitcamp.ex99;
//# 키보드 입력 받기 - 여러 개의 데이터를 한 번에 입력하고 쪼개서 읽기
//
public class Exam0250 {
public static void main(String[] args) {
java.util.Scanner keyboardScanner = new java.util.Scanner(System.in);
System.out.print("나이, 이름, 취업여부? ");
int age = keyboardScanner.nextInt();
// 한 개의 토큰을 읽을 때 유용하다.
String name = keyboardScanner.next();
boolean working = keyboardScanner.nextBoolean();
keyboardScanner.close();
System.out.printf("%d, %s, %b\n", age, name, working);
}
}
[결과값]
Exam0260 - 키보드 입력 받기 (토큰 단위로 문자열 읽기)
[코드]
package bitcamp.ex99;
//# 키보드 입력 받기 - 토큰 단위로 문자열 읽기
//
public class Exam0260 {
public static void main(String[] args) {
java.util.Scanner keyboardScanner = new java.util.Scanner(System.in);
// next()
// - 토큰 단위로 입력 데이터를 잘라서 읽을 때 유용하다.
System.out.print("입력: ");
String token1 = keyboardScanner.next();
String token2 = keyboardScanner.next();
String token3 = keyboardScanner.next();
keyboardScanner.close();
System.out.printf("%s, %s, %s\n", token1, token2, token3);
}
}
[결과값]
https://dev-with-gpt.tistory.com/88
오늘 수업은 Scanner를 통해 사용자에게 Data를 입력받고
해당 정보를 저장하여 출력해주는 프로그램을 만들어보았다.
프로그램에 대한 설명은 다음과 같다.
프로그램에 대한 설명
프로그램 실행 시 사용자에게 번호, 이름, 나이, 재직 여부, 성별, 시력 정보를 입력하도록 요구한다.
이때 입력된 값들은 각각 num, name, age, working, gender, leftEye, rightEye 배열에 저장된다.
입력은 for 반복문을 통해 20번 반복하여 수행되며, 배열의 인덱스를 이용하여 각 요소에 값을 할당한다.
입력이 완료되면 입력된 목록을 다시 출력한다.
for 반복문을 통해 배열의 모든 요소를 순회하며, printf() 메서드를 사용하여 형식화된 출력을 수행한다.
각 배열의 요소들을 %d, %s, %b, %c, %.1f 형식 지정자를 사용하여 출력하고,
각각의 값을 대응하는 인덱스에서 가져오게 된다.
프로그램은 목록 입력과 출력을 위해 Scanner 클래스를 사용하며,
System.out.printf() 메서드를 이용하여 형식화된 출력을 수행한다.
이를 통해 사용자는 여러 목록을 입력하고 저장할 수 있으며, 저장된 목록을 확인할 수 있다.
배열 반복횟수 설정 및 배열생성
package bitcamp.myapp;
import java.util.Scanner;
public class App {
public static void main(String[] args) {
System.out.println("나의 목록 관리 시스템");
System.out.println("----------------------");
int a = 20; // 배열 길이
//배열생성
int[] num = new int[a];
String[] name = new String[a];
int[] age = new int[a];
boolean[] working = new boolean[a];
String[] gender = new String[a];
float[] leftEye = new float[a];
float[] rightEye = new float[a];
For문 반복 배열 입력 받기
// 키보드 스캐너 준비
Scanner keyboardScanner = new Scanner(System.in);
// for문 배열 입력
for (int i = 0; i < a; i++) {
System.out.print("번호?");
num[i] = keyboardScanner.nextInt();
System.out.print("이름은?");
name[i] = keyboardScanner.next();
System.out.print("나이는?");
age[i] = keyboardScanner.nextInt();
System.out.print("재직중? (true | false)");
working[i] = keyboardScanner.nextBoolean();
System.out.print("성별은? M | W : ");
gender[i] = keyboardScanner.next();
System.out.print("시력은? (왼쪽)");
leftEye[i] = keyboardScanner.nextFloat();
System.out.print("시력은? (오른쪽)");
rightEye[i] = keyboardScanner.nextFloat();
}
입력받은 값 출력
// 입력받은 값 출력
System.out.println("------------------------------");
for (int i = 0; i < a; i++) {
System.out.printf("%d %s %d %b %s %f %f\n",
num[i], name[i], age[i], working[i], gender[i], leftEye[i],rightEye[i]);
}
}
}
#1. 전체코드
package bitcamp.myapp;
import java.util.Scanner;
public class App {
public static void main(String[] args) {
System.out.println("나의 목록 관리 시스템");
System.out.println("----------------------");
int a = 20; // 배열 길이
//배열생성
int[] num = new int[a];
String[] name = new String[a];
int[] age = new int[a];
boolean[] working = new boolean[a];
String[] gender = new String[a];
float[] leftEye = new float[a];
float[] rightEye = new float[a];
// 키보드 스캐너 준비
Scanner keyboardScanner = new Scanner(System.in);
// for문 배열 입력
for (int i = 0; i < a; i++) {
System.out.print("번호?");
num[i] = keyboardScanner.nextInt();
System.out.print("이름은?");
name[i] = keyboardScanner.next();
System.out.print("나이는?");
age[i] = keyboardScanner.nextInt();
System.out.print("재직중? (true | false)");
working[i] = keyboardScanner.nextBoolean();
System.out.print("성별은? M | W : ");
gender[i] = keyboardScanner.next();
System.out.print("시력은? (왼쪽)");
leftEye[i] = keyboardScanner.nextFloat();
System.out.print("시력은? (오른쪽)");
rightEye[i] = keyboardScanner.nextFloat();
}
// 입력받은 값 출력
System.out.println("------------------------------");
for (int i = 0; i < a; i++) {
System.out.printf("%d %s %d %b %s %f %f\n",
num[i], name[i], age[i], working[i], gender[i], leftEye[i],rightEye[i]);
}
}
}
#2. 자동으로 20개까지의 값 생성 코드
직접 20개의 값을 입력하기가 너무 힘들고 번거로운 일이기때문에
정상적으로 코드가 작동하는지 확인해보는 용도로
자동으로 for문 입력 값을 받는 코드를 작성해보았다.
package bitcamp.myapp;
import java.util.Scanner;
public class App {
public static void main(String[] args) {
System.out.println("나의 목록 관리 시스템");
System.out.println("----------------------");
//배열생성
int a = 20; // 배열 길이
int[] num = new int[a];
String[] name = new String[a];
int[] age = new int[a];
boolean[] working = new boolean[a];
String[] gender = new String[a];
float[] leftEye = new float[a];
float[] rightEye = new float[a];
// 키보드 스캐너 준비
Scanner keyboardScanner = new Scanner(System.in);
for문 귀찮으면..
for (int i = 0; i < a; i++) {
num[i] = i + 1;
name[i] = "이름" + (i + 1);
age[i] = 20 + i;
working[i] = (i % 2 == 0); // 짝수 인덱스는 true, 홀수 인덱스는 false
gender[i] = (i % 2 == 0) ? "M" : "W"; // 짝수 인덱스는 "M", 홀수 인덱스는 "W"
leftEye[i] = 1.0f + (float) i / 10;
rightEye[i] = 1.5f + (float) i / 10;
}
System.out.println("------------------------------");
for (int i = 0; i < a; i++) {
System.out.printf("%d %s %d %b %s %f %f\n",
num[i], name[i], age[i], working[i], gender[i], leftEye[i],rightEye[i]);
}
}
}
[예시코드 출력]