배열 타입
같은 타입의 데이터(여러 변수)를 하나의 묶음에 저장하는 자료구조.
각 데이터 저장 위치는 인덱스를 부여해 접근한다.
변수와 달리 각 저장공간이 연속적으로 배치되어 있다는 특징이 있다.
많은 양의 데이터를 저장하기 위해 그 데이터의 숫자만큼 변수를 선언해야 한다면
매우 번거롭기 때문에 배열을 이용하면 편리할 것이다.
코딩테스트에서 가장 중요한 부분
자바를 기본으로 하고 배열을 정복하기
배열의 선언과 생성
타입[ ] 변수이름;
타입 변수이름[ ];
배열을 선언한 다음에는 배열을 생성해야 한다. 배열을 생성하는 것은 단지 생성된 배열을 다루기 위한 참조변수를 위한 공간이 만들어질 뿐이고, 배열을 생성해야만 비로소 값을 저장할 수 있는 공간이 만들어지는 것이기 때문이다.
배열을 생성하기 위해서는 연산자 new와 함께 타입과 길이를 지정해 주어야 한다.
자바 언어에서 배열은 한 번 생성하면 두 가지를 바꿀 수가 없다.
(1) 배열 원소의 타입
(ex. int 였는데 double로 바꿀 수 없다.)
(2) 배열의 크기(길이 = 원소의 개수
배열의 길이와 인덱스
생성된 배열의 각 저장공간을 배열의 요소라고 하며, 배열이름[인덱스]의 형식으로 배열의 요소에 접근한다.
이를 "Indexing인덱싱"이라고 한다. 인덱스는 배열의 요소마다 붙여진 일련번호로 각 요소를 구별하는데 사용된다.
인덱스의 범위는 0부터 배열길이-1까지이다.
인덱스로 상수 대신 변수나 수식을 사용할 수도 있다.
인덱스로 상수 대신 i를 사용하고, for문으로 변수 i의 값을 0부터 3 미만까지 증가시킨다.
빨간 줄이 쳐진 부분 : 논리 주소
배열이름.length
자바에서는 JVM이 모든 배열의 길이를 별도로 관리하며
'배열이름.length'를 통해 배열의 길이에 대한 정보를 얻을 수 있다.
배열은 한 번 생성하면 길이를 변경할 수 없기 때문에 이미 생성된 배열의 길이는 변하지 않는다.
==> 따라서 배열이름.length는 상수다. 값을 읽을 수만 있고 변경할 수 없다.
mathScores의 "길이"
배열의 길이 변경하는 방법
1. 더 큰 배열을 새로 생성한다.
2. 기존 배열의 내용을 새로운 배열에 복사한다.
값 목록으로 배열 생성하는 방법
변수 선언과 동시에 값 목록 대입
데이터타입[] 변수 = ( 값 0, 값 1, 값 2, ...};
변수 선언 후 목록 대입
데이터타입[] 변수;
변수 = new 타입[] { 값 0, 값 1, 값 2 ...};
ex) 길이가 5인 int배열
int [ ] scores;
score = new int [5];
or
타입 [ ] 변수이름 = new 타입 [ 길이 ];
int score = new int [5];
배열 구조에서 인덱스 번호는 0부터 시작한다. 0부터 하는 것이 더 효율적이다.
참조타입명.속성명 =>
참조타입의 주소에 해당하는 객체의 속성에 접근하는 방법
'.': 객체멤버참조연산자
new 연산자로 배열 설정
배열 생성시 값 목록을 가지고 있지 않음
향후 값들을 저장할 배열을 미리 생성하고 싶을 경우
타입[] 변수 = new 타입[길이];
타입[] 변수 = null;
변수 = new 타입[길이];
int[] intArray = new int[5];
배열의 초기화
배열은 생성과 동시에 자동적으로 자신의 타입에 해당되는 기본값으로 초기화되므로 배열을 사용하기 전에 따로 초기화를 해주지 않아도 되지만, 원하는 값을 저장하려면 각 요소마다 값을 지정해주어야 한다.
값을 주지 않고 공간만 확보한 배열
왜 값은 0이 나오는가?
= 기본값으로 초기화되므로 0만 나오게 된다.
사용가능한 인덱스 범위 내에서 써야 한다.
자바 언어의 이름(식별자 identifier)을 짓는 규칙:
(1) 영문대/소문자, 숫자
(2) '_', '$'만 가능하다.
(3) 첫번째 문자가 숫자로 시작할 수 없다.
name1(OK), 1name(X), _name1(OK), $name1(OK)
(4) 기본적으로 camel기법 적용
(5) 변수명: 소문자(특수기호)로 시작
클래스명: 대문자로 시작
메소드명: 소문자로 시작
배열의 차원
배열의 차원이란 배열 안의 배열을 의미 (시공간x)
* 1차원 배열: 배열의 원소가 하나의 값(스칼라 Scalar)
int[] arr1 = {1, 2, 3};
* 2차원 배열
int [][] arr2= {
{1, 2},
{3, 4}
};
arr2[0][0] = 100;
arr2[0][1] = 200;
arr2[1][0] = 300;
arr2[1][1] = 400;
행이 2개, 열도 2개
엑셀에서의 table과 유사한 형태
- 2차원 배열(3x2)
int[][] arr2 = {
{1, 2},
{3, 4},
{5, 6},
};
* 3차원 배열
int[][][] arr3 = { { {1, 2} } , { {3, 4} } };
arr3[0][0][0] = 100;
arr3[0][0][1] = 200;
int타입의 기본값 0
배열 안의 배열의 길이
배열 복사
배열은 한 번 생성하면 크기 변경이 불가능하다.
더 많은 저장 공간이 필요하다면 보다큰 배열을 새로 만들고 이전 배열로부터 항목 값들을 복사해야 한다.
배열의 길이는 int범위의 양의 정수(0도 포함)이어야 한다.
배열을 복사하는 방법
- for문을 이용
int[] arr = new int[5];
int [] tmp = new int[arr.length*2];
for(int i = 0; o < arr.length; i++)
tmp[i] = arr[i]; // arr [i]의 값을 tmp[i]에 저장
arr = tmp;
- System.arrayCopy() 메소드 이용
* 배열의 복사를 할 때 for문보다 이 방법이 더 효율적이다.
for 문은 배열의 요소 하나하나에 접근하여 복사하지만 arraycopy()는 지정된 범위의 값들을 한 번에 통째로 복사한다.각 요소들이 연속적으로 저장되어 있다는 배열의 특성때문에 이처럼 처리하는 것이 가능하다.
- Arrays 클래스 이용


참고문헌: 이것은 자바다, 자바의 정석
'STUDY > JAVA' 카테고리의 다른 글
[JAVA] 상속 (0) | 2022.03.21 |
---|---|
[JAVA] 이클립스 자바 파일 내보내기 Export (0) | 2022.03.20 |
[JAVA] 객체 지향 프로그래밍 (0) | 2022.03.14 |
[JAVA] 제어문 - 반복문 (0) | 2022.03.13 |
[JAVA] 제어문 - 조건문 (0) | 2022.03.13 |