오늘은 자바 배열에 대해서 작성해 보려고 한다.
배열이란 동일한 자료가 순차적으로 저장된 것이라고 한다.
저장된 데이터를 가져오거나 넣기 위해 인덱스라는 번호를 매긴다.
인덱스는 0부터 시작하지만 길이는 1부터 시작한다 헷갈리지 않도록 해야한다!!
배열 만드는법
배열을 선언하는 방식은
자료형 뒤에 []을 쓰고 변수 이름과 배열 크기를 입력하면된다!
int[] nums = new int[5];
값을 정하고싶으면
nums[0] = 1;
nums[1] = 2;
.
.
num[4] = 5;
이렇게 입력을해도 되지만
우리는 반복문 for 문을 배웠으니 응용해보겠다!
for (int i = 0; i < array.length; i++) {
array[i] = i + 1;
}
array.length라는게 있다 여기서 length는 길이를 나타내는 메소드인데 for문에서 상당히 많이 쓰인다
해석을 해보자면
i는 0 부터 시작해서 배열의 길이인 5보다 작을때
array[0]에는 = 0+1이 들어가고
for문이 계속 반복이된다
array[1]에는 = 1+1
array[2]에는 = 2+1
array[3]에는 = 3+1
array[4]에는 = 4+1
이렇게 들어갈것이다
출력도 해보겠다!
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
배열의 인덱스는 0부터 시작이니깐
항상 0부터 시작해야 처음부터 값이 나온다.
값이 잘 나오는걸 볼수있다!!
또다른 방법
바로 길이를 알고 있을때이다
int[] array1 = {100, 200, 300};
이런 코드가 있다 위에서 본 코드는 길이를 설정했지만
여기서는 길이를 알기에 값을 넣었다.
이렇게 만든 배열은 복사도가능하다
int[] array2 = int[] array1;
이라는 새로운 배열을 만들면 동일한 값이 들어가게된다
System.out.println(array2[0]);
array2[0] = 999;
System.out.println(array2[0]);
System.out.println(array1[0]);
위와 같이 출력하면 어떤 결과가 나올까?
맨 위에서는 100이 나올테고
array2[0] 은 999가 나올테다.
다음 array1[0]은 100이 나와야하지 않을까?
왜 그런거지..?
배열은 기본 자료형과 다르게 값이 아닌 주소를 저장한다 그래서 우린 레퍼런스 타입이라고도 한다.
예를 들어 array1은 3의 길이를 가지고 있으니 아래 처럼 인덱스가 있다.
0 | 1 | 2 |
0에는 100이들어가고 1에는 200이 들어가고 2에는 300이 들어가지만
사실 여기에는 메모리의 주소가 저장되있다.
System.out.println(array1);
System.out.println(array2);
실제로 이렇게 출력해보면 동일한 값이 출력되는걸 알수있다
우리는 배열의 주소를 복사한것이다.
이런 복사를 얕은 복사 라고도 한다
얕은 복사는 복사된 배열이나 원본배열이 변경될 때 서로 간의 값이 같이 변경된다
원래 배열의 주솟값을 가져왔기때문에 array2의 값을 바꾸더라도 array1의 값도 바뀐다.
얕은 복사의 반대인
깊은 복사도있다!
깊은 복사는 복사된 배열이나 원본배열이 변경될 때 서로 간의 값은 바뀌지 않는다!
int[] a = { 1, 2, 3, 4 };
int[] b = a.clone();
깊은 복사를 쉽게하는 메서드가 존재합니다.
위 처럼 a를 복사해서 b를 만들면
b값을 바꿔도 a의 값은 변하지 않습니다!
배열은 정말 중요한 부분이라 완벽히 이해 될때까지 열심히 공부해야겠습니다ㅜㅜ
'Java' 카테고리의 다른 글
자바 오버로딩, 생성자 (0) | 2024.04.13 |
---|---|
자바 이차원배열 (2) | 2024.01.25 |
자바 완전수 구하기. (0) | 2024.01.09 |
자바 2438 별찍기.. (0) | 2024.01.09 |
자바 백준 2480번 (0) | 2024.01.08 |