[자바 무료 강의] └ [심화] 변수는 상자이다 - 코드라떼
Lesson List button
코스자바로 배우는 프로그래밍
hamburger button
강의└ [심화] 변수는 상자이다최종수정일 2021-11-21
아이콘미정

참고 내용이 있습니다. 강의를 진행하는 데는 필요 없으나 이후에 궁금하실 때 다시 보시면 좋습니다.

노트 강의

심화는 이후에 보셔도 상관없습니다.


목차


  1. 1byte의 크기는 얼마나 클까?

  2. 메모리에는 주소가 존재한다.

  3. 변수에도 메모리 주소가 존재한다.

  4. 값이 존재하지 않는 변수는 메모리를 할당하지 않는다.

  5. 아스키 코드표

1. 1byte의 크기는 얼마나 클까?


image

1 byte를 알기 전에 가장 작은 단위인 bit에 대해서 알아봅시다. 1 bit는 2진수 표현되며 1 또는 0으로 표현될 수 있습니다. 옛날에는 7 bit나 9 bit도 1 byte라고 부를 때가 있었습니다만 현재는 일반적으론 8 bit를 1byte라 부릅니다.

1 byte의 범위는 2진수로 0000 0000부터 1111 1111까지 표현 가능하며, 이것을 정수로 표현하면 0000 0000은 십진수 0, 1111 1111은 십진수 255까지 표현할 수 있습니다.


2. 메모리에는 주소가 존재한다


image

땅에는 주소가 있듯이 메모리에도 논리적인 주소가 있습니다. 엄밀하진 않지만 그래픽적으로 메모리 공간을 보여줄 수 있다면 다음과 같습니다.

메모리 공간의 한 칸을 1 byte라고 했을 때 8 bit로 표현된다는 것을 대략적으로 확인할 수 있으며 해당 주소를 이용하여 메모리에 접근할 수 있습니다.


3. 변수에도 메모리 주소가 존재한다


image

변수를 선언하게 되면 변수를 위한 메모리가 할당됩니다. 이러한 변수에는 메모리 주소가 존재하며 변수를 접근하기 위해서는 메모리 주소를 알아야지 접근할 수 있습니다.

그러나 우리는 메모리 주소를 알지 못해도 변수에 접근할 수 있습니다. 자바 언어를 실행시키는 자바 가상 머신(Java Virtual Machine) 이 처리하기 때문입니다.


4. 값이 존재하지 않는 변수는 메모리를 할당하지 않는다


public class Main {
    public static void main(String[] args) {
        int num;
        // 값이 존재하지 않는 변수.

        // 이후에도 값이 존재 하지 않는 변수는 
        // 메모리에 할당하지 않는다
    }
}

자바 가상 머신은 값이 존재하지 않는 변수는 메모리를 할당하지 않습니다. 이러한 변수들을 체크하여 메모리를 할당하지 않습니다. 이유는 사용하지 않기 때문입니다.

public class Main {
    public static void main(String[] args) {
        int num;
        // 값이 존재하지 않는 변수에는
        // 접근할 수 없다

        System.out.println(num);
        // 컴파일 오류 발생
    }
}

그리고 값이 존재하지 않는 경우 변수에 접근할 수 없습니다. 자바 언어를 자바 가상머신이 읽을 수 있는 코드(자바 바이트 코드)로 바꾸는 컴파일이 되지 않습니다.

*이후에 배우는 멤버 변수는 값을 존재하지 않더라도 메모리에 적재도 하고 초기화도 해줍니다. 지금은 헷갈릴 테니 넘어갑시다.


5. 아스키 코드표


아스키코드 wiki

도전자 질문
아이콘개발자꿈나뭄(2024-05-31 13:14 작성됨)
변수 선언 시 메모리에 변수를 위한 공간이 할당된다고 알고 있는데,
자바 가상 머신에서 값이 존재하지 않는 변수는 메모리에 공간을 할당하지 않는다고 알고 있다.
main 메서드 내에서 int num; 과 같이 변수 선언만 한 채로 나중에 변수에 값을 초기화하고자 한다면, 
num 이라는 변수를 위한 공간이 메모리에 할당되나요?
아이콘커피소년(2023-04-02 11:35 작성됨)
변수를 선언할 때 값을 초기화 하지 않는 경우, 메모리는 할당되지만, 변수에 따라 쓰레기값(undefined) 혹은 기본값이 자동으로 할당된다고 알고 있습니다. 혹시 제가 모르는 다른 과정이 있는 건가요?
아이콘코드라떼(2023-04-08 15:01 작성됨)
안녕하세요. 코드라떼입니다.

