[Java] C언어 포인터 VS Java 참조 자료형

PYOUNANI·2022년 9월 29일
0

Java

목록 보기
3/14
post-thumbnail

C언어 포인터 VS Java 참조 자료형

Java 참조 자료형을 배우다보면 C언어 포인터와 비슷하다고 느낄 수 있다. 하지만 둘의 개념은 완전히 다르다. 그 이유에 대해 살펴보자.

C언어 포인터

C언어는 포인터를 이용해서 직접 메모리 주소에 접근할 수 있었다.

#include <stdio.h>

int main(void){

	int i = 10;
    int* p;
    p = &i;
    
    printf("%d", i); //1을 출력
    
    return 0;
}


포인터 변수 p에 정수형 변수인 i의 주소값인 1000번지를 저장한 모습이다. C언어에서의 포인터 변수는 실제 메모리 주소값을 가지게 됩니다.

Java 참조 자료형

참조 자료형은 메모리상 배열의 주소나 객체가 저장이 된 주소를 갖고 있는 데이터형입니다. C언어에서의 포인터 개념과 비슷해보이지만 C언어와는 다르게 실제 메모리 주소값을 가지지 않는다는 점에서 다릅니다.

JVM이 실행되면 JVM은 자신이 쓸 메모리를 컴퓨터가 가지고 있는 메모리에서 동적할당한다. 이 의미는 매순간 실행을 할 때마다 컴퓨터의 비어있는 메모리를 찾아서 그 메모리를 쓴다는 의미이다. 실행 할 때마다 갖고 있는 메모리 주소가 다를 수도 있다는 것을 의미한다.

예를 들면 우리의 컴퓨터가 1번부터 1000번까지 메모리 주소를 가지고 있다고 할 때 JVM이 200번부터 400번까지의 메모리 주소지를 사용하고자 한다. 이때 JVM은 200번부터 400번의 메모리 주소를 사용하는 것이 아니라 1번부터 200번으로 자신만의 주소지를 만들어 사용하게 된다. 어차피 다음번 실행했을 때 200번부터 400번이 아닌 500번부터 700번을 사용할 수도 있기 때문이다.

그렇기 때문에 자바는 JVM만의 메모리 저장소에 저장되기 때문에 실제 주소값을 저장한다고 보기에는 어렵습니다. 따라서 자바의 참조 자료형은 C언어에서의 포인터의 개념과는 비슷하지만 같다고는 볼 수 없습니다.

0개의 댓글