3 minute read

이번 포스트에서는 JAVA 의 배열에 대해서 알아보도록 하겠습니다.
C 를 배우셨다면 JAVA 의 배열을 보셨을 때 “크게 다른게 없는데?” 라고 느끼셨을 겁니다. 그래도 여러가지 부분에서 다른 점이 있고, JAVA 의 경우에는 다른 데이터 구조들이 잘 구현되어 있기 때문에 배열은 그렇게 자주 사용되진 않을 겁니다.
그래서 이번엔 배열에 대해서 간략하게 알아보도록 하겠으며 배열의 출력을 위해서 반복문이 필요하기 때문에 간접적으로 반복문도 사용해 보도록 하겠습니다.

배열

지금까지 숫자, 문자, 문자열 등 다양한 자료형을 알아보았습니다. 그리고 우리는 자료형을 알아보면서 하나의 변수만을 가지로 진행을 했습니다. 하지만 어떤 작업을 처리하려고 한다면 반복적인 실행이 필수지만 이렇게 변수 하나씩만 가지고선 처리가 힘듭니다.
이 때 사용하는 것이 타입이 동일한 여러 변수들을 한 번에 담을 수 있는 배열입니다. 그리고 배열을 사용하고자 한다면 반복문의 사용 또한 필수가 됩니다.
그렇다면 지금부터 JAVA 에서의 배열과 그 사용 방법에 대해서 알아보도록 하겠습니다.

배열이란?

배열은 같은 타입의 데이터를 연속된 공간에 나열하고, 각 데이터에 인덱스(index)를 부여해놓은 자료구조입니다.

배열의 특징

  1. 배열은 같은 타입의 데이터만 저장할 수 있습니다.
    • 만약 다른 타입의 값을 저장하려고 하면 타입 불일치(Type mismatch) 컴파일 에러가 발생합니다.
  2. 한 번 생성된 배열은 길이를 늘리거나 줄일 수 없습니다.

배열 선언

배열을 사용하기 위해서는 배열 변수를 선언해주어야 합니다. JAVA 에서의 배열 변수 선언은 다음 두 가지 형식을 사용합니다.

형식 1

타입[] 변수;

예시
int[] intArray;
double[] doubleArray;
String[] strArray;

형식 2

타입 변수[];

예시
int intArray[];
double doubleArray[];
String strArray[];

배열 변수는 참조 변수에 속합니다. 배열도 객체이므로 힙(heap) 영역에 생성되고 배열 변수는 힙 영역의 배열 객체를 참조하게 됩니다. 만일 참조할 배열 객체가 없다면 배열 변수는 null 값으로 초기화될 수 있습니다.
여기서 말한 heap 에 대해서는 추후에 자세히 알아보도록 하겠으며 현재는 이러한 개념이 있다고 생각하시면 될 것 같습니다.

타입[] 변수 = null;

만약 배열 변수가 null 값을 가진 상태에서 변수[인덱스]로 값을 읽거나 저장하게 되면 NPE(NullPointerException) 이 발생합니다. 배열을 생성하고 배열 변수가 참조하는 상태에서 값을 저장하거나 읽어야 합니다.
또한 이렇게 java 에서는 null 처리를 해주지 않으면 프로그램을 운영 중인 서비스에서 NPE 에러가 굉장히 자주 발생하게 되고 이는 정상적은 프로그램의 운영이 되지 않는 주요한 원인이 되기 때문에 배열을 사용하면서 부터 우리는 NPE 가 발생하지 않도록 주의해야 합니다.

배열 생성

배열을 생성하고 객체를 초기화 하는 방법으로는 값 목록을 이용하거나 new 연산자를 이용하는 방법이 있습니다.

값 목록으로 배열 생성

값의 목록이 있다면 아래와 같이 간단하게 배열을 생성할 수 있습니다.

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

