ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] #1 변수(Variable)와 메모리(Memory)
    Software engineer/Java 2023. 4. 27. 23:44

    변수

     

    변수는 값을 저장하는 공간이다.

     

    변수란?

    "Hello World!"라는 문자를 사용하는 프로그램이 있다고 가정했을 때, 사용하는 부분마다 "Hello World!", "Hello World!", "Hello World!", "Hello World!",.... 계속해서 이렇게 쓸 수도 있겠지만.

    String str = "Hello World!";

    위와 같이 str이라는 변수에 저장해서 필요한 곳에서 str을 호출해서 사용할 수 있다. 

     

     

    변수의 타입

    변수는 그 공간에 저장되는 데이터의 형태에 따라 기본형(Primitive)과 참조형(Reference)으로 구분됩니다.

    구분 타입 크기 기본값 범위
    정수 byte 1 byte 0 -128 ~ 127
    short 2 bytes 0 -32,768 ~ 32,767
    int 4 bytes 0 -2,147,483,648 ~ 2,147,483,647
    long 8 bytes 0L -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
    실수 float 4 bytes 0.0F 1.4E-45 ~ 3.4E38
    double 8 bytes 0.0 4.9E-324 ~ 1.8E308
    논리 boolean 1 byte false true, false
    문자 char 2 bytes `\u0000` '\u0000' ~ '\uffff' (0 ~ 65535)

    기본형 타입 표

     

    기본형 변수타입의 대한 특징으로는 다음과 같습니다.

    • 모두 소문자로 시작한다.
    • 비객체 타입으로 null값을 가질 수 없다.
    • 변수의 선언과 동시에 메모리에 생성된다.
    • 메모리의 스택 영역에 저장한다.
    • 기본타입 변수는 실제 자료값을 갖는다.

     

    참조형 타입은 위의 8가지 기본형 타입을 제외한 나머지 모두를 말합니다. 

    • null 값을 가질 수 있다.
    • 실제값이 저장된 주소값을 갖는다.
    • 실제값은 메모리의 Heap 영역에 저장되며, Heap 영역의 주소값을 Stack 영역에 저장한다.
    Long refLong = null;
    long priLong = 0L; // long priLong = null; syntax error
    System.out.println("refLong=" + refLong);
    System.out.println("priLong=" + priLong);

    사용 중인 IntelliJ에서 위에 코드를 작성하면  Long 타입은 참조형 타입으로 null값을 가질 수 있지만, long은 기본형 타입으로 null을 선언하면 syntax error가 발생했습니다.

     

     

     

     

    메모리

    JVM 구조

     

    Java는 컴파일러를 통해 컴퓨터가 이해할 수 있는 바이트코드(*. class)로 만들어집니다. 만들어진 바이트코드(*. class)는 JVM에 의해 동작합니다. JVM은 바이트코드를 실행하기 위해 저장공간을 할당받아 사용하는데 이 부분을 Runtime Data Areas라고 합니다. 이중 Stack 영역과 Heap 영역이 변수가 저장되는 공간입니다.

     

     

    변수가 메모리에 저장되는 형태

    // primitive type
    int a = 34;
    // reference type
    String b = "java";

    a, b의 메모리 구조

    기본 타입인  a는  Stack 영역에 a=34라고 저장되지만, 참조 타입인  b는 실제 값은 Heap 영역에 있으며 해당 영역의 주소값을 Stack에서 가지고 있습니다.

     

     

     

    참고!
    boolean 타입의 크기에 대해서 찾아보던 중 여러가지 의견들이 있었습니다.
    Java의 boolean의 크기는 몇일까?
    논리형 type 'boolean'은 왜 1bit가 아닌 1byte의 크기를 가질까?

     

Designed by Tistory.