Ch05. 배열

·2022년 8월 5일
0

java의정석

목록 보기
2/5

배열

같은 타입의 변수를 하나의 묶음으로 다루는 것
'묶음'이기 때문에 메모리상 연속되어 배치된다.

배열의 생성, 선언

선언

원하는 타입의 변수를 선언하고 변수 또는 타입에 배열임을 의미하는 대괄호[]를 붙이면 된다.

int[] score;
String[] name;
//타입[] 변수이름

int score[];
String name[];
//타입 변수이름[]

생성

배열을 선언한 다음에는 배열을 생성해야 한다.
배열을 생성해야만 값을 저장할 수 있는 공간이 비로소 만들어진다.
연산자 new와 함께 배열의 타입과 길이를 지정해 주어야 한다.

int[] score = new int[5];
//타입[] 변수이름 = new 타입[길이]; // 배열의 선언과 생성을 동시에

배열의 길이와 인덱스

인덱스

배열의 요소마다 붙여진 일련번호
각 요소를 구별하는데 사용된다.
1이 아닌 0부터 시작하기 때문에, 0부터 배열길이 -1까지가 인덱스의 범위다.

for문과 병행해서 사용할시, index로 상수 대신 변수나 수식으로도 사용할 수 있다.

score[0]=0;
score[1]=10;
score[2]=20;
....

//index와 for문을 사용해 인덱스를 변수 취급
for(int i=0;i<4;i++)
{
    score[i]=i*10;
}

배열의 길이

당연히 배열의 길이는 양수여야 하지만, 길이가 0인 배열을 만들 수도 있다.
배열의 길이는 length메서드를 이용해 추출할 수 있다.

배열의 길이를 변경하는 법?

  • 더 큰 배열을 새로 생성한다.
  • 기존 배열의 내용을 새로운 배열에 복사한다.

배열의 초기화

배열은 생성과 동시에 자동적으로 자신의 타입에 해당되는 기본값으로 초기화된다
하지만 원하는 값을 저장하려면 각 요소마다 값을 지정해줘야한다.

하지만ㄴ 자바에서는 배열의 생성과 초기화를 동시에 할 수 있는 방법을 제공한다.

int[] score = new int[] {50,60,70,80,90};
int[] score = {50,60,70,80,90} // new int[]를 생략할 수도 있음

참고로 new연산자의 경우는 배열과 생성을 따로 하는 경우에는 생략이 불가능하다.

배열의 출력

배열에 저장된 값을 확인할 때에도 for문을 사용하면 된다.
더 간단하게는 Arrays.toString(배열이름) 메서드를 사용하면 편하다.

배열의 복사

배열을 복사하는데에는 두 가지 방법이 있다.

for문을 이용한 복사 방법

int[] arr = new int[5];
...
int[] tmp = new int[arr.length*2];

for(int i =0; i < arr.length; i++)
	tmp[i] = arr[i];
    
arr = tmp;

System.arraycopy()를 이용한 복사 방법

System.arraycopy(num, 0, newNum, 0, num.length);
//num[0]에서 newNum[0]으로 num.length개의 데이터를 복사

String 배열

앞서int타입의 배열을 살펴보았다.
배열은 int타입 뿐만 아니라 String,char타입으로도 선언이 가능하다.


다차원 배열

여태까지 다룬 배열은 1차원 배열이다.
2차원 이상의 배열을 다차원 배열이라고 한다.

2차원 배열의 선언과 인덱스

1차원 배열과 선언방법은 같으나, 괄호 하나[]가 더 들어갔으며,
인덱스 표현시에도 []를 하나 더 붙인다.

int[][] score = new int[4][3];

System.out.printf(socre[2][3]);

2차원 배열의 초기화

1차원 배열의 초기화에서 괄호 {} 한 번을 더 써서 행별로 구분해준다.

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

가변 배열

앞서 선언한 2차원 배열이 반듯한 직사각형 모양인 반면,
각 행에 달려있는 배열의 길이를 각자 다르게 설정할 수도 있다.

int[][] score = new int[3][];
socre[0] = new int[4];
score[1] = new int[3];
score[2] = new int[5];
///1행에는 크기가 4인 itn배열이, 2행에는 3크기의 배열이, 3행에는 5크기의 배열이
profile
풀스택 호소인

0개의 댓글