Java - 배열

이호인·2022년 8월 2일
0

자바 기초

목록 보기
4/4

📌 배열

  • 같은 타입의 여러 변수들로 이루어진 유한 집합
  • 같은 종류의 데이터를 많이 다루어야 하는 경우 사용할 수 있는 가장 기본적인 자료 구조

📌 배열의 선언과 생성

선언 : 생성된 배열을 다루기 위한 참조변수를 위한 공간을 만드는 것. 값 저장 x

1. 타입[] 배열이름; // 보통 이 방법을 많이 선호한다.
2. 타입 배열이름[];

// 예시

1. int[] score;
2. int score[];

생성 : 값을 저장할 수 있는 공간을 만드는 것

타입[] 배열이름; // 배열 선언 (배열을 다루기 위한 참조변수 선언)
배열이름 = new 타입[길이]; // 배열을 생성 (실제 저장공간을 생성)

// 예시
int[] score; // int타입 배열을 다루기 위한 참조변수 score 선언
score = new int[5]; // int타입 값 5개를 저장할 수 있는 배열(저장공간) 생성

선언과 생성 동시에 하기

타입[] 배열이름 = new 타입[길이]; // 배열의 선언과 생성을 동시에 할 수 있다.
int[] score = new int[5]; // 길이가 5인 int배열

배열의 인덱스 & 길이

  • 생성된 배열의 각 저장공간을 '배열의 요소'라고 한다.
  • 배열이름[인덱스] 형식으로 배열의 요소에 접근할 수 있다.
  • 인덱스(index)는 배열의 요소마다 붙여진 일련번호로 각 요소를 구별하는데 사용된다.
  • 인덱스는 1이 아닌 0부터 시작한다. -> 인덱스의 범위는 0부터 배열길이 -1
  • JVM이 모든 배열의 길이를 별도로 관리하며, '배열이름.length'를 통해 배열의 길이에 대한 정보를 얻을 수 있다.
int[] score = new int[3]; // 길이가 3인 int형 배열 선언 및 생성
score[0] = 100; // 배열이름[인덱스] 형식으로 배열의 요소에 접근 가능
score[1] = 90;
score[2] = 80;

int length = score.length; // 배열의 길이를 3으로 생성했으므로 길이도 3이 된다.
ArrayIndexOutOfBoundsException 예외는 배열의 index가 유효한 범위를 벗어났다는 에러이다.

만약

int[] score = new int[6];

for (int = 0; i < 6; i++) {
	System.out.println(score[i]);
}

이런 코드가 있을 때

int[] score = new int[5]; // 6에서 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}; // 에러 발생, new int[]를 생략할 수 없음.
score = new int[]{50, 60, 70, 80, 90}; // OK

초기값

배열의 타입 초깃값
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]; // 4행 3열의 2차원 배열 score 생성
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; // row의 길이 : 4

System.out.println("1 번째 행의 원소 수 : " + score[0].length); // 각 컬럼의 길이 : 3
System.out.println("2 번째 행의 원소 수 : " + score[1].length); // 여기 예제는 고정 길이 배열 이므로 1,2,3,4 행의 컬럼 길이가 모두 같다.       
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
자바의 정석 기초

profile
공부 기록

0개의 댓글