비트
먼저 메모리 단위를 알아보자.
컴퓨터가 조작하는 정보의 가장 작은 처리 단위를 비트(Bit)라고 한다. - (0과 1)의 집합으로 구성된 기본 단위.
보통 정보표현의 최소단위라고 표현을 한다. 사용자가 작성하고 실행하는 모든 프로그램들은 보조기억장치인 하드디스크에 저장을 하게 된다. 실행 명령을 내리게 되면 하드디스크 즉, 보조기억 장치에 있던 프로그램 코드를 주기억 장치에 적재시켜 하나하나 순차적으로 실행시켜 결과를 보여준다. 이때 사용하는 주기억장치를 RAM이라고 부른다. 전원이 꺼지면 기억된 내용이 지워져서 휘발성 메모리라고도 한다.
주기억 장치
- 주기억 장치는 RAM(Random Access Memory)으로, CPU가 즉시 액세스해야 하는 프로그램 코드와 데이터를 저장한다.
- RAM은 휘발성 메모리로, 전원이 꺼지면 모든 데이터가 사라진다. 컴퓨터가 동작하는 동안 CPU는 자주 이 RAM에 접근하여 데이터를 읽고 쓴다.
- RAM은 CPU와 가까운 위치에 있지만, CPU 내부에 있는 것은 아니다. CPU와 메인보드 위에 설치된 RAM 간에 데이터가 오고 가며(시스템 버스), 그 과정에서 CPU가 명령을 빠르게 실행할 수 있도록 지원한다.
보조기억장치
- 영구적으로 데이터를 보관하기 위해서 보조기억장치를 사용한다.
- 우리가 사용하는 하드디스크나 USB, Micro sd 이런 기억매체가 바로 보조기억 장치이다.
- 우리가 컴퓨터로 처리하는 모든 것들은 램이라는 주기억 장치를 거치고 명령을 해독하고 실행하는 CPU를 거쳐서 처리가 이루어진다.
메모리의 한 개의 메모리 소자는 0 아니면 1 의 둘 중의 한 개의 값만 보관할 수 있다.
이걸 우리는 2진수로 표현하고 2진수 한자리를 비트(Bit) 라고 한다. 하지만 0과 1로는 오직 2개의 정보만 표현 할 수 있다.
예시)
- 만일 비트가 2개라면?
- 00, 01, 10, 11 4개의(2의 2승=4) 정보를 표현 할 수 있다.
- 만일 비트가 3개라면?
- 000, 001, 010, 011, 100, 101, 110, 111 8개를(2의 3승=8) 표현할 수 있다.
바이트
사람들은 더 많은 정보를 표현하기 위해서 비트를 8개 묶어 사용하는데 이것을 Byte(바이트)라고 한다.
문자표현의 최소단위(256 종류)라고 할 수 있다. 영문자 한글자는 1바이트로 저장되고 한글은 한 글자당 2바이트를 사용한다.
비트수가 많으면 많을수록 더 많은 양의 데이터를 처리할 수 있고 속도도 빨라진다.
자바에서 변수를 선언하고 초기화하면, 해당 변수는 메모리(RAM)에 할당된다.
자바는 변수를 선언할 때 자료형(Data Type)을 지정해주어야 하며, 자료형에 따라 메모리에 저장되는 방식과 크기가 달라진다.
자바에서 변수를 메모리에 할당하는 과정
- 스택(Stack): 메서드 내에서 선언된 기본형(Primitive Type) 변수는 스택 메모리에 저장된다.
- 힙(Heap): 객체나 배열과 같은 참조형(Reference Type) 변수는 힙 메모리에 저장되며, 변수 자체는 스택에 저장되지만 실제 데이터는 힙에 위치한다.
스택 메모리
- 1. 정적 메모리 할당: 스택 메모리는 함수 호출 시에 할당되며, 함수가 종료되면 자동으로 메모리가 해제된다. 메모리 할당과 해제가 매우 빠르며, Last In, First Out (LIFO) 방식으로 작동한다.
- 2. 저장되는 데이터: 스택에는 지역 변수, 메서드 매개변수, 기본형 변수와 같은 값들이 저장된다. 또한 함수 호출 정보(함수의 반환 주소 등)도 스택에 저장된다.
- 3. 메모리 크기: 스택의 크기는 일반적으로 고정되어 있고 상대적으로 작다. 한정된 양의 메모리만 사용할 수 있기 때문에 매우 큰 데이터를 저장하는 데 적합하지 않다.
- 4. 메모리 접근 속도: 스택은 메모리 할당과 해제가 매우 효율적이기 때문에, 힙보다 훨씬 빠르게 동작한다.
힙 메모리
- 1. 동적 메모리 할당: 힙 메모리는 프로그램 실행 중에 동적으로 할당되며, 명시적으로 해제되지 않으면 프로그램이 종료될 때까지 메모리가 유지된다. 할당된 메모리를 사용한 후에는 프로그래머가 명시적으로 해제해 주어야 한다(자바에서는 가비지 컬렉터가 자동으로 해제).
- 2. 저장되는 데이터: 힙에는 주로 객체나 배열과 같은 참조형 데이터가 저장된다. 힙에 할당된 데이터의 참조 주소는 스택에 저장된다.
- 3. 메모리 크기: 힙의 크기는 상대적으로 크며, 메모리 용량에 따라 동적으로 할당할 수 있기 때문에 큰 데이터를 저장하는 데 적합하다.
- 4. 메모리 접근 속도: 힙 메모리의 할당과 해제는 스택보다 복잡하고 시간이 더 오래 걸린다. 힙은 메모리 할당과 해제가 자주 일어나면 메모리 단편화(fragmentation)가 발생할 수 있어 성능에 영향을 미칠 수 있다.
✏️ 궁금한 점: "32비트가 저장공간이 더 넓기 때문에 2비트보다 처리 속도가 더 느려지는 것 아닌가?"
- 예시: 32비트 메모리 공간에 4를 저장한다.
💡 해결: 비트 크기가 커질수록 처리 속도가 빨라지는 이유는 주로 한 번에 처리할 수 있는 데이터 양이 많아지기 때문이다.
- CPU가 데이터를 처리할 때, 몇 비트로 한 번에 데이터를 처리할 수 있는지에 따라 성능이 달라진다.
- CPU는 정수형 데이터가 4바이트라는 고정된 크기를 가졌다는 것을 알고 있기 때문에 이 값을 찾는 데 시간이 더 오래 걸리지 않는다는 것이다.
- 즉, "11이라는 2진 표현을 찾는 시간"은 비트 크기나 메모리 공간이 넓다고 해서 더 오래 걸리는 것이 아니다.
워드(WORD)
워드는 CPU가 한 번에 처리할 수 있는 데이터의 크기를 의미한다. CPU의 워드 크기는 해당 CPU가 한 번에 처리할 수 있는 비트 수를 나타낸다. 예를 들어, CPU가 한 번에 16비트를 처리할 수 있다면 1워드는 16비트가 되고,32비트를 처리할 수 있다면 1워드는 32비트가 된다. 현대 컴퓨터의 워드 크기는 대부분 32비트 또는 64비트이다.
자료형의 종류
자바에서 사용되는 자료형을 기본형(Primitive Type)과 참조형(Reference Type)으로 나누어 정리하자.
1. 기본형(Primitive Type)
기본형은 자바에서 가장 기본적인 데이터 형식을 의미하며, 메모리에 직접 값을 저장한다.
자바에서는 8개의 기본형이 존재한다.
2. 참조형(Reference Type)
참조형은 객체나 배열처럼 기본형 이외의 데이터를 저장하며,
실제 데이터는 힙 메모리에 저장되고, 변수는 그 데이터의 메모리 주소를 참조한다.
- 클래스(Class): 자바에서 모든 객체는 클래스의 인스턴스이다.
- 사용자가 정의한 클래스를 자료형으로 사용하여 객체를 선언할 수 있다.
- 예를 들어, String, Scanner와 같은 클래스들이 여기에 해당한다.
- 배열(Array): 같은 자료형의 여러 값을 저장할 수 있는 자료구조이다. 배열도 객체로 취급되며, 힙 메모리에 할당된다.
- 예: int[ ], String[ ]
- 배열을 선언하면, 배열을 가리키는 참조 변수는 스택(Stack) 메모리에 저장된다.
- 이 참조 변수는 배열이 할당된 힙 메모리의 주소값을 가지고 있다.
- 인터페이스(Interface): 인터페이스도 자료형으로 사용할 수 있다.
- 인터페이스를 구현한 클래스의 객체는 해당 인터페이스를 참조할 수 있다.
- 열거형(Enum): 열거형은 일정한 값들의 집합을 정의하는 자료형이다.
- 예를 들어, enum Day { MONDAY, TUESDAY, WEDNESDAY }처럼 특정 값들을 정의할 때 사용된다.
'자료구조' 카테고리의 다른 글
[자료구조] 스택과 큐 (0) | 2024.10.11 |
---|---|
[자료구조] 배열 리스트, 연결 리스트 (4) | 2024.10.08 |
[자료구조] 배열의 특징, 한계 (0) | 2024.10.08 |
[자료구조] 시간복잡도와 공간복잡도 (0) | 2024.10.07 |
[자료구조] 자료구조와 알고리즘이란? (0) | 2024.10.06 |