다라다라V
article thumbnail
728x90
반응형

자료형에 대한 포스트에서 JAVA의 참조 자료형은 C언어의 포인터와 비슷한 개념이라고 하였다. JAVA의 참조 자료형이 C언어의 포인터와 다른 점은 무엇일까?

(링크 참고 : [JAVA] 03. 자바 프로그램의 자료형 https://daradarav.tistory.com/8?category=1047655)

 

[JAVA] 03. 자바 프로그램의 자료형

📌. 자바 프로그램의 자료형 자료형(Data Type)은 컴퓨터 내부의 데이터를 식별하는 분류입니다. 컴퓨터 내부에서는 자료형에 따라 처리되는 연산, 수행 가능한 명령들, 데이터의 의미, 저장 방

daradarav.tistory.com


📌 JAVA 변수 저장 방식

  • 기본 자료형 : 값을 기본 변수에 저장
  • 참조 자료형 : 배열, 클래스, 인터페이스 타입의 객체 참조값(id)를 레퍼런스 변수에 저장

(위) 기본 자료형  /  (아래) 참조 자료형


📌 객체 지향 언어 (Object-Oriented Programming, OOP)

다른 포스트에서 배울 개념이지만, 참조 자료형의 설명을 위해 간단히 소개하겠습니다.

  • 객체 : 현실 세계의 독립적인 사물 또는 대상을 모방한 프로그램상의 속성를 가리킴
  • 클래스 : 객체를 만들기 내기 위한 설계도
  • 클래스에 의해 메모리가 할당된 결과물이 객체
  • 클래스는 객체 내의 값을 저장하는 멤버 필드와 객체의 행동을 구현하는 함수인 메소드 부분으로 나뉩니다.


📌 JVM의 메모리의 구조 특징

📚 일반적인 프로그램 메모리 구조

  • 정적 메모리 영역 / 정적 메모리 할당 
    *  이미 메모리 공간의 크기가 정해져 있는 고정적 메모리 영역

  • 동적 메모리 영역 / 동적 메모리 할당 
     유동적으로 변화하는 메모리 영역
     프로그램이 실행시 실행되는 메모리 공간

📚 자바(Java) JVM 메모리 구조

 JVM(Java Virtual Machine)은 운영체제에서 할당받은 메모리 영역을 세 가지 세부 영역으로 구분하여 사용합니다.

  용도 및 특징
STATIC Area
(Method Area)
(1) static 키워드로 설정된 Class의 변수와 메소드가 제공되는 공간
(2) 객체 생성 없이 사용 가능
(3) 프로그램이 종료될 때 자동 할당 해제됨
HEAP Area (1) 클래스로 만들어진 객체(인스턴스), 배열 등이 할당됨
(2) JVM이 관리
(3) new 연산자에 의해 동적 할당됨
(4) 객체가 더이상 사용되지 않을 때 할당해제됨 (가비지 컬렉션의 대상)
STACK Area (1) 메소드 영역, 참조형 변수 등이 할당됨
(2) 메소드의 지역변수와 매개변수가 저장됨
(3) 메소드나 블록이 끝날 때 자동 할당해제됨


📚 JVM의 GC(Garbage Collector)

  • 객체는 생성시 힙(Heap) 영역에 저장되고,
    참조변수 스택(Stack) 영역에서 선언되어 힙(Heap) 영역의 참조값(id)를 저장

  • 힙(Heap) 메모리의 특정 영역이 가득차면
    JVM은 스택(Stack) 영역에서 참조되지 않는 힙(Heap) 영역의 객체를 제거하는 GC(Garbage Collector)를 수행

  • 자바에서는 C언어의 포인터와 같이 임의의 메모리 값을 설정하게 된다면,
    GC에 의해 바뀐 주소값을 알지 못하고 잘못된 접근을 할 위험이 있음

  • 때문에 자바의 참조 자료형은 임의의 메모리 주소를 저장할 수 없음

📌 C언어의 포인터와 JAVA의 참조 자료형 비교

  포인터 참조 자료형
메모리 값 설정 자율성 높다 낮다
메모리 관리 편의성 낮다 높다
메모리 접근 안정성 낮다 높다

 

반응형
profile

다라다라V

@DaraDaraV

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!