Java/배열

[Java]배열에 값 추가하는 방법

DevStory 2022. 8. 22.

배열에 값 추가하는 방법

Java에서 배열은 고정 크기의 데이터입니다. Java는 배열의 크기를 변경하거나 배열에 값을 추가할 수 있는 메서드를 제공하지 않습니다. 따라서, 배열의 크기가 설정되면 변경할 수 없습니다.

 

하지만, 크기가 다른 새로운 배열을 할당하거나 List로 변환하는 작업을 수행하여 배열에 값이 추가된 것처럼 소스 코드를 구현할 수 있습니다.

 

이번 포스팅은 배열이 아닌 다양한 클래스에서 제공하는 메서드를 사용하여 배열에 값을 추가하는 몇 가지 방법을 소개합니다.


방법 1. 반복문

가장 심플한 방법으로 반복문을 사용합니다.

 

[추가 방법]

순서 1. (원본 배열의 크기 + 1)를 크기로 가지는 새로운 배열을 생성합니다.

순서 2. 새로운 배열에 원본 배열의 값을 순차적으로 할당합니다.

순서 3. 새로운 배열의 마지막 위치에 추가하려는 값을 할당합니다.

순서 4. 새로운 배열을 반환합니다.

 

다음 예제는 String 타입의 배열에서 문자열 "EE"를 추가합니다.

class Program
{
  private static String[] Add(String[] originArray, String Val) {
    // 순서 1. (원본 배열의 크기 + 1)를 크기를 가지는 배열을 생성
    String[] newArray = new String[originArray.length + 1];

    // 순서 2. 새로운 배열에 값을 순차적으로 할당
    for(int index = 0; index < originArray.length; index++) {
      newArray[index] = originArray[index];
    }

    // 순서 3. 새로운 배열의 마지막 위치에 추가하려는 값을 할당
    newArray[originArray.length] = Val;

    // 순서 4. 새로운 배열을 반환
    return newArray;
  }

  public static void main(String args[]) {
    String[] strArray = { "AA", "BB", "CC", "DD" };

    System.out.println("\"EE\" 추가 전: " + Arrays.toString(strArray));
    strArray = Add(strArray, "EE");
    System.out.println("\"EE\" 추가 후: " + Arrays.toString(strArray));
  }
}

[실행 결과]

"EE" 추가 전: [AA, BB, CC, DD]
"EE" 추가 후: [AA, BB, CC, DD, EE]

참고로 Java에서 제네릭 타입의 배열을 생성할 수 없으므로 데이터 타입별로 Add() 메서드를 정의해야 합니다.


방법 2. List로 변환

두 번째 방법으로 배열을 List로 변환합니다. List는 크기가 동적으로 설정되므로 배열보다 유연하게 동작합니다.

 

[추가 방법]

순서 1. 배열을 List로 변환합니다.

순서 2. List의 Add() 메서드를 호출하여 추가하려는 값을 할당합니다.

순서 3. List를 배열로 변환 후 반환합니다.

 

다음 예제는 String 타입의 배열에서 문자열 "EE"를 추가합니다.

class Program
{
  private static String[] Add(String[] originArray, String Val) {
    // 순서 1. 배열을 List로 변환
    List<String> newList = new ArrayList<>(Arrays.asList(originArray));

    // 순서 2. List의 Add() 메서드를 호출하여 새로운 값을 할당
    newList.add(Val);

    // 순서 3. List를 배열을 변환 후 반환
    return newList.toArray(new String[0]);
  }

  public static void main(String args[]) {
    String[] strArray = { "AA", "BB", "CC", "DD" };

    System.out.println("\"EE\" 추가 전: " + Arrays.toString(strArray));
    strArray = Add(strArray, "EE");
    System.out.println("\"EE\" 추가 후: " + Arrays.toString(strArray));
  }
}

[실행 결과]

"EE" 추가 전: [AA, BB, CC, DD]
"EE" 추가 후: [AA, BB, CC, DD, EE]

List를 배열로 변환 후 반환하는 과정에서 toArray() 메서드의 매개변수로 데이터 타입의 새로운 배열을 전달해야 합니다. 따라서, List를 사용하는 방법도 제네릭 타입을 사용할 수 없습니다.


방법 3. System 클래스의 arraycopy 메서드

세 번째 방법으로 System 클래스에서 제공하는 arraycopy() 메서드를 사용합니다.

 

[추가 방법]

순서 1. (원본 배열의 크기 + 1)를 크기로 가지는 새로운 배열을 생성합니다.

순서 2. arraycopy() 메서드를 사용하여 원본 배열의 값을 새로운 배열에 복사합니다.

순서 3. 새로운 배열의 마지막 위치에 추가하려는 값을 할당합니다.

순서 4. 새로운 배열을 반환합니다.

 

다음 예제는 String 타입의 배열에서 문자열 "EE"를 추가합니다.

class Program
{
  private static String[] Add(String[] originArray, String Val) {
    // 순서 1. (원본 배열의 크기 + 1)를 크기를 가지는 배열을 생성
    String[] newArray = new String[originArray.length + 1];

    // 순서 2. arraycopy() 메서드를 사용하여 복사
    System.arraycopy(originArray, 0, newArray, 0, originArray.length);

    // 순서 3. 새로운 배열의 마지막 위치에 추가하려는 값을 할당
    newArray[originArray.length] = Val;

    // 순서 4. 새로운 배열을 반환
    return newArray;
  }

  public static void main(String args[]) {
    String[] strArray = { "AA", "BB", "CC", "DD" };

    System.out.println("\"EE\" 추가 전: " + Arrays.toString(strArray));
    strArray = Add(strArray, "EE");
    System.out.println("\"EE\" 추가 후: " + Arrays.toString(strArray));
  }
}

[실행 결과]

"EE" 추가 전: [AA, BB, CC, DD]
"EE" 추가 후: [AA, BB, CC, DD, EE]

방법 4. Arrays 클래스의 copyOf 메서드

마지막 방법으로 Arrays 클래스의 copyOf() 메서드를 사용합니다.

 

[추가 방법]

순서 1. copyOf() 메서드를 사용하여 원본 배열의 값을 복사하고 새로운 배열의 크기를 (원본 배열의 크기 + 1)로 설정합니다.

순서 2. 새로운 배열의 마지막 위치에 추가하려는 값을 할당합니다.

순서 3. 새로운 배열을 반환합니다.

 

다음 예제는 String 타입의 배열에서 문자열 "EE"를 추가합니다.

class Program
{
  private static <T> T[] Add(T[] originArray, T Val) {
    // 순서 1. copyOf() 메서드를 사용하여 복사
    T[] newArray = Arrays.copyOf(originArray, originArray.length + 1);

    // 순서 2. 새로운 배열의 마지막 위치에 추가하려는 값을 할당
    newArray[originArray.length] = Val;

    // 순서 3. 새로운 배열을 반환
    return newArray;
  }

  public static void main(String args[]) {
    String[] strArray = { "AA", "BB", "CC", "DD" };

    System.out.println("\"EE\" 추가 전: " + Arrays.toString(strArray));
    strArray = Add(strArray, "EE");
    System.out.println("\"EE\" 추가 후: " + Arrays.toString(strArray));
  }
}

[실행 결과]

"EE" 추가 전: [AA, BB, CC, DD]
"EE" 추가 후: [AA, BB, CC, DD, EE]
반응형

댓글