[JAVA] 정적배열과 동적배열

은현수·2024년 6월 8일

Intro

Java로 코딩테스트 공부를 조금씩 하던 도중 배열을 계속 사용하게 됐는데, 정적 배열과 동적 배열을 자꾸 사용하다보니 헷갈리는 부분이 많아 정리 해보고자 한다.

복잡한 이론보다는 실제로 바로 사용할 수 있게 함수 위주로 정리 할 예정이다.

정적배열

정적 배열은 크기가 고정된 배열로, 생성 시 배열의 크기를 지정해야 하며, 이후에는 크기를 변경할 수 없다.

  1. 크기가 고정됨: 배열을 생성할 때 지정된 크기를 변경할 수 없다.
  2. 빠른 액세스: 인덱스를 사용하여 배열 요소에 빠르게 접근할 수 있다.
  3. 메모리 사용: 배열의 크기가 고정되어 있으므로, 미리 할당된 메모리 공간을 사용한다.

선언 방법

int[] myArray = new int[5]; 

크기가 5인 정수형 배열을 생성

사용 함수 / 메소드

// 배열에 값 할당
myArray[0] = 10;
myArray[1] = 20;
myArray[2] = 30;
myArray[3] = 40;
myArray[4] = 50;

// 배열 값 읽기
int value = myArray[2]; // value에는 30이 저장됨

// 배열 크기 확인
int size = myArray.length; // size에는 배열의 크기인 5가 저장됨

// 오름차순 정렬
Arrays.sort(myArray);

// 내림차순 정렬
Arrays.sort(myArray, Collections.reverseOrder());

// 배열 값 교체
myArray[0] = 4;

정적배열에서 동적배열로의 변환 코드

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {

        // 정적 배열
        int[] staticArray = { 1, 2, 3, 4, 5 };

        // 동적 배열로 변환
        ArrayList<Integer> dynamicList = new ArrayList<>();
        for (int num : staticArray) {
            dynamicList.add(num);
        }

        System.out.print(dynamicList);
        //[1, 2, 3, 4, 5]
    }
}

코드 예시

public class StaticArrayExample {
    public static void main(String[] args) {
        // 크기가 5인 정적 배열 선언
        int[] staticArray = new int[5];

        // 배열에 값 할당
        staticArray[0] = 10;
        staticArray[1] = 20;
        staticArray[2] = 30;
        staticArray[3] = 40;
        staticArray[4] = 50;

        // 배열의 값 출력
        for (int i = 0; i < staticArray.length; i++) {
            System.out.println("Element at index " + i + ": " + staticArray[i]);
        }
    }
}

동적배열

동적 배열은 크기가 변할 수 있는 배열로, ArrayList와 같은 컬렉션 클래스를 사용하여 구현할 수 있다. 필요에 따라 요소를 추가하거나 제거할 수 있다.

크기 변경 가능: 배열의 크기를 런타임 시에 변경할 수 있다.
요소 추가/제거: add(), remove() 메서드를 사용하여 요소를 추가하거나 제거할 수 있다.
자동 리사이징: 내부적으로 크기가 자동으로 조정된다.

선언 방법

ArrayList<Integer> list = new ArrayList<>();

<> 안에는 참조 타입을 선언할 수 있다. Integer, String 등 첫글자는 대문자로 시작해야한다.
초기 크기는 10이다.

사용 함수 / 메소드

arrayList. add();   // ArratList에 원소 추가
arrayList. remove(); // 괄호에 들어있는 인덱스 번호의 원소를 지운다. // 삭제한 데이터를 반환한다. 
// 위치, 객체 둘다 매개변수로 줄 수 있다. 
arrayList. clear();  // 모든 데이터를 삭제한다. 
arrayList. get(); // 괄호에 들어있는 인덱스 번호의 원소를 반환한다.
arrayList. size(); // ArratList의 크기를 반환한다.
Collections.sort(arrayList); // 오름차순 정렬
Collections.sort(arrayList, Collections.reverseOrder()); // 내림차순 정렬
Integer[] array = arrayList.toArray(new Integer[0]); // ArrayList를 배열로 변환

코드 예시

import java.util.ArrayList;

public class DynamicArrayExample {
    public static void main(String[] args) {
        // 동적 배열(ArrayList) 선언
        ArrayList<Integer> dynamicArray = new ArrayList<>();

        // 배열에 값 추가
        dynamicArray.add(10);
        dynamicArray.add(20);
        dynamicArray.add(30);
        dynamicArray.add(40);
        dynamicArray.add(50);

        // 배열의 값 출력
        for (int i = 0; i < dynamicArray.size(); i++) {
            System.out.println("Element at index " + i + ": " + dynamicArray.get(i));
        }

        // 값 제거
        dynamicArray.remove(2); // 인덱스 2의 값 제거

        // 배열의 값 출력 (변경 후)
        System.out.println("After removal:");
        for (int i = 0; i < dynamicArray.size(); i++) {
            System.out.println("Element at index " + i + ": " + dynamicArray.get(i));
        }
    }
}

결론

특징정적 배열 (Static Array)동적 배열 (Dynamic Array)
크기고정가변
요소 추가/제거불가능 (고정 크기 내에서만 가능)가능 (메서드를 통해 추가/제거)
선언 방식int[] arr = new int[5];ArrayList<Integer> list = new ArrayList<>();
성능메모리 및 접근 속도에서 더 효율적요소 추가/제거 시 오버헤드 발생 가능

참고 사이트

https://what-am-i.tistory.com/63
https://zks145.tistory.com/m/62
ChatGPT

profile
백엔드 개발자

0개의 댓글