멀티캠퍼스/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)
    • 자바스크립트의 `${}`와 동일한 것이다.
    • 포맷팅의 의미는 자릿수를 내가 정해줄 수 있다는 의미가 있다.
  • 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문 : 바깥쪽 라인, 안쪽 칼럼(가로)
  • 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 사이의 실수를 랜덤하는 함수이다.
  • continue문
    • 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