본문 바로가기
JAVA/개념

[ 개념 ] 자바 배열(Array) 문법 사용법 복사

by hak0205 2023. 3. 4.
반응형

1. 배열(Array)이란?

자바 배열(Array)은 동일한 유형의 데이터 타입을 저장할 수 있는 데이터 구조입니다. Java의 배열은 셀로 나누어진 연속적인 메모리 블록을 포함하는 객체이며 각 블록은 배열의 동일한 데이터타입을 보유합니다.

 

2. 배열 사용 이유

자바 배열(Array)은 동일한 타입의 데이터타입을 사용하므로 메모리사용에 효율적입니다. 그리고  연속적인 메모리 위치에 저장되기 때문에 Linked List과 같은 다른 데이터구조보다 액세스가 빠릅니다. 또한 특정유형의 데이터 타입만 저장하므로 런타임에 유형오류가 발생할 위험을 줄입니다.

 

3. 배열 선언

   3.1 초기화가 포함된 선언 : Java에서 배열을 만드는 가장 일반적인 방법입니다.

                                              중괄호를 사용하여 배열을 선언하고 해당 값을 동시에 초기화할 수 있습니다.

int[] numbers = {1, 2, 3, 4, 5};

   

   3.2  선언 및 초기화 별도 : 배열을 선언한 다음 나중에 "new" 키워드를 사용하여 값을 초기화할 수도 있습니다.

int[] numbers;
numbers = new int[] {1, 2, 3, 4, 5};

 

    3.3 크기만 있는 선언 : 배열을 선언하고 크기만 지정할 수 있습니다.

                                        배열의 값은 기본값 (숫자의 경우 0, 객체의 경우 null)으로 초기화됩니다.

int[] numbers = new int[5];

   Java에서 배열을 만들면 인덱스를 사용하여 해당 요소에 액세스 할 수 있습니다 (0부터 시작).

 

    예를 들어, "숫자"라는 배열의 첫 번째 요소에 액세스 하려면 다음 코드를 사용합니다.

int firstNumber = numbers[0];

Java 배열은 크기가 고정되어 있으므로 일단 만들어지면 크기를 변경할 수 없습니다. 그러나 배열 내에서 개별 요소의 값을 변경할 수 있습니다.

 

4. 배열 반복문

  • for, 향상된 for문, while문 3가지가 있습니다. 사용법은 아래와 같습니다.
int[] array = {1, 2, 3, 4, 5};

// for문
for (int i = 0; i < array.length; i++) {
    System.out.println(array[i]);
}

// 향상된 for문
for (int item : array) {
    System.out.println(item);
}

// while문
int i = 0;
while (i < array.length) {
    System.out.println(array[i]);
    i++;
}

 

5. 배열 정렬

Java는 배열을 오름차순 또는 내림차순으로 정렬하는 기본 제공 방법을 제공합니다. Java에서 배열을 정렬하는 데 일반적으로 사용되는 두 가지 방법은 다음과 같습니다.

 

5.1. Arrays.sort()  : 전체 배열을 오름차순으로 정렬합니다

int[] numbers = {5, 2, 8, 3, 1};
Arrays.sort(numbers);  //{1, 2, 3, 5, 8}

5.2. Arrays.sort(array, Collections.reverseOrder()) : 전체배열을 내림차순으로 정렬합니다.

String[] names = {"John", "Alice", "Bob", "David", "Eve"};
Arrays.sort(names, Collections.reverseOrder());//{"John", "Eve", "David", "Bob", "Alice"}

 

6. 배열 검색

6.1. 선형 검색(Linear Search) : 이것은 찾고 있는 요소를 찾을 때까지 배열의 각 요소를 차례로 검사하는 간단한 검색 알고리즘입니다. 선형 검색의 구문은 다음과 같습니다.

int index = -1;
for (int i = 0; i < array.length; i++) {
    if (array[i] == searchElement) {
        index = i;
        break;
    }
}

 배열의 첫 번째 요소에서 시작하여 검색 요소를 찾을 때까지 각 요소를 확인합니다. 검색 요소가 발견되면 루프가 중지되고 검색 요소의 인덱스가 반환됩니다. 검색 요소를 찾을 수 없으면 배열이 끝날 때까지 루프가 계속되고 인덱스는 -1로 설정된 상태로 유지됩니다.

 

