멀티캠퍼스/Spring
20230801 (화)
세크레투스
2023. 8. 1. 17:44
반응형
SMALL
1. 지난시간에 배운 내용 정리
- 변수 : 타입 가짐(고정)
- primitive (숫자 1개)
- 정수
- byte(1) - 이진데이터(영상, 오디오 등의 바이너리데이터...)
- short(2) - 옛날 컴퓨터에서 작성된 코드와 호환하기 위해. 요즘 거의 안쓰임.
- int(4) - 4byte = 32bit = 2의 32승 = 플러스마이너스 20억
- long(8)
- 실수
- float(4) - 지수
- double(8) - 디폴트값. (가수, 정밀도(유효숫자) 때문에)
- 문자 1개
- unicode
- boolean
- true
- false
- 정수
- reference (메모리 주소 값이 들어가는 타입, primitive 타입을 제외한 나머지 전부.)
- string (데이터에 대입되는 데이터를 봐야지 크기가 얼마나 큰지를 알 수 있기 때문. 그때 그때마다 데이터의 값이 달라져서.)
- 비유를 하자면, primitive(원자), reference(분자)
- 연산자
- 단항
- 부호연산자 : +, -
- 2진수로 변환했을 때 가장 앞자리 부분을 sign bit라고 하며, 부호(+, -)를 나타낸다.
- +는 부호 유지, -는 부호 변경을 뜻한다. (+는 거의 안쓰이고, -는 자주 쓰임.)
- 캐스팅 연산자
- 정수 / 정수 = 정수 (몫)
- 만약에 실제 값을 원한다면, 둘중 하나를 실수로 변경해줘야 함.
- (double)정수 / 정수 = 실수(실제 값)
- 작은 범위가 큰 범위로 변환될 때(ex: byte -> int)는 자동으로 변환이 됨. (정보 손실 x)
- 큰 범위가 작은 범위로 변환될 때는 정보손실이 발생한다.
- 이항
- 나머지 대부분.
- 자바스크립트와 동일하다.
- 삼항
- (조건식) ? (참인 경우의 값) : (거짓인 경우의 값)
- if ~ else문과 논리적으로 동일하다.
- 자바스크립트에서도 동일하게 쓰임.
2. 제어문
- 순차적으로 실행되는 프로그램의 흐름을 바꾸는 코드를 말함.
- 조건식과 항상 같이 쓰인다.
- 순차문, 조건문, 반복문의 3가지가 있다.
-순차문
- 위에서 아래로
- 왼쪽에서 오른쪽으로
- 우선순위를 바꾸려면 괄호를 사용하세요.
- +, <, *
- 조건문
- if문 (if~else, if~else if~else)
- switch문 (switch~case)
- 반복문
- while문
- do~while문
- 콘솔연습
- System.out은 시스템에서 정한 기본 출력(output) 장치라는 의미 : 모니터를 의미
- System.in은 시스템에서 정한 기본 입력(input)장치라는 의미 : 키보드를 의미
- System.out, System.in, System.err 을 "표준 입출력 장치" 또는 "콘솔" 이라고 부른다. : 운영체제를 기반으로 돌아가는 프로그램에서는 반드시 존재하는 개념. 프로그램이 실행될 때 이 3가지 기능을 강제로 부여받는다.
- new Scanner(System.in)은 키보드로 입력받을 수 있는 부품이 만들어졌다는 의미로, Scanner 라는 부품은 입력받을 수 있는 대상을 반드시 (괄호) 안에 넣어줘야 사용할 수 있는 부품임.
- new Sanner()는 API 안에 들어있다.
- in.read() : 키보드 배정된 키코드
- cpu(속도 up) -> 직접x -> I/O (속도 down)
- 키보드 모니터 HDD
- 버퍼 (메모리)
- I/O 속도문제 때문에 가급적이면 적게 받는 것이 좋다.
- next()의 의미 : buffer에 있는 다음 데이터를 달라는 의미.
- buffer란? : 완충제, 완충기의 의미
- 무슨 충격을 완화하나? : 속도에 대한 충격
- next(); 공백구분
- nextLine(); 개행을 포함한 공백 -> 실질적으로 가장 많이 쓰임.
- printf() : f는 format의 약자로, 포맷팅 출력을 의미한다.
- printf에서 %는 치환을 의미하는 치환문자이다. 2개 이상의 포맷팅이 필요할 때 주로 사용한다.
- d : 정수 (%d)
- f : 실수 (%f)
- %.3f : 소숫점 3번째자리까지 출력하겠다는 의미.
- s : 문자열 (%s)
- 자바스크립트의 `${}`와 동일한 것이다.
- 포맷팅의 의미는 자릿수를 내가 정해줄 수 있다는 의미가 있다.
- printf에서 %는 치환을 의미하는 치환문자이다. 2개 이상의 포맷팅이 필요할 때 주로 사용한다.
- if, if~else
- switch ~ case
- 맨 마지막 default의 break는 의미가 없다. (있어도 되고, 없어도 되고)
- 하지만 default가 중앙에 오는 경우도 있는데, 그때는 의미가 있다.
- break가 없으면 중간에 멈추지 않고 계속 실행됨. (break문을 만나야 switch문을 벗어날 수 있다.)
- break없이 case가 중복되면 '또는'의 의미가 되며, 갯수제한 없이 사용할 수 있다.
switch (name) {
case "자바":
case "파이썬":
System.out.println("1104호로 가세요.");
break;
// 자바 또는 파이썬 수이면 1104호로 가세요.
case "OS":
case "리눅스":
System.out.println("1102호로 가세요.");
break;
// OS 또는 리눅스 수업이면 1102호로 가세요.
default:
System.out.println("카운터에 가서 문의하세요.");
break;
}
- switch ~ case
- 한줄로도 작성이 가능하다.
switch(name) {
case "자바" : System.out.println("1103호로 가세요."); break;
case "파이썬" : System.out.println("1104호로 가세요."); break;
case "리눅스" : System.out.println("1102호로 가세요."); break;
default : System.out.println("카운터에 가서 문의하세요."); break;
}
- Date
- new Date() : 호출 당시의 날짜, 시간 세팅
- Date date = new Date();
- int hour = date.
getHours();=> deprecated (비권장) - int min = date.
getMinutes();=> deprecated(비권장) - int set = date.
getSeconds();=> deprecated(비권장) - int year = date.
getYear();=> deprecated(비권장) //year은 1900년대 초에 만들어져서 약간의 버그가 있음. -> 밀레니엄 버그 - int month = date.
getMonth()+ 1; => deprecated(비권장) //월은 0부터 시작, 0 --> 1월 - int today = date.
getDate();=> deprecated(비권장) - System.out.println(year + 1900 + "년 " + month + "월 " + today + "일");
- %4d의 의미 : 4자리수로 표현하라.
- %02d 의 의미 : 2자리수로 표현하되, 앞에 공백이 있을 경우 0으로 채워넣어라.
// 2023-08-01 11:20:30
System.out.printf("%4d-%02d-%02d %02d:%02d:%02d\n", year + 1900, month, today, hour, min, sec);
- switch ~ case 문은 오로지 같은지(==) 로만 확인이 가능하다.
- 스캐너
- Scanner sc = new Scanner(System.in);
- String sample = sc.next();
- int ex = sc.nextInt();
- 반복문
- for문
- 반복 횟수를 알고 있을 때 주로 사용
- for(초기화식; 조건식; 증감식){
- }
- 변수 선언 가능
- for문 블록의 지역변수
- for문 밖에서는 사용 불가
- for(int i = 0, j = 100; i<=50 && j>=50; i++, j--) {...} => 지역변수는 for문이 끝나면 사라진다.
- 반복문의 중첩 가능
- 구구단 출력하기
- for(int m = 2; m <=9; m++) {
- System.out.println("*** " + m + "단 ***");
- for (int n = 1; n <= 9; n++) {
- System.out.println(m + " x " + n + " = " + (m * n));
- }
- }
- for(int m = 2; m <=9; m++) {
- 이중for문 : 바깥쪽 라인, 안쪽 칼럼(가로)
- while문 : 조건에 따라 반복을 계속할지 결정할 때 사용
- 사용자의 의도에 따라서 loop를 돌지 말지를 결정할 때 더 사용하기 편함.
- 키보드로부터 값 읽기
- int keyCode = System.in.read();
- 엔터 (줄바꿈)
- windows : CR(13) - \n\r -> 윈도우는 동시에 발생
- mac/linux : LF(10) - \n, \r -> 맥이나 리눅스는 둘 중 하나만 발생
- keyinput을 하면 OS 에서 buffer가 됨. -> 버퍼링이 일어남.
- VSCode로 자바 문서를 열면 윈도우는 CRLF, 맥/리눅스는 CR 또는 LF가 우측 하단에 뜸
- throws Exception : 예외처리(I/O)
- 코드가 올바르게 작성되어 있어도 에러가 발생할 수 있는 상황이 있다. (예를 들어서 키보드가 빠져서 에러 -> 그럼 환경상의 문제지 코드의 문제가 아님.)
- 그래서 자바에서는 모든 상황에서 예외 처리를 하는 것이 의무화 되어있어서 예외처리가 필수적이다.
- 예외처리는 또 하나의 주제이다. 별도로 예외처리를 다루는 챕터가 따로있다.
- do~while문
- 조건 따라 반복을 계속할지 결정할때 사용하는 것은 while문과 동일하다.
- 무조건 중괄호 {} 블록을 한 번 실행한 후, 조건 검사해 반복 결정
- equals() : 내용이 같은지 비교
- equalsIgnoreCase() : 대소문자에 상관없이 내용이 같은지 비교
- break문
- for문, while문, do-while문 종료 (반복 취소)
- switch문 종료
- 대개 if문과 같이 사용
- if문 조건식에 따라 for문과 while문 종료할 때 사용
- 반복문이 중첩된 경우
- 반복문이 중첩되어 있을 경우 break; 문은 가장 가까운 반복문만 종료
- 바깥쪽 반복문까지 종료시키려면 반복문에 이름(라벨)을 붙이고, "break 라벨이름"; 사용
- break로 while문 종료
- int num = (int) (Math.random() * 6 ) + 1;
- 여기서 1은 시작정수, (Math.random() * 6) 은 끝정수이다.
- Math.random()은 0~1 사이의 실수를 랜덤하는 함수이다.
- int num = (int) (Math.random() * 6 ) + 1;
- continue문
- for, while, do~while 문에서 사용
- for문 : 증감식으로 이동
- while문, do~while문 : 조건식으로 이동
- for, while, do~while 문에서 사용
- 단위
- bit
- byte (1byte = 8bit)
- 1,000 byte = 1KB 1천
- 1,000,000 byte = 1MB 1백만
- 1,000,000,000 byte = 1GB 1십억
- 1,000,000,000,000 byte = 1TB 1조
- 시간단위
- 1초
- 0.001초 - ms
- 0.000001초 - µs : HDD
- 0.000000001초 - ns(나노세컨드) : 메모리 속도 단위
- 0.000000000001초 - ps(피코세컨드)
- cpu는 ns~ps 사이에서 왔다갔다 한다.
- int = 4byte = ±20억
- 배열(array)의 개념
- 동일 데이터 타입의 데이터를 연속해서 저장하여 관리하는 것.
- 기본형변수 : 기본형데이터 (정수, 실수, 문자, 논리) => 변수의 해당타입의 "값"이 저장
- int age = 100;
- double height = 187.7;
- 참조형변수 : 기본형데이터X (배열, 클래스, ...) => 값들이 들어가있는 위치를 나타내는 "주소"가 저장
- int[] s = {1, 2, 3};
- => 이 주소를 참조해서 값들에 접근, 이 표기법이 권장됨.
- int s[] = {1, 2, 3};
- => 이것도 가능함. 하지만 권장하지 않음.
- int[] answer = {1, 1, 2, 3}; <= 초기화에 한해서 new를 생략할 수 있다. //배열의 길이와 초기값 지정
- int[] myAnswer = {1, 2, 4, 3}; //배열의 길이와 초기값 지정
- int[] space = new int[1000]; <= 안에 어떤 데이터가 있는지 모를때..! 공간을 만들때는 반드시 new를 써야함. // 배열의 길이만 지정됨.
- int age; => 뭐가 들어가는지 알 수 없음.
- new : 0으로 공간 초기화. -> 참조형 데이터의 특징 중 하나. [0, 0, 0, 0, ...] //여기서 0은 null을 의미함. 실제 아스키코드 값에서도 0이 null을 의미함.
- [D@626b2d4a : [ -> 배열, D -> 엘리먼트 타입, @ -> ~at, 626b2d4a-> 주소값
- 16진수 1개 = 4bit
- 16진수 2개 = 8bit
- String[] space2 = new String[333]; // 참조값 = 데이터의 시작주소
- 인덱스 번호의 의미 : 시작주소로부터의 거리정보
- offset : 기준 위치로부터 얼마나 떨어져있는지를 숫자화해서 나타냄.
- 파이썬의 경우 인덱스로 음수도 쓰지만, 자바는 음수를 지원하지 않는다.
- double[] height = {123.4, 234.2, 124.5};
- height의 주소 : 인덱스 번호 * 아이템 1개의 크기
- new는 heap이라는 영역에 할당 : heap의 의미 - 더미
반응형
LIST