◆ 배열은 같은 타입의 데이터를 연속된 공간에 나열하고, 각 데이터에 인덱스를 부여해놓은 자료구조이다.
1. 배열의 특징
1) 배열은 같은 타입의 데이터만 저장할 수 있습니다.
2) 한 번 생성된 배열은 길이를 늘리거나 줄일 수 없습니다.
2. 배열 선언
- 대괄호 [ ]는 배열 변수를 선언하는 기호이다.
- 타입은 배열에 저장될 데이터의 타입을 말한다.
- 형식1을 주로 쓴다.
형식1) 선언 예)
타입[ ] 변수; int[ ] score;
형식2) 선언 예)
타입 변수[ ]; int score[ ];
- 배열 변수는 참조 변수에 속합니다.
배열도 객체이므로 힙 영역에 생성되고, 배열 변수는 힙 영역의 배열 객체를 참조하게 된다.
3. 배열 생성
타입[ ] 변수이름; // 배열을 선언( 배열을 다루기 위한 참조변수 선언 )
변수이름 = new 타입[길이]; // 배열을 생성( 실제 저장공간을 생성 )
int[] score; // int타입의 배열을 다루기 위한 참조변수 score 선언
score = new int[5]; // int타입의 값 5개를 저장할 수 인슨 배열 생성
- 배열의 선언과 생성을 동시에
타입[] 변수이름 = new 타입[길이]; // 배열의 선언과 생성을 동시에
int[] score = new int[5]; // 길이가 5인 int 배열
4. 배열의 인덱스
- 생성된 배열의 각 저장공간을 '배열의 요소(element)' 라고 한다.
'배열이름[인덱스]' 의 형식으로 배열의 요소에 접근한다.
- 인덱스(index)는 배열의 요소마다 자동으로 붙여진 일련번호.
" 인덱스의 범위는 0부터 '배열길이 -1'까지 "
ex) int[] score = new int[5];
길이가 5인 배열 : 모두 5개의 요소(저장공간)를 가짐, 인덱스의 범위는 0~4(0,1,2,3,4)이다.
- 배열에 값을 저장하고 읽어오는 방법은 변수와 같다.
단지 변수이름 대신 '배열이름[인덱스]'를 사용하는 점만 다르다.
ex) score[3] = 100;
int value = score[3];
5. 배열의 길이
'배열이름.length' 를 통해서 배열의 길이에 대한 정보를 얻을 수 있다.
int[] arr = new int[5]; // 길이가 5인 int 배열
int tmp = arr.length; // arr.length의 값은 5이고, tmp에 5가 저장된다.
6. 배열의 초기화
* 초기화 : 배열의 각 요소에 처음으로 값을 저장하는 것
- 배열은 생성과 동시에 자동적으로 각 데이터 타입에 맞는 기본값으로 초기화된다.
그래서 배열을 사용하기 전에 초기화를 해주지 않아도 된다.
### 데이터 타입에 따른 기본값
boolean : false
byte,short,int : 0
참조형 : null
But, 원하는 값을 저장하려면 각 요소마다 값을 저장해줘야 한다.
int[] score = new int[4]; // 길이가 4인 int 배열을 생성
score[0] = 50; // 각 요소에 직접 값을 저장
score[1] = 60;
score[2] = 70;
score[3] = 80;
- 배열을 간단히 초기화 할 수 있는 방법
int[] score = new int[]{ 50, 60, 70, 80 }; // 배열의 생성과 초기화를 동시에
1) 저장할 값들을 괄호{}안에 쉼표로 구분해서 나열
2) 괄호{} 안의 값의 개수에 의해 배열의 길이가 자동으로 결정
- ' new 타입[] '을 생략하여 코드를 더 간단히 할 수 있음.
int[] score = { 50, 60, 70, 80 }; // new int[]를 생략할 수 있음
### 배열의 선언과 생성을 따로 하는 경우에는 생략할 수 없다는 점 주의!
int[] score;
score = { 50, 60, 70, 80 }; // 에러, new int[]를 생략할 수 없음.
score = new int[]{ 50, 60, 70, 80 }; // OK
7. 배열의 출력
int[] Arr = { 100, 90, 80, 70, 60 };
for(int i=0; i<Arr.length; i++) {
System.out.print(Arr[i]+","); // 각 요소 간의 구별을 위해 쉼표를 넣는다.
}
- 더 간단한 방법 : 'Arrays.toString(배열이름)' 메서드 사용
-> 이 메서드는 배열의 모든 요소를 ' [첫번째 요소, 두번째 요소, ....] '와 같은 형식의 문자열로 만들어서 반환
int[] Arr = { 100, 90, 80, 70, 60 };
System.out.println(Arrays.toString(Arr));
// 배열 Arr의 모든 요소를 출력한다. [100, 90, 80, 70, 60]이 출력된다.
8. 2차원 배열
- 2차원 배열을 선언하는 방법은 1차원 배열과 같다. 다만 대괄호[ ]가 하나 더 들어갈 뿐이다.
- 형식1을 주로 많이 쓴다.
형식1) 선언 예)
타입[ ][ ] 변수; int[ ][ ] score;
형식2) 선언 예)
타입 변수[ ][ ]; int score[ ][ ];
◆ 2차원 배열은 행과 열로 구성된 테이블 형태로 데이터를 담는다.
ex) int[ ][ ] score = new int[4][3]; // 4행 3열의 2차원 배열을 생성한다.
0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 |
9. 2차원 배열의 인덱스
- '행index'의 범위는 '0~행의 길이-1'
'열index의 범위는 '0~열의길이-1'
- 2차원 배열의 각 요소에 접근하는 방법 : ' 배열이름[행index][열index] '
8. 2차원 배열의 초기화
- 2차원 배열도 괄호{ }를 사용해서 생성과 초기화를 동시에 할 수 있다.
다만, 1차원 배열보다 괄호{ }를 한번 더 써서 행별로 구분해준다.
int[][] arr = new int[][]{ {1,2,3}, {4,5,6} };
int[][] arr = { {1,2,3}, {4,5,6} }; // new int[][]가 생략됨
- 행별로 줄바꿈 해주는 것이 보기도 좋고 이해하기 쉽다.
int[][] score = {
{100,100,100},
{20,20,20},
{30,30,30},
{40,40,40}
};
'JavaStudy(open) > 개념' 카테고리의 다른 글
static, static inner class (0) | 2021.10.16 |
---|---|
import문, static import문 (0) | 2021.09.30 |