。゚(*´□`)゚。

코딩의 즐거움과 도전, 그리고 일상의 소소한 순간들이 어우러진 블로그

[네이버클라우드] 클라우드 기반의 개발자 과정 7기/웹프로그래밍

[NC7기-25일차(5월30일)] - 웹프로그래밍 6일차

quarrrter 2023. 5. 30. 21:22

printf, println

키보드 입력받기 

gradle compileJava

배열 선언 

주소변수 

반복문 

HDD의 구조, RAM의 구조 추가하기

 


 

 

printf, println 리터럴 출력값 

println() = 출력 + 줄바꿈

값을 주지 않으면 줄바꿈만 수행한다.  //System.out.println();

print() 는 출력만 한다. 줄바꿈 없다.

이스케이프 문자를 통해 줄바꿈을 수행한다.  //System.out.print('\n');

특정형식 문자 

    // %s : 지정한 자리에 문자열을 삽입한다.
    //      삽입할 값은 오른쪽에 설정한다.
    System.out.printf("이름: %s\n", "홍길동");
    System.out.printf("안녕하세요! %s입니다.\n", "임꺽정");

    // %d : 정수 값을 10진수 문자열로 만들어 삽입한다.
    // %x : 정수 값을 16진수 문자열로 만들어 삽입한다.
    // %c : 정수 값을 문자로 만들어 삽입한다.
    // %b : true/false 값을 문자열로 만들어 삽입한다.
    System.out.printf("%d %x %c %b\n", 65, 65, 65, false);
    
    // 한 개의 값을 여러 곳에 삽입할 수 있다.
    // %[n$]s : n은 문자열에 삽입될 값의 순서이다. 순서는 1부터 증가한다.
    System.out.printf("%d %1$x %1$c\n", 65);
    System.out.printf("%3$d %1$x %2$c\n", 65, 66, 67); // 3$(67), 1$(65), 2$(66)

형식을 갖춰서 날짜 값 출력하기

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);
    
    2023, 23
    
    // A : 날짜 및 시각 데이터에서 요일을 추출하여 긴 이름으로 표현한다. ex) Sunday
    // a : 날짜 및 시각 데이터에서 요일을 추출하여 짧은 이름으로 표현한다. ex) Sun
    System.out.printf("%1$tA %1$ta\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);
    
    2023-05-30 16:57:11

 

 

 키보드 입력 받기 - 문자열 한 줄 읽기

public class Exam0220 {
  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);
    
    // nextLine()
    // - Scanner 도구를 사용하여 키보드로부터 한 줄의 문자열을 
    //   가져올 때 사용하는 명령이다.
    // - 동작은? 
    //   사용자가 한 줄 입력할 때까지,
    //   즉 입력 데이터에 줄바꿈을 의미하는 0d0a 2바이트가 들어올 때까지 대기한다.
    //   사용자가 엔터키를 누르면, 
    //   입력값으로 0d0a 2바이트 값이 들어오고,
    //   nextLine()은 그 전까지 들어온 데이터를 문자열로 만들어 리턴한다.
    String str = keyboardScanner.nextLine();
    // 1) 키보드로 입력한 데이터를 읽을 때 사용할 도구를 준비한다.
    java.io.InputStream keyboard = System.in;

키보드 정보를 담을 그릇  = 키보드 정보 

    java.util.Scanner keyboardScanner = new java.util.Scanner(keyboard);

실무에서는 위처럼 키보드에 담고 또 담는게 아니라 바로 system in 넣음

위 예제는 흐름 보기 위한 것 

scanner: 우리가 원하는 데이터형태로 내는 역할. nextline 이라는 기능이있음(줄단위로 잘라서 리턴하는 기능)

키보드에서 한줄 단위로 입력 받을 수 있군아..! 

 

    // 사용자가 입력한 문자열을 출력한다.
    System.out.println(str);

    // 스캐너는 사용 후 키보드와의 연결을 끊고 닫는다.
    keyboardScanner.close();

 

다음 스캐너를 쓰기 위해서 꼭 닫아줘야함.(닫아야하는 것들이 몇개 있음, 공공자들. 컴터끄면 같이 꺼지긴 함)

 

 

여러 개의 데이터를 한 번에 입력하고 쪼개서 읽기 

    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);
    
    //%d = 정수
	%s = string 문자열
	%b = 불리언 값

 

 

 

App 실습 파일

gradle compileJava 실행하면 gradle 폴더 속 모든 java 파일이 컴파일 됨. 

package bitcamp.myapp;

// 코드 본문에서 사용할 클래스가 어떤 패키지의 클래스인지 지정한다.
import java.util.Scanner;

public class App {
  public static void main(String[] args) {
    System.out.println("나의 목록 관리 시스템");
    System.out.println("-----------------------------");

    // 키보드 스캐너 준비
    Scanner scanner = new Scanner(System.in);

  	// 배열 선언 (크기 3)
    no라는 이름의 int 타입 배열을 선언하고 있으며, 배열의 크기를 3으로 지정
    
    int[] no = new int[3];
    String[] name = new String[3];
    int[] age = new int[3];
    boolean[] working = new boolean[3];
    char[] gender = new char[3];
    float[] leftEye = new float[3];
    float[] rightEye = new float[3];

	//for문 
    for (int count = 0; count < 3; count++) {

      System.out.print("번호? ");
      no[count] = scanner.nextInt();

      System.out.print("이름? ");
      name[count] = scanner.next();

      System.out.print("나이? ");
      age[count] = scanner.nextInt();

      System.out.print("재직중(True/False)? ");
      working[count] = scanner.nextBoolean();

      System.out.print("성별(남자:M, 여자:W)? ");
      String str = scanner.next();
      gender[count] = str.charAt(0);

      System.out.print("시력(왼쪽, 오른쪽)? ");
      leftEye[count] = scanner.nextFloat();
      rightEye[count] = scanner.nextFloat();

    }

    System.out.println("============================");

    for (int count = 0; count < 3; count++) {
      System.out.printf("번호: %d\n", no[count]);
      System.out.printf("이름: %s\n", name[count]);
      System.out.printf("나이: %d\n", age[count]);
      System.out.printf("재직여부: %b\n", working[count]);
      System.out.printf("성별(남자(M),여자(W)): %c\n", gender[count]);
      System.out.printf("좌우시력: %.1f,/%.1f\n", leftEye[count], rightEye[count]);
    }
    scanner.close();

  }
}

char c = 'A';   //변수에 저장되는 것은 문자 'A'의 UCS-2 코드 값이다. (UCS = 유니코드 2바이트)

 

숫자를 문자로 형변환 Type conversion? type casting (char)(v+i)

 

public class Exam0431 {
  public static void main(String[] args) {
    
    // 자바는 'UCS(Universal Character Set; ISO 10646)'라는 국제 표준 문자 인코딩 규격에 따라 문자를 다룬다.
    // UCS-2 라고도 부르며, 각 글자를 0 ~ 65535 까지의 16비트 코드 값으로 저장한다.
    
    // 자바는 UCS-2 코드 값을 저장하기 위해 2바이트 크기의 메모리를 사용한다.
    // 다음은 2바이트 크기의 UCS-2 코드 값을 저장할 변수를 선언한다.
    char c;

    c = 0;
    c = 65535;

    // char(2byte) 크기의 메모리 범위를 초과하면 문법 오류이다. 
    //c = -1; // 컴파일 오류 발생!
    //c = 65536; // 컴파일 발생!

  }
}
    char c1, c2, c3;
    
    // 문자 'A'를 변수에 저장하는 방법?
    //- 문자 'A'의 UCS-2 코드 값을 저장하면 된다.
    //
    
    c1 = 65;            // 문자 'A'의 코드 값을 10진수로 표현한 것.
    c2 = 0x41;          // 문자 'A'의 코드 값을 16진수로 표현한 것.
    c3 = 0b0100_0001;   // 문자 'A'의 코드 값을 2진수로 표현한 것.

    char c = 'A';  // c 변수에 저장되는 것은 문자 'A'의 UCS-2 코드 값이다.
    System.out.println(c);

출력값:
A
    //문자의 UCS-2 코드 값을 확인하기
    //  println()은 int 변수의 값은 10진수로 출력한다.
    int i = 'A';
    System.out.println(i);

출력값: 
65

배열(array)

int [ ] no = New int [3]

no[0] = 38;
no[1] = 278;
no[2] = 331;

//
no = 메모리 주소를 저장할 변수 = 레퍼런스
데이터 타입 int 인 3개의 메모리의 배열 설정 
인덱스 0번 부터 2번까지 값 지정

자바는 음수 인덱스 허용 안함. 인덱스는 유효범위를 벗어날 수 없다.

 

 

배열 선언

public class Exam0530 {
  public static void main(String[] args) {

    int[] arr1 = new int[5];
    
    arr1 = new int[5];
    ...
    
    배열(변수)선언 후 값을 할당해야함
    
    // 배열 선언문 분석:
    // arr1
    //   - 배열 메모리의 주소를 담는 변수이다.
    //   - 이렇게 메모리의 주소를 보관하는 변수를 '레퍼런스'라 부른다.
    //
    // new int[5]
    //   - new 명령은 사용할 메모리를 확보하는 명령이다.
    //   - 즉 연속된 5 개의 int 타입 메모리를 준비하라는 명령이다.
    //   - 사용할 메모리를 확보한 후 그 메모리의 찾아 갈 수 있도록 시작 주소를 리턴한다.
    //   - 이렇게 값을 저장하기 위해 확보된 메모리를 "인스턴스"라 부른다.
    //
    // new 명령은 메모리를 확보하는 명령이다.
    // - 리턴 값은 확보된 메모리의 시작 주소이다.
    
    // 배열 레퍼런스만 따로 선언할 수 있다.
    int[] arr1;
	// 배열 인스턴스를 생성하고 그 주소를 레퍼런스에 저장한다.(메모리 할당 후 사용가능)
    arr1 = new int[5];

배열 기본값 

    // - 정수 배열(byte[], short[], int[], long[]) : 0
    // - 부동소수점 배열(float[], double[]) : 0.0
    // - 논리 배열(boolean[]) : false
    // - 문자 배열(char[]) : '\u0000'
    // - 주소 변수(Object[]) : null

CPU(중앙처리장치) - 계산수행

RAM - 데이터 임시보관

HDD - 데이터 (반)영구보관

SSD - 데이터 안 날라가게 벽을 여러개 둬서 가둠

 

ACTOR

APP 처리 요청하는 대상 // 사람일 수도, process(S/W), 센서(H/W) 일수도 있음. 

 


HDD의 구조, RAM의 구조 추가하기


값 변수와 주소변수(reference)

*Primative data ( 총 8개)

int a;
a=100;

a라는 이름의 4byte 메모리 안에 100이라는 값 넣음

 

*Reference data

Data today = new Data( );
날짜 및 시간 데이터가 들어있는 Date 주소를 today라는 이름의 메모리에 전달(저장)
값이 저장된 주소를 저장하는 것

반복문 (**조건이 참인 경우 반복 실행)

while(조건) { 반복코드 }
do { 반복코드 } while(조건)
for (초기변수; 조건; 증감) { 반복코드 }