배열이란?

같은 타입의 여러 변수를 연속된 유한한 하나의 묶음으로 다루는 자료 구조.

 

배열의 사용

int[] score1; // 배열 선언 1 (추천)
int score2[]; // 배열 선언 2

score1 = new int[5];//배열 생성

int[] score3 = new int[] {1,2,3,4,5}; //선언과 동시에 초기화
int[] score4 = {1,2,3,4,5}; // 선언과 동시에 초기화시 생성 명령어 생략 가능

score2 = {1,2,3,4,5}; // 선언 이후에 생성 명령어 생략 -> 불가능

배열을 선언하는 방법은

  1. 타입[] 변수이름
  2. 타입 변수이름[] 

두가지 방법이 있으며 1번의 방식이 일반적으로 사용된다.

 

배열은 선언시에 메모리에 공간이 할당되는것이 아니다.

선언시에는 배열의 맨 처음 요소의 주소가 참조될 공간이 변수로 할당된다.

 

배열의 생성시에는 new 메소드를 사용한다.

생성시에는 길이를 반드시 지정해줘야하며 길이가 0인 배열도 생성할 수 있다.

 

배열을 선언과 동시에 초기화 할때는 {}를 사용해 편하게 할 수 있다.

이 경우 길이를 지정하지 않아도 되며

new 생성 메소드를 생략도 가능하다.

 

당연하게도 선언 이후에 생성 메소드를 생략하고 초기화 하려 할 경우 오류가 발생한다.

함수의 매개변수로 배열을 사용할때 주의하자.

 

배열의 인덱스와 길이

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

System.out.println(score[0]); // 1
System.out.println(score[5]); // ArrayIndexOutOfBoundsException! (index는 0부터 4까지)

System.out.println(score.length); // 5

 

배열이름 뒤의 대괄호[] 안에 정수를 넣어 배열내 요소에 접근 가능하다.

들어가는 정수를 index라고 하며, 범위는 0부터 시작해 배열 길이 -1까지이다.

 

유효하지 않은 범위의 숫자를 넣을경우 런타임에러 ArrayIndexOutOfBoundsException가 발생한다.

JVM은 모든 배열의 길이를 별도로 관리해 배열이름.length로 길이 값을 받을 수 있다. (함수가 아님에 주의하자)

배열의 길이는 변경하는 것이 불가능한 상수이다.

 

배열의 복사

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

int tmp = new int[10];

for (int i; i < score.length; i++){
	tmp[i] = score[i];
}

score = tmp;
//score의 기존 배열 주소값 위에 tmp의 주소 복사

만약 기존 배열의 길이가 부족해서 길이를 두 배로 늘려야한다면?

한 번 선언한 배열의 길이는 바꿀 수 없다.

 

길이가 두배인 배열을 새로 생성 한 후 기존 내용을 복사한다.

이후 기존 배열의 변수에 새로운 배열을 복사하면 주소값만 바뀌게 된다.

 

이때 더 이상 참조하지 않는 쓸모없어진 기존 배열은 가비지 컬렉터가 자동으로 제거한다.

 

String 배열

String[] name = new String[3];
//참조형 변수의 기본값 = null → null이 3개 들어있는 배열 생성

String[] name = {”kim”, “park”, “lee”};
// 이 경우 실제로는 String 객체의 주소값 3개가 담긴 배열이 생성됨

String을 포함한 객체 배열도 선언해 사용할 수 있다.

참조형 변수로 객체를 만들면 객체 안에는 참조할 곳의 주소가 들어간다.

 

char 배열과 String 클래스?

String 클래스가 char 배열에 기능 추가해 확장한 것이다.

String 객체는 내용을 변경할 수 없다.

(변경시 새로운 문자열 생성후 반환한것이다.)

 

char 배열은 내용 변경이 가능하다.

String.toCharArray(), new String(char[]) 이용해서 서로 변환이 가능하다.

 

다차원 배열

  • 타입[][] 변수이름
  • 타입 변수이름[][]
  • 타입[] 변수이름[]

3가지 방법으로 모두 선언이 가능하다.

 

2차원 배열의 경우 1차원 배열의 주소를 담고있는 배열을 생성한다.

2차원 이상의 배열은 주소만 저장하는 배열로 구성된다.

따라서 가변적인 배열 생성이 가능하다.

 

+ Recent posts