배열 (Array)
만약 우리가 100개의 변수가 필요하다고 가정해보자
그렇다면 우리는 100개의 변수의 이름을 모두 만들어주며 하나하나 변수를 선언해야 한다.
(100개의 변수명을 만들어야 한다니.. 생각만으로도 벌써 머리가 아프다..😂)
그럼 이럴때 사용해줄 수 있는것이 바로 배열이다!
배열은 여러 개의 변수를 하나에 담는 기능을 하고 배열의 이름은 기준에서 얼마나 떨어져 있는지에 따라 자동으로 이름이 된다.
이러한 배열에는 2가지 특징이 있는데, 하나는 0 부터 시작한다는 것이고 또 하나는 선언 시 크기를 지정해주어야 한다는 것이다.
우리는 1부터 시작하는 것이 편한데 왜 컴퓨터는 0부터 시작을 해야할까..?
그 이유는 나를 기준으로 얼만큼 떨어져 있는지를 판단하기 때문이다.
만약 내가 앉아 있고 내 옆에 누군가 와서 앉는다면 내 옆사람은 나로부터 1칸 떨어진 곳에 앉아 있는 것이므로 내가 0, 옆사람이 1이 되는 것이다.
또한, 배열은 일렬로 배치가 되어야 하기 때문에 선언 시 크기를 지정해 공간을 확보해 주어야 한다.
배열의 선언 방법은 아래와 같다.
// 1. 선언과 동시 초기화
int[] arr = {1, 2, 3};
// 2. 선언 후 값 넣기
int[] arr;
arr = new int[] {1, 2, 3};
// 3. 크기만 선언
int[] arr = new int[3];
다차원 배열
배열은 1차원 배열, 2차원 배열, 3차원 배열 등 다차원 배열을 활용할 수 있다.
이를 쉽게 이해하려면 아파트를 생각해보면 된다.
1개의 아파트에 하나의 층이 있다면 1차원 배열
그 아파트가 여러 층을 가지고 여러 호가 있다면 2차원 배열
1층 3호 아파트에 들어갔을 때 방이 있다면 3차원 배열 이라고 생각하면 된다.
1차원 : 아파트 1호
2차원 : 아파트 1층 2호
3차원 : 아파트 1층 2호 0번 방
4차원 : 아파트 1층 2호 0번 방 3번 박스
2차원 배열
2차원 배열의 선언 방법은 1차원 배열과 동일하게 가능하다.
String[][] arr = new String[3][4];
값을 넣어줄 때에도 인덱스 별로 넣어줘도 되고, for 문으로 넣어줘도 된다.
// for 문으로 값 넣기
String[][] arr = new String[4][4];
for(int i = 0; i < arr.length; i++){
for(int j = 0; j < arr[i].length; j++){
arr[i][j] = i + "층" + j + "호";
}
}
// for 문으로 배열 값 출력하기
for (int i = 0; i < royal.length; i++) {
for (int j = 0; j < royal[i].length; j++) {
System.out.println(royal[i][j]);
}
}
3차원 배열
그렇다면 3차원 배열도 2차원 배열과 동일하게 가능할까?
답은 "그렇다" 이다.
물론 조금은 다르지만 2차원 배열을 활용해서 배열을 생성하고, 값을 넣고, 출력하는 등을 진행할 수 있다.
만약 4층 4호 방3개 짜리의 아파트가 있다고 한다면 배열의 생성은 아래와 같을 것이다.
String[][][] ap = new String[4][4][3];
이렇게 아파트를 만들어 줬다면 그 다음엔 누구의 아파트 인지 값을 넣어주면 된다.
ap[0][0][0] = "철수의 방";
ap[2][3][2] = "영희의 방";
이렇게 해주면 아파트의 0층 0호 0번방은 철수의 방이 되고, 2층 3호 2번 방은 영희의 방으로 값을 지정해주게 된다.
이렇게 넣어준 값을 모두 출력하고 싶다면 for 문을 사용해주면 된다.
for(int i = 0; i < ap.length; i++){ // 층의 수
for(int j = 0; j < ap[i].length; j++){ // i층에 있는 호의 수
for(int z = 0; z < ap[i][j].length; z++){ // i층에 있는 j호의 z방의 수
if (royal[i][j][z] == null) {
royal[i][j][z] = "빈 방";
}
System.out.println(i + "층 " + j + "호 = " + royal[i][j][z]);
}
}
}
향상된 for 문
배열의 값을 하나하나 빼 올 때 for문이 아닌 향상된 for문을 사용한다면 배열의 값을 조금 더 편하게 빼 올 수 있다.
하지만 시작값을 지정하지 못하는 단점이 있기 때문에 무조건 향상된 for문이 좋은 것은 아니다.
int[] scores = {95, 75, 84, 38, 88};
for (int i : scores) {
System.out.println(i);
}
null
null 은 정보의 부재를 뜻하며 공백과는 다르다.
null인 상태는 진공과 같은 상태로 null인 상태에서 데이터를 건드리게 되면 nullpointException이 발생하게 된다.