undefined는 자바스크립트라는 언어에서 사용되는 '정의되지 않은' 의미를 가진 값을 말씀하시는 것 같습니다.

자바 언어에서 undefined는 존재하지 않습니다.

감사합니다 :)
아이콘code_latte(2023-03-25 20:35 작성됨)
2023.03.25 : 수강 완료
아이콘보라돌이(2022-01-08 16:43 작성됨)
변수를 선언하게 되면 변수를 위한 메모리가 할당된다고 하셨습니다.
그렇다면 int num; 이라는 코드를 작성하면 4byte 크기의 메모리가 할당될 것입니다.
그런데 JVM은 값이 존재하지 않는 변수는 메모리를 할당하지 않는다고 하셨습니다.
그렇다면 int num; 이라는 코드에 의해 4byte 크기의 메모리가 할당되었다가
JVM이 num이란 변수에 값이 할당되지 않는 것을 확인하면 4byte 메모리는 해제되는건가요?
아이콘코드라떼(2022-01-09 20:03 작성됨)
안녕하세요. 코드라떼입니다 :)

메서드내에 있는 변수(로컬 변수 또는 지역 변수라고 부름)는 컴파일러가 컴파일할 때 변수에 값이 할당되지 않고 사용하지 않는 변수는 제거합니다.
그러므로 일시적으로라도 4byte 메모리를 할당하지 않습니다. 그러므로 메모리에서 해제할 것도 없습니다.

감사합니다 :)
아이콘iydo09(2021-08-26 00:31 작성됨)
값이 존재하지 않은 변수는 오브젝트 라고도 할수 있나요?
아이콘코드라떼(2021-08-26 15:12 작성됨)
안녕하세요. 코드라떼입니다.

변수와 리터럴(값)을 별도로 생각하셔야 합니다. 값이 존재하지 않는 변수는 공간을 점유하는 비어 있는 상자라고 보시면 됩니다. 그리고 오브젝트(개체 또는 객체)는 의미가 전혀 다릅니다. 이후의 객체에 대한 강의에서 아시게 됩니다.

감사합니다.
이용약관|개인정보취급방침
알유티씨클래스|대표, 개인정보보호책임자 : 이병록
이메일 : cs@codelatte.io
사업자등록번호 : 824-06-01921
통신판매업신고 : 2021-성남분당C-0740
주소 : 경기도 성남시 분당구 대왕판교로645번길 12, 9층 24호
Lesson List button
코스자바로 배우는 프로그래밍
hamburger button
강의└ [심화] 변수는 상자이다최종수정일 2021-11-21
아이콘미정

참고 내용이 있습니다. 강의를 진행하는 데는 필요 없으나 이후에 궁금하실 때 다시 보시면 좋습니다.

노트 강의

심화는 이후에 보셔도 상관없습니다.


목차


  1. 1byte의 크기는 얼마나 클까?

  2. 메모리에는 주소가 존재한다.

  3. 변수에도 메모리 주소가 존재한다.

  4. 값이 존재하지 않는 변수는 메모리를 할당하지 않는다.

  5. 아스키 코드표

1. 1byte의 크기는 얼마나 클까?


image

1 byte를 알기 전에 가장 작은 단위인 bit에 대해서 알아봅시다. 1 bit는 2진수 표현되며 1 또는 0으로 표현될 수 있습니다. 옛날에는 7 bit나 9 bit도 1 byte라고 부를 때가 있었습니다만 현재는 일반적으론 8 bit를 1byte라 부릅니다.

1 byte의 범위는 2진수로 0000 0000부터 1111 1111까지 표현 가능하며, 이것을 정수로 표현하면 0000 0000은 십진수 0, 1111 1111은 십진수 255까지 표현할 수 있습니다.


2. 메모리에는 주소가 존재한다


image

땅에는 주소가 있듯이 메모리에도 논리적인 주소가 있습니다. 엄밀하진 않지만 그래픽적으로 메모리 공간을 보여줄 수 있다면 다음과 같습니다.

메모리 공간의 한 칸을 1 byte라고 했을 때 8 bit로 표현된다는 것을 대략적으로 확인할 수 있으며 해당 주소를 이용하여 메모리에 접근할 수 있습니다.


3. 변수에도 메모리 주소가 존재한다


image

변수를 선언하게 되면 변수를 위한 메모리가 할당됩니다. 이러한 변수에는 메모리 주소가 존재하며 변수를 접근하기 위해서는 메모리 주소를 알아야지 접근할 수 있습니다.

그러나 우리는 메모리 주소를 알지 못해도 변수에 접근할 수 있습니다. 자바 언어를 실행시키는 자바 가상 머신(Java Virtual Machine) 이 처리하기 때문입니다.


