오늘은 배열의 첫시간이다.
배열은 변수가 줄줄이 나열 되어 있는데 예를 들어 int int int 이런 식으로 같은 자료형의 변수를 하나의 묶음으로 만드는 것이다.
배열을 이해하기 위해선 변수와 비교하면서 보는게 좋아 변수와 같이 얘기해보자
변수 : 메모리에 값을 저장 할 수 있는 공간.
변수 선언 : 메모리에 값을 저장 할 수 있는 공간을 할당.
배열 선언 : 메모리에 배열을 참조하는 변수 공간을 만듦. ( 값 직접 저장 불가, 배얄의 주소를 저장
배열 할당 : 실제 값을 저장 할 수 있는 배열을 메모리에 생성.
위 사진처럼 int를 배열로 작성하게 되면 메모리 구조는 저런 모양이 되고 arr를 불러서 사용하게 되면 Heap 영역에서 주소값(0x1234)를 가져와 사용하게 된다. 추가로 배열 할당할때 배열 크기를 [4]라고 입력했는데 [0]부터 arr[3]으로 되어있는건 인덱스 번호는 0부터 시작하게 되어있기 때문이다.
arr[0] = 1;
arr[1] = 2;
for(int i = 0; i < arr.length; i++) {
arr[i] = i;
}
인덱스가 순차적으로 증가함에 따라 초기화할 리터럴 값이 규칙적이라면 반복문을 통해 초기화가 가능함.
int[] arr = {1, 2, 3, 4, 5};
int[] arr = new int[] {1, 2, 3, 4, 5};
String fruit[] = {"사과", "포도", "참외"};
배열 복사에는 두가지 종류가 있는데 얕은 복사 (shallow copy)와 깊은 복사 (deepcopy)가 있다.
얕은 복사란 주소를 복사해서 서로 다른 변수가 하나의 배열 또는 객체를 참조하는 상태를 만드는 복사 방법이다.
얕은 복사를 할때 주의할 점은 복사 후 값을 수정하면 원본에 있는 값도 같이 수정되니 주의해야한다.
깊은 복사는 같은 자료형이 새로운 배열을 만들어서 기존 배열의 데이터를 모두 복사하는 방법이다.
얕은 복사 (shallow copy)와 차이점은 새로운 배열을 만들어! 기존 배열의 데이터를 모두 복사해 가져오기 때문에 배열의 데이터의 값을 수정해도 원본 배열은 값이 변하지 않는게 차이점이다.
글이 많은 도움이 되었습니다, 감사합니다.