-2차원 배열(+ 다차원)
앞서 포스팅한 배열은 1차원 배열로 1행 + n열을 가지는 배열이다.
2차원 배열은 n행 + n열을 생각하면 된다. 흔히 생각하는 표 모양을 떠올리면 될 것이다.
2차원 이상의 3차원부터는 x, y, z로 3차원(3D) 이렇게 생각을 하면 되는 데 사용할 일이 없을 것이고 혹시나 사용이 필요하다면 다른 블로그의 포스팅을 찾아보자...
*아직 저의 역량 밖입니다...
-사용 방법
-
int[][] num1 = new int[10][10]; int[][] num2 = {{1, 2, 3}, {4, 5, 6}};
- 위의 방식으로 선언과 초기화가 가능하다
- [10][10]으로 만들면 10행 10열이 생성이 되고
- 첫 번째 방법에서 첫번째 오는 대괄호에는 꼭 길이를 설정해줘야 하지만 두 번째[]부터는 값을 따로따로 초기화해줄 수 있다.
- 만약 num1 [1][8] 이렇게 호출을 한다면 2번째 행 9번째 칸의 값이 출력이 될 것이다.
- 행과 열의 개념만 이해를 한다면 사용을 하는 것은 1차원 배열과 동일하다
- 단 주의할 점은 num1의 길이는 첫 번째 []의 길이가 나오고 두 번째[]의 길이 값을 추출하고 싶다면 먼저 행을 선택하고 그 행의 길이를 찾으면 된다
- 예를 들어 2행의 길이를 알고 싶다면
- num1 [1]. length라고 해야 한다.
- 첫 번째 방법으로 초기화를 한다면 모든 행의 길이가 같겠지만 두 번째 방법으로 초기화를 할 경우 각 행의 길이가 달라질 수 있다.
-배열 복사
만약 배열의 크기를 더 키우기 위해 크기가 더 큰 배열을 만들고 그 배열에 복사를 해서 값을 넣어줄 때 사용하는 방법이 두 가지 있다.
int[] arr1 = new int[5];
int[] arr2 = new int[10];
for(int i = 0; i < arr1.length; i++) {
arr2[i] = arr1[i];
}
위와 같이 코드를 작성해주면 arr1의 배열이 arr2의 배열에 0번 index부터 저장이 되며 남은 자리는 타입에 맞게 초기화가 되어 위의 코드 같은 경우 0으로 4번 index~9번 index까지 저장이 된다.
하지만 항상 for문을 작성해주고 길이를 구하고.... 귀찮다
프로그래머는 귀찮은걸 싫어하고 코드는 더 간결하고 보기 쉬워야 한다
그렇기 때문에 사용할 수 있는 다른 방법이 있다.
int[] arr1 = new int[5];
int[] arr2 = new int[10];
System.arraycopy(arr1, 0, arr2, 0, arr.length);
이름 그대로 배열을 복사해주는 함수다
첫 번째, 두 번째 인자로 원본 배열과, 시작할 위치
세 번째, 네 번째 인자로 새로운 배열과, 시작할 위치
다섯 번째 인자로 복사를 할 개수를 입력해주면 간편하게 복사가 가능하다
그렇다면 복사가 잘 되었는지 확인을 해보자
for(int i = 0; i < arr2.length; i++) {
System.out.print(arr2[i]);
}
실행해 보면 배열 안의 코드가 잘 나오는 걸 확인할 수 있다.
-향상된 for문
for문을 작성할 때면 항상 써줘야 할 것들이 너무 많다.
조건, 초기화 변수, 증감식... 배열을 단순히 순서대로 출력을 하기 위해서 많은 코드를 써주는 건 힘들다
그때 향상된 for문은 사용해서 행복해질 수 있다.
for(int i : arr2) {
System.out.print(i);
}
복사에서 봤던 for문과 정확하게 일치하는 결과를 얻을 수 있다.
- 사용법
- 소괄호 안에 배열과 같은 타입의 변수를 하나 선언해준다.
- 그 뒤 콜론(:)을 입력하고 출력하고자 하는 배열을 넣어준다
- 실행을 하면 우측에 입력해준 배열의 0번 index부터 끝까지 for문이 한번 돌 때마다 차례대로 i에 들어가고 실행문에서 i를 출력하면 순서대로 나오는 것을 볼 수 있다.
- 배열의 값을 sum에 모두 더할 때, 배열을 순서대로 출력해야 할 때 사용하면 좋다.
- 하지만 index를 사용해서 조건을 주고 출력을 해야 한다면 기본 for문을 사용하는 것이 좋다.
'Back-end > JAVA' 카테고리의 다른 글
15. Class - 객체와 클래스 (0) | 2021.06.22 |
---|---|
14. 참조 타입(Reference Type) - Enumeration(열거타입) (0) | 2021.06.21 |
12. 참조 타입(Reference Type) - Array 기본 (0) | 2021.06.18 |
11. 참조 타입(Reference Type) - String (0) | 2021.06.17 |
10. 참조 타입(Reference Type) - 개념 (0) | 2021.06.17 |