배열
: 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것
앞서 배운 변수는 1개의 데이터만 저장할 수 있었다. 하지만 데이터의 수가 많아지면 변수 하나하나 관리가 효율적이지 못하다.
따라서 같은 자료형의 여러 변수를 하나의 묶음으로 다룰 수 있는데 그것이 바로 배열
이다.
배열 선언
배열을 선언하는 것은 단지 생성된 배열을 다루기 위한 공간이 만들어지는 것 뿐이다.
배열 선언 방법은 다음과 같다.
위 방법은 배열을 선언만 한 것이므로 생성을 해줘야 공간이 만들어지고 사용할 수 있다.
배열을 생성하는 방법을 알아보자.
배열 선언 및 생성
방법 1
: 배열을 선언 및 생성을 하였지만 초기화를 해주지 않아 0으로 자동 초기화된다.
방법 2
: 배열을 선언 및 생성을하고 각각을 1,2,3,4,5로 초기화된다.
방법 3
: 방법 2와 마찬가지지만 표현 방식만 다르다.
방법 1
for문을 통해 초기값, 조건식, 증감식을 직접 설정하여 배열의 길이만큼 출력해준다.
방법 2
방법 1과 같이 for문을 사용하지만 초기값, 조건식, 증감식을 설정해주지 않고
int s : (배열)
로 배열의 크기만큼 프로그램에게 반복문을 시킬 수 있다.
방법 3
Arrays.toString(배열)
로 배열의 있는 모든 값을 출력해줄 수 있다.
2차원 배열인 경우 Arrays.toString 사용법
위 그림과 같이 array2에 array1 배열을 복사할 수 있다.
여기서 array2의 3번째 값을 100으로 바꿔보면 결과는 다음과 같이 나온다.
뭔가 이상하지 않은가? array2의 값만 바꿨을 뿐인데 array1값이 같이 바뀌니 말이다.
이는 배열이 얕은 복사를 했기 때문이다.
얕은 복사
란 복사된 배열이나 원본 배열이 변경될 때 서로의 값이 변경되는 복사를 말한다.
한 배열을 A,B가 동시에 가리키고 있으므로 둘 중 하나의 값만 바뀌어도 A,B 값이 둘 다 바뀌는 것을 알 수 있다.
이와 반대로 깊은 복사가 있다.
깊은 복사
는 복사된 배열이나 원본 배열이 변경될 때 서로의 값이 바뀌지 않는 복사를 말한다.
그렇다면 깊은 복사는 어떻게 할까?
방법 1
array2 배열을 array1 배열의 길이만큼 공간을 할당해 준 후 반복문을 통해 일일이 값을 하나하나 대입해주는 방법이다.
방법 2
Arrays.copyOf(원본 배열, 복사할 길이) 를 통해 깊은 복사를 할 수 있다.
Arrays.copyOf의 첫 번째 값은 복사할 배열, 두 번째 값은 복사할 배열의 길이를 입력해준다.
방법 3
세 번째 방법은 가장 많이 사용하는 방법으로
clone 함수
를 사용하는 방법이다.
array2 = array1.clone()으로 array1 배열을 array2 배열에 그대로 복사할 수 있다.