📌 배열
- 같은 타입의 여러 변수들로 이루어진 유한 집합
- 같은 종류의 데이터를 많이 다루어야 하는 경우 사용할 수 있는 가장 기본적인 자료 구조
📌 배열의 선언과 생성
선언 : 생성된 배열을 다루기 위한 참조변수를 위한 공간을 만드는 것. 값 저장 x
1. 타입[] 배열이름;
2. 타입 배열이름[];
1. int[] score;
2. int score[];
생성 : 값을 저장할 수 있는 공간을 만드는 것
타입[] 배열이름;
배열이름 = new 타입[길이];
int[] score;
score = new int[5];
선언과 생성 동시에 하기
타입[] 배열이름 = new 타입[길이];
int[] score = new int[5];
배열의 인덱스 & 길이
- 생성된 배열의 각 저장공간을 '배열의 요소'라고 한다.
- 배열이름[인덱스] 형식으로 배열의 요소에 접근할 수 있다.
- 인덱스(index)는 배열의 요소마다 붙여진 일련번호로 각 요소를 구별하는데 사용된다.
- 인덱스는 1이 아닌 0부터 시작한다. -> 인덱스의 범위는 0부터 배열길이 -1
- JVM이 모든 배열의 길이를 별도로 관리하며, '배열이름.length'를 통해 배열의 길이에 대한 정보를 얻을 수 있다.
int[] score = new int[3];
score[0] = 100;
score[1] = 90;
score[2] = 80;
int length = score.length;
ArrayIndexOutOfBoundsException 예외는 배열의 index가 유효한 범위를 벗어났다는 에러이다.
만약
int[] score = new int[6];
for (int = 0; i < 6; i++) {
System.out.println(score[i]);
}
이런 코드가 있을 때
int[] score = new int[5];
이렇게 변경을 했다고 해보자. 그렇다면 score 배열의 인덱스 범위는 0에서 4가 될 것인데
반복문의 코드는 아직 0에서 5까지 반복하게 되어있어 ArrayIndexOutOfBoundsException가 발생한다.
때문에 for 문의 조건식에 배열의 길이는 직접 적어주는 것보다
for (int = 0; i < score.length; i++)
이런 식으로 적어주는 것이 좋다. 실수할 가능성도 있고 일일히 코드 변경을 해주지 않아도 되기 때문이다.
배열의 초기화
- 배열은 생성과 동시에 자동적으로 기본값으로 초기화되기 때문에 배열을 사용하기 전에 따로 초기화를 해주지 않아도 되지만, 원하는 값을 저장하려면 각 요소마다 값을 지정해 줘야한다.
1번 예시
int[] score = new int[5];
score[0] = 50;
score[1] = 60;
score[2] = 70;
score[3] = 80;
score[4] = 90;
2번 예시
int[] score = new int[5];
for (int i = 0; i < score.length; i++) {
score[i] = i * 10 + 50;
}
3번 예시
int[] score = new int[]{50, 60 ,70 ,80 ,90};
int[] score = {50, 60, 70, 80, 90};
주의점(선언과 생성을 따로 할 때)
int[] score;
score = {50, 60, 70, 80, 90};
score = new int[]{50, 60, 70, 80, 90};
초기값
배열의 타입 |
초깃값 |
char |
'\u0000' |
byte, short, int |
0 |
long |
0L |
float |
0.0F |
double |
0.0 또는 0.0D |
boolean |
false |
배열, 인스턴스 등 |
null |
📌 2차원 배열
- 다차원 배열은 2차원 이상의 배열을 의미하며, 배열 요소로 또 다른 배열을 가지는 배열을 의미한다.
- 메모리의 용량이 허용하는 한, 차원의 제한은 없지만 주로 1, 2차원 배열이 사용되므로 2차원 배열 중심으로 정리한다.
선언과 생성
타입[][] 배열이름;
타입 배열이름[][];
타입[] 배열이름[];
int[][] score = new int[4][3];
2차원 배열의 인덱스 & 길이
- 2차원 배열은 행(row)와 열(column)으로 구성되어 있다.
- 행index의 범위 '0 ~ 행의 길이 -1'
- 열index의 범위 '0 ~ 열의 길이 -1'
- 2차원 배열의 각 요소에 접근하는 방법은 '배열이름[행index][열index]'
int[][] score = new int[4][3];
score[0][0] | score[0][1] | score[0][2] |
score[1][0] | score[1][1] | score[1][2] |
score[2][0] | score[2][1] | score[2][2] |
score[3][0] | score[3][1] | score[3][2] |
score[0][0] = 100;
int scoreLength = score.length;
System.out.println("1 번째 행의 원소 수 : " + score[0].length);
System.out.println("2 번째 행의 원소 수 : " + score[1].length);
System.out.println("3 번째 행의 원소 수 : " + score[2].length);
System.out.println("4 번째 행의 원소 수 : " + score[3].length);
reference!
https://hianna.tistory.com/517
http://www.tcpschool.com/java/java_array_oneDimensional
http://www.tcpschool.com/java/java_array_twoDimensional
자바의 정석 기초