007. 레퍼런스와 인스턴스

Cornchip·2022년 9월 26일
0

bitcamp

목록 보기
7/11
post-thumbnail

목차
1. 레퍼런스와 인스턴스 비교
2. Garbage



1. 레퍼런스와 인스턴스 비교

1) 배열에서의 레퍼런스와 인스턴스

  1. int[] arr;

    메모리 주소가 저장된다.
    변수의 크기는 특정되지 않는다.

  2. arr = new int[3];

    연속된 int 메모리
    arr : 메모리의 주소를 저장하는 변수 = reference
    int[3] : new 명령을 통해 준비한 메모리 = instance

  3. int[] arr = new int[3];

    인스턴스에 소속된 변수는 기본값이 자동으로 설정된다.

    • 정수 : 0
    • 부동소수점 : 0.0
    • 논리 : false
    • 문자 : \u0000

    • 모든것은 0으로

2) primitive type 변수의 배열과 레퍼런스 배열

  1. primitive type 변수의 배열
int[] arr = new int[3];

arr : 레퍼런스


  1. 레퍼런스 배열
Board[] arr = new Board[3];
Board b1, b2, b3;

레퍼런스가 3개 만들어진다. 인스턴스가 3개 만들어지는것이 아니다.


  1. 인스턴스 생성
arr[0] = new Board();

인스턴스를 1개 생성한다.
여러개 만들고 싶으면 이 과정을 반복문으로 반복하는 수밖에 없다.


  1. etc

arr[0]

위는 레퍼런스 변수이다.


arr[1].no = 100;

arr[1]에 있는 주소로 가서 no field에 100을 저장한다.


String[] names = new String[28];
names[0] = "조주연";

new String("조주연");이라고 써야하지만 생략가능



2. Garbage

1) 정의

  • 메모리의 주소를 잃어버려 사용할 수 없는 인스턴스

    메모리만 차지한다.
    = garbage(쓰레기)

2) garbage가 제거될 때

  1. cpu가 한가할 때
  2. 메모리가 부족할 때

garbage collector가 garbage를 제거한다.

JVM을 종료하면 JVM이 사용했던 모든 메모리를 OS가 강제로 해제시킨다.

3) Garbage와 레퍼런스 카운트

  • 레퍼런스 카운트 : 인스턴스의 주소를 갖고있는 레퍼런스의 개수
  • 레퍼런스 카운트가 0인 인스턴스 = garbage
  • 레퍼런스는 c언어에서 포인터(pointer)라고도 한다.
profile
cornchip

0개의 댓글