-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문을 사용하는 것이 좋다.

+ Recent posts