4. 값이 존재하지 않는 변수는 메모리를 할당하지 않는다


public class Main {
    public static void main(String[] args) {
        int num;
        // 값이 존재하지 않는 변수.

        // 이후에도 값이 존재 하지 않는 변수는 
        // 메모리에 할당하지 않는다
    }
}

자바 가상 머신은 값이 존재하지 않는 변수는 메모리를 할당하지 않습니다. 이러한 변수들을 체크하여 메모리를 할당하지 않습니다. 이유는 사용하지 않기 때문입니다.

public class Main {
    public static void main(String[] args) {
        int num;
        // 값이 존재하지 않는 변수에는
        // 접근할 수 없다

        System.out.println(num);
        // 컴파일 오류 발생
    }
}

그리고 값이 존재하지 않는 경우 변수에 접근할 수 없습니다. 자바 언어를 자바 가상머신이 읽을 수 있는 코드(자바 바이트 코드)로 바꾸는 컴파일이 되지 않습니다.

*이후에 배우는 멤버 변수는 값을 존재하지 않더라도 메모리에 적재도 하고 초기화도 해줍니다. 지금은 헷갈릴 테니 넘어갑시다.


5. 아스키 코드표


아스키코드 wiki

도전자 질문
아이콘개발자꿈나뭄(2024-05-31 13:14 작성됨)
변수 선언 시 메모리에 변수를 위한 공간이 할당된다고 알고 있는데,
자바 가상 머신에서 값이 존재하지 않는 변수는 메모리에 공간을 할당하지 않는다고 알고 있다.
main 메서드 내에서 int num; 과 같이 변수 선언만 한 채로 나중에 변수에 값을 초기화하고자 한다면, 
num 이라는 변수를 위한 공간이 메모리에 할당되나요?
아이콘커피소년(2023-04-02 11:35 작성됨)
변수를 선언할 때 값을 초기화 하지 않는 경우, 메모리는 할당되지만, 변수에 따라 쓰레기값(undefined) 혹은 기본값이 자동으로 할당된다고 알고 있습니다. 혹시 제가 모르는 다른 과정이 있는 건가요?
아이콘코드라떼(2023-04-08 15:01 작성됨)
안녕하세요. 코드라떼입니다.

undefined는 자바스크립트라는 언어에서 사용되는 '정의되지 않은' 의미를 가진 값을 말씀하시는 것 같습니다.

자바 언어에서 undefined는 존재하지 않습니다.

감사합니다 :)
아이콘code_latte(2023-03-25 20:35 작성됨)
2023.03.25 : 수강 완료
아이콘보라돌이(2022-01-08 16:43 작성됨)
변수를 선언하게 되면 변수를 위한 메모리가 할당된다고 하셨습니다.
그렇다면 int num; 이라는 코드를 작성하면 4byte 크기의 메모리가 할당될 것입니다.
그런데 JVM은 값이 존재하지 않는 변수는 메모리를 할당하지 않는다고 하셨습니다.
그렇다면 int num; 이라는 코드에 의해 4byte 크기의 메모리가 할당되었다가
JVM이 num이란 변수에 값이 할당되지 않는 것을 확인하면 4byte 메모리는 해제되는건가요?
아이콘코드라떼(2022-01-09 20:03 작성됨)
안녕하세요. 코드라떼입니다 :)

메서드내에 있는 변수(로컬 변수 또는 지역 변수라고 부름)는 컴파일러가 컴파일할 때 변수에 값이 할당되지 않고 사용하지 않는 변수는 제거합니다.
그러므로 일시적으로라도 4byte 메모리를 할당하지 않습니다. 그러므로 메모리에서 해제할 것도 없습니다.

감사합니다 :)
아이콘iydo09(2021-08-26 00:31 작성됨)
값이 존재하지 않은 변수는 오브젝트 라고도 할수 있나요?
아이콘코드라떼(2021-08-26 15:12 작성됨)
안녕하세요. 코드라떼입니다.

변수와 리터럴(값)을 별도로 생각하셔야 합니다. 값이 존재하지 않는 변수는 공간을 점유하는 비어 있는 상자라고 보시면 됩니다. 그리고 오브젝트(개체 또는 객체)는 의미가 전혀 다릅니다. 이후의 객체에 대한 강의에서 아시게 됩니다.

감사합니다.
이용약관|개인정보취급방침
알유티씨클래스|대표, 개인정보보호책임자 : 이병록
이메일 : cs@codelatte.io|운영시간 09:00 - 18:00(평일)
사업자등록번호 : 824-06-01921|통신판매업신고 : 2021-성남분당C-0740
주소 : 경기도 성남시 분당구 대왕판교로645번길 12, 9층 24호(경기창조혁신센터)