6.2. 이진 검색(Binary Search):  정렬된 배열에서 효율적인 검색 알고리즘입니다. 이진 검색의 구문은 다음과 같습니다: 

int index = Arrays.binarySearch(array, searchElement);

binarySearch메서드는 배열과 검색 요소를 매개 변수로 사용하고 배열에 있는 검색 요소의 인덱스를 반환합니다. 검색 요소를 찾을 수 없으면 메서드는 검색 요소의 삽입 지점을 나타내는 음수를 반환합니다

 

예를 들어 정렬된 정수 배열에서 요소를 검색하려면 다음 코드를 사용할 수 있습니다:

int[] numbers = {1, 2, 3, 4, 5};
int index = Arrays.binarySearch(numbers, 3);

이렇게 하면 배열에서 요소 3을 검색하고 인덱스인 2를 반환합니다.

 

이진 검색 방법은 정렬된 배열에서만 동작하므로 배열이 정렬되지 않은 경우 선형 검색 방법을 사용해야 합니다. 또한 이러한 두 가지 방법 모두 배열에 중복이 없다고 가정하고 사용해야 합니다.

 

7. 배열 복사

7.1. For 문 : 배열을 복사하는 가장 간단한 방법입니다.

int[] sourceArray = {1, 2, 3, 4, 5};
int[] destArray = new int[sourceArray.length];
for (int i = 0; i < sourceArray.length; i++) {
    destArray[i] = sourceArray[i];
}
//destArray[i] = {1, 2, 3, 4, 5}

 

sourceArray의 {1, 2, 3, 4, 5 }가 destArray로 복사되었습니다.

 

7.2. System.arraycopy() : 배열을 복사하는 데 사용할 수 있는 System 클래스의 내장 메서드입니다.

int[] sourceArray = {1, 2, 3, 4, 5};
int[] destArray = new int[sourceArray.length];
System.arraycopy(sourceArray, 0, destArray, 0, sourceArray.length); 
//              (Object src, int srcPos, Object dest, int destPos, int length)
/* Object src - 원본 배열
   int srcPos - 원본 배열의 복사 시작 위치
   Object dest - 복사할 배열
   int destPos - 복사할 배열의 복사 시작 위치
   int length - 복사할 요소의 개수 */
 
 System.out.println(Arrays.toString(destArray));  // [1, 2, 3, 4, 5]

sourceArray , sourceArray의 시작 인덱스, destArray, destArray의 시작 인덱스, sourceArray의 길이를 파라미터로 하여 sourceArray의 내용을 목적지 배열에 복사합니다.

 

7.3. Arrays.copyOf() : 배열을 복사하는 데 사용할 수 있는 Array 클래스의 기본 제공 메서드입니다. 

int[] sourceArray = {1, 2, 3, 4, 5};
int[] destArray = Arrays.copyOf(sourceArray, sourceArray.length);
//                             (Object src,  int length)
/* Object src - 원본 배열
   int length - 원본 배열에서 복사하고 싶은 요소들의 길이 */

System.out.println(Arrays.toString(destArray));  // [1, 2, 3, 4, 5]

Arrays.copyOf()와 System.arraycopy() 차이점

Arrays.copyOf()는 지정된 길이를 가진 기존 배열의 복사본인 새 배열을 만드는 더 간단하고 편리한 방법입니다.

더 직관적이고 새 배열도 생성이 가능합니다. 그리고  전부 복사하거나 복사 대상의 객체를 유지시킬 필요가 없을 때 사용을 추천합니다.

 

System.arraycopy()는 복사 길이를 명시해야 하거나, 객체를 유지하고자 할 때 사용 추천합니다. 또한, 기본의 배열의 일부만 덮었으이기 또는 clone() 보다 더 빠르길 원할 때는 사용합니다. System.arraycopy()는 새 배열을 생성하는 오버헤드를 피하기 때문에 일반적으로 Arrays.copyOf() 보다 빠릅니다.

 

이러한 모든 방법은 새 배열을 생성하고 원래 배열의 내용을 새 배열로 복사합니다. 새 배열의 내용을 수정할 경우 원래 배열에 영향을 주지 않으며, 그 반대의 경우도 마찬가지입니다.

 

 
 

배열이란 무엇인가 부터 배열복사방법까지 알아봤습니다

감사합니다.

 
 

 

 
반응형

댓글