2026년 02월 20일

🗺️ 컴퓨터는 데이터를 어떻게 찾을까?

Java Spring Boot
Cover Image

🗺️ 컴퓨터는 데이터를 어떻게 찾을까?

— 메모리 주소(Address) 완전 정복

핵심 요약: CPU가 수억 개의 메모리 칸 중 원하는 데이터를 찾으려면 "정확한 위치"가 필요하다.
그 위치를 가리키는 고유 번호가 바로 주소(Address) 다.


1️⃣ 주소란 무엇인가?

메모리(RAM)는 수많은 저장 칸(Cell)이 일렬로 늘어선 거대한 우편함 행렬과 같다.

메모리 (RAM)
┌──────┬──────┬──────┬──────┬──────┬──────┐
│  42  │  11  │ 255  │   0  │  78  │ ...  │
└──────┴──────┴──────┴──────┴──────┴──────┘
  0x00   0x01   0x02   0x03   0x04   ...
  ↑ 주소(Address)

CPU가 데이터를 읽거나 쓰려면 "몇 번 칸인가?" 를 정확히 알아야 한다.
이 식별 번호를 주소(Address) 라고 하며, 다음 두 가지 특징을 가진다.


2️⃣ 주소는 어떻게 전달될까? — 주소 버스(Address Bus)

CPU가 메모리에 접근할 때 주소는 전기 신호 형태로 주소 버스(Address Bus) 를 통해 전달된다.

      주소 버스 (Address Bus)
CPU ─────────────────────────────▶ 메모리 컨트롤러 ──▶ RAM
     "0x00FF 번지 데이터 줘!"              ↓
                               해당 위치 데이터 반환

🔑 버스 폭(Width)이 곧 메모리 한계

주소 버스의 비트 수가 접근 가능한 최대 메모리 크기를 결정한다.

시스템주소 버스 폭최대 주소 수최대 메모리
32비트32 bits2³² = 약 43억4 GB
64비트64 bits2⁶⁴ = 약 1.8 × 10¹⁹사실상 무제한

💡 32비트 OS에서 RAM을 4GB 이상 꽂아도 인식이 안 되는 이유가 바로 이것이다.
주소 버스가 4GB 이상의 위치를 지정할 수 없기 때문이다.


3️⃣ 물리 주소 vs 논리(가상) 주소

프로그램이 직접 RAM을 건드리면 보안 문제가 생긴다.
그래서 OS는 프로그램에게 가짜 주소(논리 주소) 를 주고, 실제 주소와의 변환을 하드웨어가 처리한다.

구분물리 주소 (Physical)논리/가상 주소 (Logical/Virtual)
위치실제 RAM 칩 위의 주소프로그램이 바라보는 주소
접근하드웨어(MMU)만 직접 접근프로세스가 사용
특징고정, 유일프로세스마다 독립적으로 0부터 시작 가능
변환MMU가 실시간으로 물리 주소로 변환

💡 MMU(Memory Management Unit): CPU 내부에 내장된 하드웨어.
논리 주소를 물리 주소로 변환하고, 잘못된 메모리 접근을 차단하는 보안 역할도 한다.


4️⃣ Java 개발자 관점 — 참조(Reference)와 주소

Java는 C/C++처럼 직접 메모리 주소를 다루지 않는다.
하지만 참조 변수(Reference Variable) 는 내부적으로 객체의 힙(Heap) 위치를 가리키는 논리 주소 정보를 담고 있다.

Member member = new Member("홍길동");
//  ↑ 참조 변수          ↑ Heap 어딘가에 생성된 객체
//  member 변수 내부에는 객체의 Heap 주소가 저장됨

🔍 JVM에서 객체 주소 확인

Member member = new Member("홍길동");

// 객체의 식별값 확인 (실제 물리 주소는 아님)
System.out.println(System.identityHashCode(member)); // ex) 1829164700
System.out.println(member); // ex) com.example.Member@6d06d69c (16진수 해시)

⚠️ 이 값은 실제 물리 주소가 아니라 JVM이 객체 식별을 위해 사용하는 해시 기반 값이다.
JVM의 GC(Garbage Collector)가 객체를 이동시킬 수 있어 실제 주소는 변할 수 있다.

Java 메모리 영역과 주소의 관계

메모리 영역저장 내용주소 관리 주체
Stack기본 타입 변수, 참조 변수(주소값)JVM 자동 관리
Heapnew로 생성된 객체 실체GC가 관리
Method Area클래스 정보, static 변수JVM 자동 관리

5️⃣ 핵심 정리

개념한 줄 요약
주소메모리 특정 위치를 가리키는 고유 번호
주소 버스CPU가 주소를 메모리로 전달하는 전용 통로
물리 주소실제 RAM 위의 주소, MMU만 접근 가능
논리 주소프로그램이 사용하는 가상 주소, MMU가 변환
Java 참조힙 내 객체 위치를 가리키는 논리 주소 정보
← 목록으로 돌아가기