Java 배열
컴퓨터 과학에서 배열이란 번호와 번호에 대응하는 데이터들로 이루어진 자료 구조이다.
배열의 형태는 그림과 같다.
int형으로 선언된 변수 x가 4개의 배열로 구성되어있다.
index 해당 배열의 값을 접근할 수 있도록 해준다.
value 는 x[index(0)] 은 10이 담겨 있고, x[index(1)] 은 20이 담겨 있다.
bit 는 배열이 차지하는 메모리 공간이다. 선언된 int 형 변수는 4바이트를 차지하고, 배열을 4개로 구성하였으니 4x4=16바이트 메모리를 차지하게 된다.
Java 사람의 키를 입력하고 출력하는 코드를 만들기
배열을 활용한 예제.
3명의 사람이 있고 각각의 키를 입력하여 콘솔로 출력한다.
Java 코드 작성
public class PeoplesHeight {
public static void main(String[] args) {
int[] peopleHeight;
peopleHeight = new int[3];
peopleHeight[0] = 156;
peopleHeight[1] = 172;
peopleHeight[2] = 167;
System.out.println("첫 번째 사람의 키: " + peopleHeight[0]);
System.out.println("두 번째 사람의 키: " + peopleHeight[1]);
System.out.println("세 번째 사람의 키: " + peopleHeight[2]);
}
}
출력 예시
첫 번째 사람의 키: 156
두 번째 사람의 키: 172
세 번째 사람의 키: 167
int[] peopleHeight;
배열의 변수를 선언한다.- 배열을 사용할 때 변수를 선언해야한다.
- 변수 앞에
int[]
괄호를 붙어줘야 한다. - 선언 된 배열은 바로 사용할 수 없다. 배열 생성이 필요하다.
- peopleHeight = new int[3]; 배열을 생성한다.
- new 뜻은 새로 생성하고, new int[3] 라고 입력해야 괄호의 숫자만큼 int형 변수가 만들어진다.
- 생성한 int[3] 배열은 peopleHeight 변수로 참조하도록 한다.
- new int[3]; 배열을 생성하면 자동으로 초기화를 해주는데 int 형 값은 숫자 0으로 초기화 된다.
배열 참조 타입
- 배열의 타입은 Reference Type 참조형 변수이다. 메모리에 간접 접근한다.
- 다른 일반 변수 int, long, double은 Primitive Type 기본형으로 메모리에 직접 접근한다.
- 참조형 변수는 기본형 변수와 다르게 접근 해야 한다.
- 배열 new int[3] 를 생성하면 자바는 이 배열을 접근할 수 있는 메모리 주소를 반환한다. 이때 생성된 배열의 주소는 x10f87f48 이라고 값이라고 가정한다.
- 이 상태에서는 int 형 변수 3개를 만들 뿐, 이름이 없기 때문에 접근 방법이 필요하다.
- 배열이라고 선언한 int[] peopleHeight 변수로 참조값(배열의 주소)을 x10f87f48 할당한다.
- 이제 변수 int[] peopleHeight 는 참조값을 통해 메모리에 담겨 있는 x10f87f48 배열로 접근하여 사용할 수 있다.
public class Array {
public static void main(String[] args) {
int[] peopleHeight;
peopleHeight = new int[3];
System.out.println("배열의 참조 값: " + peopleHeight);
}
}
출력
배열의 참조 값: [I@10f87f48
[I
는 int형 뜻이다.10f87f48
는 배열의 참조하고 있는 주소 값이다.
배열 사용
배열을 선언하고, 생성하여 참조까지 완료하였다면 이제 사용해보도록 한다.int[] people;
people = new int[4];
배열 Index
배열 4개의 요소로 생성하였다면 index는 0, 1, 2, 3 이 존재하고 배열은 0부터 시작한다. 배열 인덱스의 범위는 0 ~ (n-1)으로 n이 4개이고 하나를 빼면 인덱스 3까지 사용할 수 있다. 인덱스 3은 int[4]의 마지막 요소이다.
이제 인덱스로 배열안에 값을 할당해보도록 한다.
int[] people;
people = new int[4];
people[0] = 5;
people[1] = 2;
아래 그림과 같이 people의 첫 번째 요소의 값을 5를 넣었으며, 두 번째 요소는 2를 넣었다.
값을 할당하였으니 해당 people[0] 첫 번째 요소의 값을 접근해서 사용한다.
System.out.println("첫 번째 리뷰 점수 " + people[0]);
빌드 한 경우 다음과 같이 출력한다. 첫 번째 리뷰 점수 5
동적 런타임
배열은 참조형 변수로 런타임에 접근하여 동적으로 크기를 정할 수 있다.
int size = 100;
int[] people;
people = new int[size]; // 이 코드를 접근할 시점에 size 값에 따라 크기가 정해 진다.
- 코드에서는 size = 100 리터럴로 할당했지만,
만약 멤버변수 또는 매개변수 Parameter로 접근하는 방식으로 활용하면 배열을 실행할 시점에 크기가 정해 진다.
일련의 공간을 이용해서 값을 할당하고 접근하는 배열을 활용해보는 것을 확인하였다.
트러블슈팅
- java: incompatible types: int cannot be converted to int[]
- 배열 값 할당 당시 people = 1; 요소의 인덱스 누락으로 발생하는 에러이다.
- Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 6 out of bounds for length 4
- length 길이가 4번째 까지인데 6번째 값을 할당하여 발생하는 문제이다.
- 코드 예:
people = new int[4]; people[6] = 5; // 6번째 값 할당