JAVA/JAVA수업

#6. 배열

열하나요 2023. 7. 10. 08:59

6-1. 배열

변수(Variable) : 메모리(RAM)에 DATA(VALUE) 값을 저장하기 위한 공간

- 하나의 변수공간에는 하나의 값만 저장이 가능하다.

 

배열은 참조형이다!!
 * 참조형 : new

기본자료형 - 실제 값을 바로 담을 수 있음 : 일반 변수 

참조자료형 - 주소 값을 담고 있는 변수 : 참조 변수(레퍼런스 변수)

 

#해시코드 : 주소값을 십진수의 형태(int형)으로 나타낸 것

#배열 인덱스 값 출력

0번 인덱스부터 마지막 인덱스까지 1씩 증가시키면서 순차적으로 출력

(반복 횟수를 알고 있으면 for문을 쓰고, 모르면 while문을 쓴다. 배열은 길이만큼 반복이므로 for문 사용)

 

int[] nums; stack메모리에 int형 nums라는 공간을 만들어준다.

nums = int[5]; heap메모리에 int형 5개짜리 크기의 배열 공간이 생기고, nums에 int[5]의 주소값이 생긴다.

nums[0] = 3;

nums[1] =7; ... nums배열 공간에 인덱스 각 값을 대입해준다. 

 

#배열 크기변경(새로운 배열값 추가)은 불가능하다

배열은 한번 지정한 배열의 크기를 변경 불가!!

여기서 lunchMenu에 새롭게 배열을 대입해주면,

새롭게 배열이 생성된다. (해시코드가 다름)

처음 만들어진 배열은 heap메모리에서 일정시간이 지나면 GC(Garbage Collector)가 삭제시켜준다.

 

만약 배열의 값들을 없애고 싶다면 lunchMenu = null; 을 입력해주면 된다.

 

#배열 초기화

배열 입력방법(이렇게도 가능하다)

// 방법 1. 
int[] arr1 = new int[] {1, 2, 3, 4};


// 방법 2.
int[] arr2 = {1, 2, 3, 4};

 

#배열 복사

1. 얕은 복사

 - 배열의 주소값을 대입하기 때문에 가리키고 있는 대상이 같다.

2. 깊은 복사

① 주소값을 복사한 것이 아니라 원본배열의 인덱스에 접근해서 실제 값을 복사본 배열의 인덱스에 대입한 것

1단계. 복사하고자 하는 기존 배열과 동일한 크기의 새 배열을 생성 및 할당

2단계. copy[내가 넣고자 하는 인덱스] = origin[내가 복사하고자 하는 인덱스]

 

② arraycopy() 호출

[ 표현법 ]
System.arraycopy(원본배열식별자, 원본배열에서 복사를 시작할 인덱스, 복사본배열식별자, 복사본배열에서 복사가 시작될 인덱스, 복사할 개수);

먼저 copy의 배열 크기를 지정해주고, 

대입한다.

 

③ copyOf() 호출

[ 표현법 ]
복사본배열 = Arrays.copyOf(원본배열식별자, 복사할개수);

 

④ clone()

 [ 표현법 ] 복사본배열식별자 = 원본배열식별자.clone();