Wanna be Brilliant Full-Stack Developer

자바 배열이란? 본문

Some Memos/Java

자바 배열이란?

Flashpacker 2023. 3. 13. 23:53


배열을 정의해보자면? 어떤 연관된 데이터를 저장하기 위한 자료구조이다.

내가 만약 숫자를 4,5,6 이 세가지 숫자를 저장하고 싶으면?

지금까지 배운 개념으로는 이 세가지 숫자를 저장하는 방법은 단 한가지 방법밖에 없다.

어떻게 해야하는가? 변수를 세개 만들어야한다.

 

연관된 데이터를 저장하기 위한 자료구조인 배열을 사용하면 하나의 변수로도 데이터를 저장이 가능하다.

저장하는 방법을 보자! 

숫자 3개를 저장할떄 int [] 대괄호를 적고 변수명 nums를 적는다.

그리고= 하고 {중괄호로 4, 5, 6 }; 이렇게하면 연속된 데이터를 저장할 수 있다. 

 

연관된 데이터를 연속되게 저장한다는게 무슨뜻인가?

우리가 어떤 메모리 공간이 있을때 하나를 4바이트라고 하면? 4바이트가 총 8개의 공간이 있는데 

여기 8개의 공간이 데이터를 저장하기전에 미리 데이터가 들어가있다고 해보자

100이라는 숫자가 들어가 있고

20이 들어가 있고 1이 들어가 있다.

 

이렇게 데이터가 저장되어있는 상태에서 내가 데이터를 저장할때

배열로 데이터로 저장을 하면 특징이 무엇인가? 연속된 공간을 찾게 된다.

 

연속된 3개의 int형 공간이 필요하다. 

이런식으로 저장하지 않는다.

배열은 데이터가 저장이 될떄 연속된 공간이 확보가 되어있어야한다.

연속된 공간에 4, 5, 6, 을 저장하 수 있다.

이런 연속된 공간에 데이터를 저장할 수 있는 특징이 있다보니까

데이터를 읽기가 빠르다. 내가 데이터를 찾을떄 nums는 누구를 가리키고 있는가?

nums가 이 세가지 공간을 다가리키는 것은 아니고 배열은 시작번지만 가리킨다.

시작번지만 바라보기 떄문에 내가 데이터 nums 읽으면 

저 시작지점을 nums의 대괄호 해서 [0] 번지 

위에는 nums의 [1] 번지 

위에는 nums의 [2] 번지

데이터를 왜 읽기가 빠른가? 

읽어만 가면 끝나기 떄문이다. 만약에 데이터가 따로 분포가 되어있으면 읽기가 불편할것이다.

연속된 공간에 저장 되어 있지 않고 따로 분포가 되어있으면 nums가 애를 가리킨다고 하면 한칸더

움직이고 데이터를 읽고 두칸을 점프를 해야하기 떄문에 

 

Jump없이 쭉 읽을 수 있기 떄문에 데이터 읽기가 빠르고 시작번지를 바라본다.

이게 배열이다! 한번 사용해보자!

오류가 발생할 수도 있는데 

OutOfBounds라는것이 범위를 벗어났다는 것이다. Index는 번호이다. 배열의 번호가 범위를 벗어난

예외가 발생했다는 것이다.

Index3는 Out of BOunds 범위를 벗어났다. 이 배열의 크기는 총 3개이니 3번지가 없다는 것이다.

번지수는 0번지부터 시작하기 떄문에 2번지까지만 찾을 수 있다.

마지막 규칙 0번지부터 시작한다.

 


배열에대해 조금더 깊게 배워보자!

앞서 배운 배열은 값이 익숙하다. 배열을 선언하는 두번쨰 방법을 알아보려고 하는데!?

Int[] nums = new int [3] 

new는 heap공간에 띄우라는건데?  이렇게하면 어떤것이 만들어지는가?

메모리의 heap공간에 총  4바이트씩 3가지 공간을 확보를 한다. 

당연히 가리키는것은 첫번째를 가리킨다.

nums는 첫번쨰 공간을 가리킨다.

 

데이터가 안들어가 있으니 데이터를 넣어야한다.

new를 하여 heap공간에 3가지 공간을 만들겠다라는 뜻이다.

배열에 3개의 공간이 만들어지고 

아무것도 넣지 않는 배열의 값은 0이 나온다.

왜 0 이나오는가? int의 값이 초기화되지 않으면 0이 나온다.