포스트

[JAVA] 배열

배열이란?

  • 같은 타입(예: int)의 여러 변수를 하나로 묶음으로 다루는 것
  • 같은 타입의 많은 데이터를 저장할 때 배열을 사용하면 많은 데이터들을 손쉽게 다룰 수 있다.
1
int[] score = new int[5];

배열의 선언과 생성

선언 방법

  • 원하는 타입의 변수를 선언하고 변수나 타입의 배열임을 의미하는 대괄호[]를 붙인다.
선언방법선언 예시
타입[] 변수이름:int[] score;
String[] name;
타입 변수이름[]:int score[];
String name[];

변수의 생성

  • 배열을 선언했다면 다음으로 배열을 생성한다.
  • 배열을 선언하는 것은 단지 생성된 배열을 다루기 위한 참조변수를 위한 공간을 만드는 것이고, 배열 생성까지 해야 값을 저장할 수 있는 공간이 만들어진다.
  • 배열을 생성하기 위해서 연산자 ‘new’와 함께 배열의 타입과 길이를 지정해 주어야 한다.

    new 연산자란? 인스턴스(객체)를 생성해 주는 역할 메모리(Heap 영역)에 데이터를 저장할 공간을 할당 > 공간의 참조값을 객체에게 반환 > 생성자를 호출

1
2
타입[] 변수이름; //배열 선언 (배열을 다루기 위한 참조변수 선언)
변수이름 = new 타입[길이]; 배열 생성 (실제 저장공간을 생성)
1
2
3
4
5
6
7
// 길이가 5인 int배열 생성
int[] score; //int타입의 배열을 다루기 위한 참조변수 score 선언)
score = new int[5]; //int타입의 값 5개를 저장할 수 있는 배열 생성

// 위 코드를 아래와 같이 간략하게 배열을 선언과 생성을 동시에 할 수 있다
타입[] 변수이름 = new 타입[길이]; //배열의 선언과 생성 동시
int[] score = new int[5]; //길이가 5인 int배열

배열의 길이와 인덱스

  • 생성된 배열의 각 저장공간 ‘배열의 요소’라고 한다.
  • ‘배열이름[인덱스]’의 형식으로 배열의 요소에 접근한다.
    • 인덱스(index)는 배열의 요소마다 붙여진 일련번호
  • 즉, 배열이름의 인덱스번째의 요소에 접근할 때 사용되는데 인덱스는 1이 아닌 0부터 시작한다.
1
2
3
int[] arr = new int[5]
arr[3] = 100;
// arr의 4(0부터 시작하니 해당 인덱스 +1)번째 값에 100을 저장한다.

배열이름.length

  • 배열의 길이에 대한 정보를 가져올 때는 배열이름.length를 이용하면 배열이름의 길이를 가져올 수 있다.
1
2
3
int[] arr = new int[5];
System.out.print(arr.length);
// 출력 : 5

배열의 길이 변경하기

  • 한번 선언된 배열은 길이를 변경할 수 없다.
  • 아래와 같이 변경을 해야 한다.

    1. 더 큰 배열을 새로 생성한다.

    2. 기존 배열의 내용을 새로운 배열에 복사한다.

    해당 내용 참고

배열의 초기화

배열은 생성과 동시에 기본값으로 초기화되므로 따로 초기화를 할 필요 없지만, 원하는 값을 저장하려면 아래와 같이 각 요소마다 값을 저장해 줘야 한다.

1
2
3
int[] score = new int[2];
score[0] = 1;
score[1] = 10;

하지만 아래와 같이 배열을 간단히 초기화할 수 있다.

1
int[] score = new int[]{1, 10}; //배열의 생성과 초기화를 동시

괄호 안의 개수에 의해 배열의 길이가 자동으로 배열의 길이가 자동으로 결정되기 때문에 배열의 길이는 따로 적지 않아도 된다.

1
int[] score = {1. 10}; // new int[] 생략 가능

배열의 출력

배열에 저장된 값을 확인할 경우 다음과 같은 방법들로 출력이 가능하다.

1
2
3
4
5
6
7
8
9
int[] arr = {100, 90, 80, 70, 60};

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

// (2)
System.out.println(Arrays.toString(arr));
  • arr값을 바로 출력하면 ‘타입@주소’의 형식으로 출력된다.
  • 하지만 예외적으로 char배열은 println 메소드로 출력하면 그대로 출력이 된다.
    • println메소드가 char배열일 때만 동작하도록 작성되었기 때문
1
2
3
char[] charArr = {'a', 'b', 'c', 'd'};
System.out.println(charArr);
// abcdrk 출력

배열의 복사

이전 내용에서 다뤘던 배열의 길이 변경하기에 이은 배열의 복사하는 방법

  • 배열을 복사하는 방법은 두 가지가 있다.
1
2
3
4
5
int[] arr = new int[5];
int[] tmp = new int[arr.length * 2]; //기존 arr 배열 길이의 2배인 배열 생성
for (int i = 0; i < arr.length; i++)
    tmp[i] = arr[i]; //arr[i]의 값을 tmp[i]에 저장
arr = tmp; // 참조변수 arr이 새로운 배열을 가리키게 한다.

System.arraycopy()를 이용한 배열의 복사

arraycopy()를 사용하면 보다 간단하고 빠르게 배열의 복사가 가능하다.

1
2
3
4
System.arraycopy(num, 0, newNum, 0, num.length);

//설명
System.arraycopy(원본배열, 원본배열의 복사 시작 지점, 복사할 배열, 복사할 배열의 복사 시작 지점, 복사할 요소의 개수)

복사하려는 내용보다 여유 공간이 적을 경우 에러가 발생한다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.