중괄호 {} 는 주어진 값들을 항목으로 가지는 배열 객체를 힙에 생성하고, 배열 객체의 번지수를 반환합니다. 배열 변수는 반환된 번지를 저장함으로써 참조가 이루어집니다.
예시를 통해 알아보도록 하겠습니다.

int[] intArr = {1, 2, 3};

이렇게 생성된 배열에서 1의 값을 가져오기 위해서는 배열 변수에 index (변수명[index]) 를 이용해 값을 가져 올 수 있으며, 배열의 구성요소의 값을 변경하고 싶다면 대입 연산자를 사용합니다. 아래 예시를 통해 구체적으로 알아보도록 하겠습니다.

int[] intArr = {1, 2, 3};

System.out.println(intArr[0]); // 1 출력

intArr[0] = 10;

System.out.println(intArr[0]); // 10 출력

값 목록으로 배열 객체를 생성할 때의 주의점으로 배열 변수를 이미 선언한 후에는 다른 실행문에서 중괄호를 사용한 배열 생성이 허용되지 않습니다.

타입[] 변수;
변수 = {값0, 값1, 값2, ...}; // 컴파일 에러 발생 (java: illegal start of expression 에러 발생)

new 연산자로 배열 생성

값의 목록을 가지고 있지 않지만, 향후 값들을 저장할 배열을 미리 만들고 싶다면 new 연산자를 이용해 아래와 같이 배열 객체를 생성할 수 있습니다. 예시를 통해 자세히 알아보도록 하겠습니다.

타입[] 변수 = new 타입[길이]; // 타입은 같아야 합니다.

길이는 배열이 저장할 수 있는 값의 개수를 말합니다. JAVA 에서 지원하는 배열의 최대 크기는 Integer 의 최대 크기인 2,147,483,645 입니다. 사용하는 PC, IDE 에서 사용하는 메모리에 따라 더 작을 순 있지만 메모리 제한이 없을 경우에는 2,147,483,645 인 것을 확인할 수 있습니다. 이와 관련해서는 https://recordsoflife.tistory.com/1257 를 한 번 참조해 보시길 바랍니다. 예시를 통해 자세히 알아보도록 하겠습니다.

int[] intArr = new int[5];

new 연산자로 배열을 처음 생성할 경우 배열은 자동적으로 기본값으로 초기화됩니다. 이와 관련해서 JAVA 에서 타입별로 초기화 해주느 기본 값을 다음 표로 정리해 보았습니다.

타입 초기화값
byte[] 0
char[] \000
short[] 0
int[] 0
long[] 0L
float[] 0.0F
double[] 0.0
클래스[] null
인터페이스[] null

배열 길이

JAVA 에서는 배열의 길이를 구하기 위해 배열 변수들에 공통적으로 length 라는 메소드를 이용해 배열의 길이를 구할 수 있게 제공해 주고 있습니다.
그 방법에 대해 예시를 보며 알아보도록 하겠습니다.


int[] intArr = new int[5];

System.out.println(intArr.length); // 5가 출력된다.

마치며

JAVA 의 배열에 대해서 알아보았습니다. 사실 JAVA 에서는 굳이 크기를 제공해 주지 않아도 요소를 담을 수 있도록 하는 자료구조인 ArrayList 를 제공해 주고 있어서 사이즈가 고정된 경우가 아니라면 배열은 ArrayList 보다 사용 빈도가 적으리라 생각됩니다. 하지만 그럼에도 배열이라는 개념 자체는 굉장히 중요하고 프로그래밍의 기본이 되는 개념이기 때문에 다루어 보았습니다.
이번에도 포스트를 읽어주셔서 감사드리며, 오타나 잘못된 내용이 있을 경우 댓글 남겨주시기 바랍니다.

참조

https://hongong.hanbit.co.kr/java-%EC%9E%90%EB%B0%94-%EB%B0%B0%EC%97%B4array-%EC%84%A0%EC%96%B8%ED%95%98%EA%B3%A0-%EC%83%9D%EC%84%B1%ED%95%98%EA%B8%B0/

Tags:

Categories:

Updated:

Comments