이번 포스팅에서는 자바(Java)에서 배열(Array)에 대하여 공부를 해보고자 한다.
배열이란
배열은 자료가 연속으로 나열된 자료구조를 말하며, 자료구조의 가장 기초 내용이다.
배열을 사용하면 자료형이 같은 자료 여러 개를 한 번에 관리할 수 있다.
자료구조(data structure)
데이터를 어떻게 관리하면 좋은지 공부하는 분야
예를 들어 학생 100명의 학번을 관리해야 할 때, 학번의 자료형을 정수라 하면 int studentID1, int studentID2, ··· , int studentID100과 같이 변수 100개를 선언해서 사용해야 한다.
학번에 대한 여러 개 변수를 일일이 쓰는 것은 너무 번거롭기 때문에 배열을 사용한다.
배열 선언과 초기화
배열을 사용하려면 먼저 배열을 선언해야 한다.
변수와 마찬가지로 자료형을 함께 선언한다.
배열을 선언하는 문법
자료형[ ] 배열 이름 = new 자료형[개수];
자료형 배열 이름[ ] = new 자료형[개수];
- 배열을 이루는 각각의 자료를 배열 요소라고 하며, 배열 요소는 자료형이 모두 같다.
- 저장하려는 자료의 성격에 맞게 자료형을 정하고 선언하려는 배열 요소 개수만큼 [ ] 안에 적는다.
- new 예약어는 배열을 새로 만들라는 의미다.
예제
학생들의 학번을 배열로 선언
int[] studentIDs = new int[10] //int형 요소가 10개인 배열 선언
- int형 요소가 10개인 배열을 선언한 것이다.
이렇게 선언했을 때 메모리 상태를 그림으로 나타내면 다음과 같다.
- 배열을 선언하면 선언한 자료형과 배열 길이에 따라 메모리가 할당된다.
- 자료형이 int형이므로 배열 요소를 저장할 수 있는 공간의 크기는 전부 4바이트로 동일하다.
- 배열 요소를 저장할 수 있는 공간이 총 10개 이므로 이 배열을 위해 총 40 바이트의 메모리가 할당되는 것이다.
배열 초기화
자바에서 배열을 선언하면 그와 동시에 각 요소의 값이 초기화된다.
배열의 자료형에 따라 정수는 0, 실수는 0.0, 객체 배열은 null로 초기화되며, 다음처럼 배열 선언과 동시에 특정 값으로 초기화할 수도 있다.
배열이 초기화 요소의 개수만큼 생성되므로 [ ] 안의 개수는 생략한다.
int[] studentIDs = new int[] {101, 102, 103}; //개수는 생략함
다음과 같이 값을 넣어 초기화할 대 [ ] 안에 개수를 쓰면 오류가 발생한다.
int[] studentIDs = new int[3] {101, 102, 103}; //오류 발생
선언과 동시에 초기화할 때 다음과 같이 new int [ ] 부분을 생략할 수도 있다.
int[] studentIDs = {101, 102, 103}; //int형 요소가 3개인 배열 생성
다음과 같이 배열의 자료형을 먼저 선언하고 초기화하는 경우에는 new int [ ]를 생략할 수 없다.
int[] studentIDs; //배열 자료형 선언
studentIDs = new int[] {101, 102, 103}; //new int[]를 생략할 수 없음
인덱스 연산자 [ ]
[ ]는 배열을 처음 선언할 때 사용한 연산자이다.
배열 이름에 [ ]를 사용하는 것을 인덱스 연산이라고 한다.
인덱스 연산자의 기능
- 배열 요소가 저장된 메모리 위치를 찾아주는 역할
변수 이름으로 변수가 저장된 메모리 위치를 찾는 것처럼, 배열에서 [i] 인덱스 연산을 하면 i번째 요소의 위치를 찾아 해당 위치의 메모리에 값을 넣거나 이미 저장되어 있는 값을 가져와서 사용할 수 있다.
예를 들어 int형으로 선언한 num 배열의 네 번째 요소에 값 25를 저장하고, 그 값을 가져와 int형 변수 age에 저장한다면 다음 그림과 같다.
배열 복사하기
기존 배열과 자료형 및 배열 크기가 똑같은 배열을 새로 만들거나 배열의 모든 요소에 자료가 꽉 차서 더 큰 배열을 만들어 기존 배열에 저장된 자료를 가져오려 할 때 배열을 복사한다.
배열을 복사하는 방법
- for문을 사용하여 각 요소 값을 반복해서 복사하는 방법
- System.arraycopy( ) 메서드를 사용하여 복사하는 방법
System.arraycopy(src, srcPos, dest, destPos, length) 메서드에서 각 매개변수 의미는 다음과 같다.
매개변수 | 설명 |
src | 복사할 배열 이름 |
srcPos | 복사할 배열의 첫 번째 위치 |
dest | 복사해서 붙여 넣을 대상 배열 이름 |
destPos | 복사해서 대상 배열에 붙여 넣기를 시작할 첫 번째 위치 |
length | src에서 dest로 자료를 복사할 요소 개수 |
'Back-End > Java' 카테고리의 다른 글
[Java] ArrayList 클래스 (0) | 2023.02.04 |
---|---|
[Java] 다차원 배열 (0) | 2023.02.04 |
[Java] 싱글톤 패턴(singleton pattern) (0) | 2023.02.03 |
[Java] 변수 유효 범위 (0) | 2023.02.03 |
[Java] static 변수 (0) | 2023.02.03 |