24.04.23 화 TIL(Today I Learned)

신민금·2024년 4월 23일
0
post-thumbnail

TIL(Today I Learned)

: 매일 저녁, 하루를 마무리하며 작성 !
: ⭕ 지식 위주, 학습한 것을 노트 정리한다고 생각하고 작성하면서 머리 속 흩어져있는 지식들을 정리 !

Java 문법 종합반

1주차 : JVM, 변수 이어서-------------------------------------------

- 저장공간의 종류 (변수 타입)

  1. 변수의 종류와 범위
  • 기본형 변수
    - 논리형 변수 : boolean
    - 문자형 변수 : char
    - 정수형 변수 : byte, short, int, long
byte byteNumber = 127; // byte 는 -128 ~ 127 범위의 숫자만 저장 가능합니다.

short shortNumber = 32767; // short 는 -32,768~32,767 범위의 숫자만 저장 가능합니다.

int intNumber = 2147483647; // int 는 -21억~21억 범위의 숫자만 저장 가능합니다.

long longNumber = 2147483647L; // long 은 숫자뒤에 알파벳 L 을 붙여서 표기하며 매우 큰수를 저장 가능합니다.


- 실수형 변수 : float, double

long longNumber = 3.14f; // long < float 자동 형변환 불가

float floatNumber = 0.123f; // float 는 4byte 로 3.4 * 10^38 범위를 표현하는 실수값
double doubleNumber = 0.123123123; // double 은 8byte 로 1.7 * 10^308 범위를 표현하는 실수값

  • 참조형 변수
    - 문자열 변수 : String

    - 그 외 : Object, Array, List …

  • 래퍼 클래스 변수
  1. 숫자와 문자
  • 저장 공간에 저장하는 값은 0,1을 통한 숫자 값을 저장, 그럼 문자는 어떻게 숫자로 저장할까?
    • 숫자(int)를 문자(char)로 매핑해서(짝을 지어서) 표현
    • Java에서는 기본적으로 아스키코드라는 규칙으로 문자를 저장(표현)
  1. 문자와 문자열
  • 선언 관점에서 차이점

    • 문자 (char) : 문자 한 개만 저장하며 따옴표를 사용하여 값을 지정 (ex. ’A’)

    • 문자열 (String) : 문자 여러 개를 문장 형태로 저장하며 쌍따옴표를 사용하여 범위를 지정 (ex. “ABCDEFG”)

  • 저장 관점에서 차이점

    • 문자 (char): 문자 뒤에 \0(널문자)가 없습니다. (1 byte만 쓰기 때문에 끝을 알아서 데이터만 저장)
    • 문자열 (String)문장의 끝에 \0(널문자)가 함께 저장 (몇 개의 byte를 쓸지 모르기 때문에 끝을 표시)
  1. 참조형
  • 참조형 변수 = 주소형 변수?
    • 다른 기본형 변수가 실제 값을 저장하는 저장 공간이라면 참조형 변수는 실제 값이 아닌 원본 값의 주솟값을 저장
    • 참조형 변수는 주솟값을 저장하는 주소형 변수라고 불러도 된다.
  • 저장 관점에서 차이점
    • 기본형 변수 : 원본 값이 Stack 영역에
    • 참조형 변수 : 원본 값이 Heap 영역에
      • Stack 영역에는 따로 저장 해둔 원본 값의 Heap 영역 주소를 저장

Stack 영역 vs Heap 영역

  • Stack의 경우에는 정적으로 할당된 메모리 영역
    • 크기가 몇 byte 인지 정해져 있는 기본형 변수를 저장
    • 추가로, 크기가 정해져 있는 참조형 변수의 주솟값도 저장
  • Heap의 경우에는 동적으로 할당된 메모리 영역
    • 크기가 계속 늘어날 수 있는 참조형 변수의 원본을 저장
  1. 입력&출력
  • 입력 : Java 프로그램에서는 기본적으로 System.in 객체의 next() 명령을 사용해서 입력
Scanner sc = new Scanner(System.in); // Scanner 객체를 new 명령어로 생성합니다.
String input = sc.next();  // sc(Scanner)의 .next(); 를 실행하면 input 변수에 입력한 글자를 받을 수 있습니다.
  • 출력: Java 프로그램에서는 기본적으로 System.out 객체의 println() 명령을 사용해서 출력
