K-Digital Training/내일배움캠프

자바 1주차

hoonssss 2023. 10. 20. 08:38
반응형
SMALL

code -> compiler -> class -> JVM

인터프리터 Java.class 코드 해석기

  • 운영체제가 읽은 바이트 코드를 기기가 실행할 수 있는 기계어로 번역

JIT 컴파일러

  • 인터프리터의 효율을 높여주는 서포트 해석기

메모리 영역

  • Java데이터를 저장하는 영역
  • 운영체제로 부터 JVM이 할당받은 메모리 영역

클래스 로더

  • Java.class 바이트 코드를 메모리 영역에 담는 운반기
  • JVM으로 class를 불러와서 메모리에 저장

가비지 컬렉터

  • Java 쓰레기 청소기
  • 메모리 영역에서 안쓰는 데이터를 주기적으로 흡수해가는 청소기

JDK(Java Development Kit) 자바 개발 키트는 JRE(JVM), Compiler, 디버깅 등 기능이 포함

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

}

input -> String[] args

out -> void

void -> 메소드의 출력값 데이터 타입

변하는 것 변수, 변하지 않는 것 상수

final int number = 10;

number = 11;

finla로 상수 지정을 했기 때문에 위 코드는 오류

-기본형 변수

논리형 변수

boolean = true, false 참,거짓

문자형 변수

char = 'A','1' 문자열 하나만 저장, 2byte( ascii 포맷의 문자는 1byte이고, 유니코드일 때는 2byte입니다.)

정수형 변수

1byte = 8bit(bit=0,1 표현, 즉 1byte = 2*2*2*2*2*2*2*2(256)을 표현)

byte = -128~127, 1byte

shot = -32768 ~ 32767, 2byte

int = -21억 ~ 21억, 4byte

long = 123L, 매우 큰 수, 8byte

실수형 변수

float = 3.4 * -10^38 ~ 3.4 * 10^38(long보다 큼), 4byte

long longNumber = 3.14f (float자동 형변환 X)

double = 1.7 * 10^308, 8byte

-참조형 변수

문자열 변수

String message = "HI~Message";

그 외

List<int> alphabet = [0,1,2,3];

배열

int[] a = {1,2,3,4,5};

Arrays.toString(a) -> {1,2,3,4,5} 그대로 출력

래퍼 클래스 변수(Wrapper Class)

기본형 변수를 클래스로 한번 감싸는 변수

ex) 박싱

int number = 21;

Integer num = number //new Integer(number);

ex) 언박싱

int n = num.intValue();

문자(char) -> 기본형

문자 뒤에 \0(널문자)가 없음 (2byte만 쓰기 때문에 끝을 알아서 데이터만 저정하면 됌)

ascii 포맷의 문자는 1byte이고, 유니코드일 때는 2byte입니다.

문자열(String) -> 참조형

문자 뒤에 \0(널문자)가 있음 (몇개의 byte를 사용할지 모르기 때문)

메모리 영역

Stack 영역 - 기본형 변수(원본 값), 참조형 변수(주소값), 정적으로 할당된 메모리 영역

Heap 영억 - 참조형 변수(원본 값), 동적으로 할당된 메모리 영역

Bit

0,1 형태의 2진수 데이터로서 컴퓨터가 저장(표현)할 수 있는 최소 단위.

정수형 값은 10진수 숫자(0~10)이며 2진수(0~1)Bit로 저장(표현)함.

4개의 Bit로 16진수(0~F(16))를 2진수(0~1)Bit로 저장(표현)함.

Byte(=8bit)

Byte(바이트)는 8개의 Bit(비트)로 구성

1 Byte 내에서 숫자 변수는 Bit 2진수를 10진수로 저장(표현)

10진수로는 0~255(2의8승)까지 저장(표현)

1 Byte 내에서 문자 변수의 경우만 Bit 2진수를 16진수로 저장(표현)

형변환

(int->char)

        int num = sc.nextInt();
        char ch = (char)num;
        System.out.println(ch);

(char->int)

        char chN = sc.nextLine().charAt(0);
        int a = (int)chN;
        System.out.println(a);

자동형변환

변수 타입별 크기 순서

byte(1) → short(2) → int(4) → long(8) → float(4) → double(8)

float가 4byte이지만 부동소수점을 쓰기 때문에 long보다 표현 수가 많음.

자동 형변환 vs 강제 형변환

  • 자동 형변환
  • 더 큰 표현범위를 가진 타입으로 변환되는것이라 값의 손실이 없습니다.
  • 값의 손실없이 변환이 가능하기 때문에 컴파일러가 자동으로 형변환을 해줍니다.
  • 강제 형변환 = 캐스팅
  • 더 작은 표현범위를 가진 타입으로 변환된는것이라 값의 손실이 생깁니다.
  • 값의 손실이 생기기 때문에 자동으로 형변환을 해주지 않고 개발자가 선택하여 형변환을 합니다.
        byte byteNumber = 10;
        int intNumber = byteNumber;
        System.out.println(intNumber);

        char ch = 'A';
        intNumber = ch;
        System.out.println(intNumber);

        intNumber = 100;
        long longNumber = intNumber;
        System.out.println(longNumber);

        intNumber = 200;
        double doubleNumber = intNumber;
        System.out.println(doubleNumber);

byte < int, char < int, int<long, int<double 작은 타입에서 큰 타입으로 바꿀시 자동형변환

        int intNumber = 10;
        double doubleNumber = 5.5;
        System.out.println(intNumber+doubleNumber);
        System.out.println(intNumber/4);
        System.out.println((double)intNumber/4);

int/4 = 2

(double)int/4 = 2.5

과제

요리 레시피 작성하기

형변환 아직 어색함

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.println("요리 제목을 입력하세요.");
        String a = sc.next();
        System.out.println("["+ a + "]");

        System.out.println("별점을 입력하세요.");
        float floatNumber = sc.nextFloat();
        int intNumber = (int)floatNumber;
        double doubleNumber = (double)intNumber;
        System.out.println("별점 : " + intNumber + "(" + doubleNumber/5 * 100 + "%)");

        int inputNumber = 10;
        String[] input = new String[inputNumber];

        for (int i = 0; i < inputNumber; i++) {
            input[i] = sc.next();
        }

        for (String output: input) {
            System.out.println(output);
        }
    }
}
 
반응형
LIST

'K-Digital Training > 내일배움캠프' 카테고리의 다른 글

자바 5주차  (1) 2023.11.01
자바 4주차  (1) 2023.11.01
자바 3주차  (0) 2023.10.20
자바 2주차  (0) 2023.10.20
내일배움캠프 시작 그리고 과제  (0) 2023.10.05