본문 바로가기
Java/총정리

[Java] 8. 자바 배열 총정리

by bigpicture 2022. 9. 6.
반응형

배열이란?

코딩에 등장하는 많은 개념들은 편리함을 위해 고안되었습니다. 배열도 코딩의 편리함을 위해 고안되었습니다. 어떤 목적으로 배열이 고안되었는지 알아봅시다. 

배열이 없던 시절, 10명의 시험점수 데이터를 입력해야 하는 상황입니다. 아래와 같이 10개의 int형 변수를 선언해야 합니다.

 

int student1=90;
int student2=80;
int student3=90;
int student4=80;
int student5=90;
int student6=80;
int student7=90;
int student8=80;
int student9=90;
int student10=80;

 

이 코드를 보며 이런 생각이 들었습니다. 어차피 다 같은 종류에 데이터인데, 하나의 변수에 여러 값을 입력하도록 하면 어떨까? 그렇게 배열이 탄생했습니다. 배열을 이용하면 위 코드를 아래와 같이 간단하게 줄일 수 있습니다. 

 

int students[ ]={90,80,90,80,90,80,90,80,90,80};

 

배열의 정의 방법이 무엇인지 이미 감을 잡으셨을 것입니다. 배열은 아래와 같이 정의합니다. 

자료형 변수이름[ ]={원소1,원소2,...}

 

또는 아래와 같은 형태로도 선언할 수 있습니다.

자료형[ ] 변수이름={원소1,원소2,...}

 

아래는 배열을 선언하는 몇가지 예시입니다. 

 

int[] myint={1,2,3,4,5};
double[] mydoub={1.1,2.1,3.1,4.1,5.1};
char[] mychar={'a','b','c'};
String[] mystr={"aaa","bbb","ccc"};

 

배열 원소에 접근하는 방법

배열 원소에 접근하는 방법은 인덱스를 이용하는 것입니다. 아래 배열을 봅시다. 

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


각 원소에 접근하는 방법은 아래와 같습니다. 

 

myint[0] //첫번째 원소 
myint[1] //두번째 원소
myint[2] //세번째 원소 
myint[3] //네번째 원소 
myint[4] //다섯번째 원소

 

변수 선언 후 초기화 방법

아래와 같이 변수 선언과 초기화를 따로 하는 것은 불가능합니다. 

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

 

이런 경우 new 연산자를 사용해야 합니다. 

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

 

배열의 길이 지정

특정 길이의 배열을 생성하는 방법은 아래와 같습니다. 

 

int[ ] myint = new int[3];

 

위와 같이 선언할 경우 각 값은 0으로 초기화됩니다. String 배열은 null 값으로, boolean 배열은 false 값으로 초기화됩니다. 

 

배열의 길이 확인

배열의 길이는 length 메소드를 사용하여 확인합니다. 메소드를 아직 안배운 상태인데요. 메소드는 객체에 사용하는 함수라고 생각하시면 됩니다. 

int[] myint={1,2,3,4,5};
int length=myint.length; //배열의 길이

 

myint.length 가 배열 길이를 담고 있습니다. 아래와 같은 형식입니다. 

 

배열이름.length

 

2차원배열

위에서 정의한 배열들은 1차원 배열입니다. 1차원 배열은 원소를 1차원으로 늘어놓은 것입니다. 배열은 2차원으로도, 그 이상으로도 정의할 수 있습니다.

 

2차원 배열은 행과 열이 있는 행렬입니다. 4행5열의 배열을 만드는 방법은 아래와 같습니다. 

 

int[ ][ ] arr2=new int[4][5];

 

위에서 정의한 배열의 1행2열 원소에 접근하는 방법은 아래와 같습니다. 

 

arr2[1][2]

 

2차원 배열과 수학의 행렬의 차이

자바 배열이 행렬과 다른 점은 각 행이 다른 개수의 열을 가질 수 있다는 것입니다. 예를 들면 아래와 같은 배열의 생성이 가능합니다. 

1 2
1 2 3

위 배열을 만드는 방법은 아래와 같습니다. 

int[ ][ ] arr2=new int[2][ ];  //2행의 배열 선언
arr2[0]=new int[2]; //1행의 열 개수 선언
arr2[1]=new int[3]; //2행의 열 개수 선언

//각 원소 선언
arr2[0][0]=1;
arr2[0][1]=2;
arr2[1][0]=1;
arr2[1][1]=2;
arr2[1][2]=3;

 

배열의 복사

배열을 복사해야 하는 상황을 생각해봅시다. 크기 10인 배열이 생성되었는데, 원소가 5개 추가된다면 크기가 15인 배열이 필요합니다. 이런 경우 크기가 15인 배열을 만들고, 기존 원소 10개를 복사한 뒤 새로운 원소 5개를 추가하면 됩니다. 

배열은 단순한 대입방식으로 복사할 수 없습니다. System.arraycopy( ) 메소드를 사용합니다. 아래와 같은 형식으로 사용합니다. 

System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)


src : 원본 배열
srcPos : 원본배열에서 복사할 시작 인덱스
dest : 새 배열
destPos : 새 배열에 붙여넣을 시작 인덱스
length : 복사할 개수

예를들어 array1 의 세번째 원소 부터 5번째 원소를, array2 의 두번째 원소에서 네번째 원소에 붙여넣는 방법은 아래와 같습니다. 

Syatem.arraycopy(array1, 2, array2, 1, 3)

참조타입을 배우지 않은 상황이므로, 참조타입과 관련된 배열은 이후에 나오는 다른 글에서 다루겠습니다.

반응형

댓글