Scanner sc = new Scanner(System.in);
String input = sc.next();  

System.out.println("입력값 : " + input);  // 입력한 글자를 출력합니다.

// 실행 결과
{입력}
입력값 : {입력}
  1. 비트&바이트
    Byte(바이트)는 8개의 Bit(비트)로 구성되어 있습니다.
  • Bit

    • Bit(비트)는 0,1 형태의 2진수 데이터로써 컴퓨터가 저장(표현) 할 수 있는 최소 단위
    • 정수형 값은 10진수 숫자(0~10범위의 숫자)이며 2진수(0~1범위) Bit로 저장(표현)
    • 4개의 Bit로 16진수 숫자(0~F(16) 범위의 숫자)를 2진수(0~1범위) Bit로 저장(표현)
    • 2진수(0~1)를 10진수, 16진수로 변환된 값 예시 표
  • Byte = 8 Bit

    • Byte(바이트)는 8개의 Bit(비트)로 구성
    • 1 Byte 내에서 숫자 변수는 Bit 2진수를 10진수로 저장(표현)
      • 10진수로는 0~255(2의8승)까지 저장(표현)
    • 1 Byte 내에서 문자 변수의 경우만 Bit 2진수를 16진수로 저장(표현)

- 변수 타입 바꾸기(형변환)

  1. 형변환에 대한 이해
  • Java 프로그래밍을 하다 보면 문자열로 입력받은 변수를 숫자로 변환해서 계산을 하고 싶은 경우, 문자열에 숫자 값을 추가하고 싶은 경우 등… 어떤 변수형을 다른 형으로 변환이 필요한 경우가 많다.
  • 형변환은 주로 기본형 변수인 정수 ↔ 실수 ↔ 문자 들 사이에서 일어나며 방법은 아래와 같다.
  1. 정수형, 실수형 간 발생하는 형변환
    정수 ↔ 실수 간에 변환할 때는 ({원하는 타입}) 명령을 통해 변환 (캐스팅)
  • Double, Float to Int : (Int) 캐스팅 방식으로 실수를 정수로 치환하는 방법. 이때 실수형의 소수점 아래 자리는 버려진다.
double doubleNumber = 10.101010;
float floatNumber = 10.1010

int intNumber;
intNumber = (int)doubleNumber; // double -> int 형변환
intNumber = (int)floatNumber; // float -> int 형변환
  • Int to Double, Float : (Double, Float) 캐스팅으로 정수형을 실수형으로 변환하는 방법
int intNumber = 10;

double doubleNumber = (double)intNumber; // int -> double 형변환
float floatNumber = (float)intNumber;  // int -> float 형변환
  1. 자동 형변환
    Java 프로그래밍에서 형변환을 직접적으로 캐스팅하지 않아도 자동으로 형변환 되는 케이스가 있다.
    프로그램 실행 도중에 값을 저장하거나 계산할 때 자동으로 타입 변환

1) 자동 타입 변환은 작은 크기의 타입에서 큰 크기의 타입으로 저장될 때 큰 크기로 형변환이 발생

byte byteNumber = 10;
int intNumber = byteNumber;    // byte -> int 형변환
System.out.println(intNumber); // 10

char charAlphabet = 'A';
intNumber = charAlphabet;   // char -> int 형변환
System.out.println(intNumber); // A의 유니코드 : 65

intNumber = 100;
long longNumber = intNumber; // int -> number 형변환
System.out.println(longNumber); // 100

intNumber = 200;
double doubleNumber = intNumber; // int -> double 형변환
System.out.println(doubleNumber); // 200.0  (소수점이 추가된 실수출력)

2) 작은 크기의 타입이 큰 크기의 타입과 계산될 때 자동으로 큰 크기의 타입으로 형변환이 발생

int intNumber = 10;
double doubleNumber = 5.5;
double result = intNumber + doubleNumber; // result 에 15.5 저장됨 (int -> double)

intNumber = 10;
int iResult = intNumber / 4; // iResult 에 2 저장됨 (int형 연산 -> 소수점 버려짐)

intNumber = 10;
double dResult = intNumber / 4.0; // dResult 에 2.5 저장됨 (double형 연산 -> 소수점 저장)

profile
야옹

0개의 댓글