바닥부터 시작하는 프로그래밍/국비JAVA

10일차(참조 타입, 참조 변수, 배열, 향상된 for문(for each문))

예얀 2024. 3. 18. 16:45

 

 

변수는 기본타입, 참조타입으로 나뉜다.

 

ram은 stack, heap

 

 

모든 지역 변수는 stack이 쌓인다. 

stack 과 heap은 메모리 소멸시점이 다르다.

 

int arr 하는 순간 stack 참조변수 생성 (arr 은 변수명)

new int 하는순간 heap메모리에 생성

heap은 주소값이 있다. 

 

stack에 heap의 주소값이 들어간다.

 

[ ] 는 접근 연산자 (어딘가에 접근하겠다..)

즉 arr stack에서 heap에 접근해서 값이 바뀜

arr에있는게 인덱스에 접근해서 70으로 바꾸겠다.

 

stack 메모리는 스코프를 빠져나갈때 소멸

heap 메모리는  메모리를 가르키는 메모리가 없을때 소멸   (가르키는 메모리 : 참조타입)

 

스코프를 빠져 나가면 주소와 arr 소멸

즉, 스택에서 arr이 소멸되면 heap에서도 소멸

 

 

참조타입인지 아닌지 확인하는법 

arr = null;

int a = null; < - 이건 안됨.

 

null이란 아무데도 가르키지 않는값이다.

즉 참조타입인지 알아볼려면 arr = null; 을 넣어보면 됨.

 

arr 메모리에 null을 넣으면 heap에 있는것 다 소멸(가르키는 참조값이없을때)

null은 무가아니다. 아무데도 가르키지 않는값.

 

C언어는 arr 메모리에 null 넣어도 heap에있는 값이 안사라짐

 

int[] arr = new int[3];

arr = new int[5]; // 문법적으로 이렇게 한번더 가능 

 

이렇게 되면 OXFF11이 소멸됨.

소멸된 후
값 채워짐

맨 마지막에 스코프를 빠져나가면 arr도 소멸되니까 heap 영역에 있는것도 연쇄적으로 소멸됨

 

지역변수면 무조건 steak

 

arr1 = arr2;

즉, arr1 과 arr2 이 가르키는 메모리가 똑같다.

 

 

if문이 끝나면 arr2가 소멸

 

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

int 값을 담을 수 있는 메모리의 개수는 12개

 

0~2 행

0~3 열

 

heap의 맨윗줄은 참조값이 들어간다.

사실상 이중배열이지만 일중배열이 여러개있는것이다.

1중배열4 개짜리가 3개만들어짐

ex)

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

아래코드의 메모리 최종

 

 

 

0번째는 참조타입이기때문에 null이 들어갈 수 있다 null이 들어가게되면 heap에서 소멸 arr[0] = null; (사라진건 아래사진)

 

 

향상된 for문 : foreach문

for ( 변수 선언 : 배열) {

 

}

 

배열쪽은 반복가능한것 들어가면됨

 

예제 배열 문제---------------------------------------------------------------------------------------------------------------------------------------------

이어