본문 바로가기
컴퓨터공학/자바프로그래밍

10. 배열과 반복문의 조화

by meow0110 2024. 7. 8.

 

■ 자바의 경우는 int arr[   ];  로 표현한다. 즉 시작주소를 위처럼 쓰지 않는다. (위는 C언어이다.)

 

■ HEAP
STACK은 임시 저장 공간이며, 크기가 작음 (지역변수를 저장하는 공간)
HEAP은 반 영구적 저장 공간이며, 크기가 큼 (new를 해줘야 한다.) 저장공간이 크기 때문에 heap을 쓴다.
Java의 배열은 HEAP을 사용

■ 포인터 형 변수
주소를 저장하는 변수
Java의 배열은 포인터 형 변수

 

■ Garbage Collector
JVM은 HEAP 공간 할당과 반환을 수행
개발자의 오류를 최소화 함
프로그램의 안전성을 확보

 

■ 아래에서 위의 내용을 자세히 들여다보자.

 

■ 각 arr, newarr 마다 heap을 지정함

■ 여기서 문제가 발생한다. 

arr 와 newarr 모두 같은 heap, 즉 같은 공간을 가리키게 된다. 이름만 다를 뿐 서로 같은 heap을 가리킨다.

■ 만약 arr, newarr 모두 heap의 데이터를 정리할려고 한다. arr는 아래쪽을 가리키니 아래쪽을 지운다. 그런데 newarr도 같은 공간을 가리키니 똑같이 해당 공간을 정리한다. 문제 발생한다! 지운곳을 또 지우니까! 그래서 오류가 나는 것이다. 그리고 arr가 원래 쓰던 heap공간은 계~~~속 떠돌게 된다. 아무도 쓰지 않는 공간을 활용도 못한다.

 

■ 여기까지는 C언어에서의 특징이다. 근데 java는 garbage collector가 이를 정리해준다. 그래서 좋다!

 

■위의 메모처럼 2줄로 쓰고 싶다면 new를 써야한다.

■편리한 배열의 초기화 방법 활용예제를 밑에서 보자. 

■ 가능

■ 가능

 

■불가능

 

 

 

 

 

 

 

 

 

 

■2개씩 2개씩 겹쳐서 비교함. 그래서 스왑이 일어나지 않게되면 정렬을 멈추는 방식이다.

 

 

 

 

 

■학습정리

1. HEAP과 STACK

  • STACK은 임시 저장 공간이며, 협소한 크기를 가짐
  • HEAP은 반 영구적 저장 공간이며, 크기는 RAM과 유사함

2. 배열과 메모리 관리

  • 저장 공간은 HEAP에 할당 됨
  • 사용 후 반환은 JVM의 Garbage Collector가 대행