[Java] 배열

2024. 8. 4. 10:11Java/참조타입

배열 타입

배열은 연속된 공간에 값을 나열시키고 각 값에 인덱스를 부여놓은 자료구조이다. 배열은 다음과 같은 특징을 가진다.

 

1. 배열은 같은 타입의 값만 관리한다. 

2. 배열의 길이는 늘리거나 줄일 수 없다. 

 

배열 변수 선언

배열 변수 선언은 '타입[] 변수' 혹은 '타입 변수[]' 형태로 작성할 수 있다. 배열도 객체이기 때문에 배열 변수는 참조 변수이다. 참조할 배열이 없다면 null로 초기할 수 있다. 

 

값 목록으로 배열 생성

배열에 저장될 값의 목록이 있으면 다음과 같이 간단하게 배열을 생성할 수 있다. 

타입[] 변수 = {0, 1, 2, 3, 4 ...};

 

단, 배열 변수를 미리 선언한 후에는 값 목록을 변수에 대입할 수 없다. 

타입[] 변수;
변수 = {1,2,3,4,5 ... } //컴파일 에러

 

new 연산자로 배열 생성

값의 목록은 없더라도 향후 값을 저장할 목적으로 배열을 미리 생성할 수 있다. 이 때 new 연산자를 사용한다. 

타입[] 변수 = new 타입[길이];

 

아래는 new연산자로 배열을 생성하였을 때의 배열 타입 별 기본값이다. String 배열은 모두 null로 초기화된다. 

 

배열 길이

배열의 길이는 배열에 저장할 수 있는 항목의 수를 말한다. 코드에서 배열의 길이를 얻으려면 다음과 같이 행하면 된다. 

배열변수.length;

 

참고로 값을 읽기만 가능하고 값 변경은 불가능하다. 

 

다차원배열

배열은 다른 배열이 대입될 수 있는데 이를 다차원 배열이라고 한다. 

위 그림에서 값1, 값3, 값6은 각각 변수[0][0][0] , 변수[0][1][0], 변수[1][0][1]로 읽는다. 

 

값 목록으로 다차원 배열을 생성사려면 배열 변수 선언 시 타입 뒤에 대괄호를 차원의 수만큼 붙이고 값 목록도 차원의 수만큼 중괄호를 중첩시킨다. 설명은 어렵지만 그림을 보면 이해하기 쉽다. 

 

new 연산자로 다차원 배열 생성

new 연산자로 다차원 배열을 생성하려면 변수 선언 시 타입 뒤에 대괄호를 차원의 수만큼 붙이고, new 타입 뒤에도 차원의 수만큼 대괄호를 작성하면 된다. 

타입[][] 변수 = new 타입[1차원수][2차원수];

 

객체를 참조하는 배열

참조 타입 배열은 각 항목에 객체의 번지를 저장한다. 

    public static void main(String[] args) {
      String[] strArray = new String[3];
      strArray[0] = "Java";
      strArray[1] = "C++";
      strArray[2] = "C#";
    }

 

배열 복사

배열은 한 번 생성하면 길이를 변경할 수 없다. 더 많은 저장 공간이 필요하면 배열을 새로 만들고 이전 배열로부터 항목을 복사해야한다. 

 

복사를 하기 위해서는 반복문을 사용하는 방버도 있지만, System.arraycopy()를 이용하면 배열 복사를 쉽게 할 수 있다. 

    public static void main(String[] args) {
      String[] oldStrArray = { "java", "array", "copy"};
      String[] newStrArray = new String[5];
      
      System.arraycopy(oldStrArray, 0, newStrArray, 0, oldStrArray.length);
    }

 

 

배열 항목 반복을 위한 향상된 for문

카운터 변수와 증감식이 없이 항목의 개수만큼 반복하는 방식이다. 

    public static void main(String[] args) {
      int[] scores = {95,71,84,93,87};
      int sum = 0;
      for(int score : scores){
        sum += score;
      }
      System.out.println("점수 총합 = " + sum);
    }

 

*간단하게 Arrays.toString(배열이름) 메서드를 이용해서 배열을 출력하는 방법도 있다. 

 

Array 클래스

Array클래스는 배열을 다루는데 유용한 메서드를 제공한다. 

toString() 배열의 모든 요소를 문자열로 출력한다. 
deepToString() N차원 이상의 배열의 모든 요소를 출력한다. 
equals() 두 배열에 저장된 모든 요소를 비교하여 true false를 반환한다. 
deepEquals() 다차원 배열을 비교한다. 
copyOf() 배열 전체를 복사한다. 
copyOfRange(복사할 배열, 시작 범위, 끝 범위)
copyOfRange(복사할 배열, 배열.length)
copyOfRange(복사할 배열, 끝 범위)
배열 전체 혹은 일부를 복사해서 새로운 배열을 만들어 반환한다. 끝 범위는 포함되지 않는다. 
sort() 배열을 정렬할 때 사용한다. 

 

'Java > 참조타입' 카테고리의 다른 글

[Java] 배열 연습문제 풀이  (0) 2024.08.04
[Java] 배열 연습문제  (0) 2024.08.04
[Java] 참조 타입, 문자열, 열거형  (0) 2024.08.03