배열이란?
- 배열은 요소를 순서대로 모아서 관리하기 위해 만들어진 자료구조
- 배열은 모든 요소는 같은 타입을 가짐
- 각각의 요소에는 정수 인덱스를 사용해서 엑세스
Java에서 배열 표기법
- 다음 항목들을 지정하여 배열 선언
- type[] name;
- 배열에 나열딜 요소들의 타입 : type
- 배열의 차원 : []
- 배열을 선언한 변수이름 : name
배열의 차원
- 선형 1차원 배열과 표형 2차원 배열, 육면체형 3차원 배열
- 인덱스가 배열의 각 요소와 연관됨
- 2차원 배열은 한 배열에 여러 배열이 포함되는 형태
- 배열에 포함된 각 배열은 각각의 인덱스를 가짐
배열의 경계 검사
- 배열은 크기가 정해져 있어,요소 엑세스를 위해 배열 경계를 검사함
- 배열 내 잘못된 위치에 대한 접근은 ArrayIndexOutOfBoundsException 예외를 발생
- length변수를 사용
배열과 컬렉션 비교
- 배열
- 크기를 조절할 수 없음
- 같은 타입의 요소를 저장하기 위한 자료구조
- 배열의 요소는 읽기 전용 엑세스 권한을 가질 수 있음
- 배열은 빠르지만 유연성이 떨어짐
- 컬렉션
- ArrayList와 같은 컬렉션 클래스는 크기를 조절할 수 있음
- 컬렉션은 다양한 타입의 요소를 저장하기 위해 설계됨
- 컬렉션은 읽기 전용이 가능
- 조금 느리지만 보다 유연함
배열 인스턴스 생성
- 배열 변수를 선언한다고 해서 배열이 생성되지 않음
- new 키워드를 사용해서 명시적으로 배열 인스턴스를 생성해야함
- 배열이 생성되면 기본값 0 or null이 암시적으로 할당 됨
1
2
3
4
5
6
7
8
9
10
11
| import java.util.Arrays;
public class ArrayTest {
public static void main(String[] args) {
int[] array = new int[10];
System.out.println(Arrays.toString(array));
String[] array2 = new String[10];
System.out.println(Arrays.toString(array2));
}
}
|
1
2
| [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[null, null, null, null, null, null, null, null, null, null]
|
확인을 해보면 암시적으로 정수형은 0 문자는 null이 들어가는 것을 확인할 수 있다.
배열 요소 초기화
- 배열의 요소는 선언 시 명시적으로 초기화 될 수 있음
- 편리하게 줄여 쓸 수 있는 방법 제공
- 선언 시 초기화 할 대 배열의 크기를 사용할 수 없음
1
2
3
4
| long[] row = new long[] {1,2,3};
long[] row = {1,2,3}; //동일하다.
long[] row = new long[3] {1,2,3}; //초기화와 값을 넣는 것을 동시에 하지 못한다.
|
가변 길이 배열
- Java의 다차원 배열은 배열안에 다른 배열이 포함되어 있는 형태
위와 같이 길이가 다른 배열을 생성할 수 있다.
배열 요소 복사
- 배열을 복사하면 변수만 복사되고 값은 복사되지 않음
- 배열 인스턴스를 복사하지 않음
- 두 개의 배열 변수가 같은 배열 인스턴스를 가리킴
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| public class ArrayTest {
public static void main(String[] args) {
int[] i = {5};
System.out.println(i[0]);
change(i);
System.out.println(i[0]);
}
static void change(int[] i){
i[0]++;
System.out.println(i[0]);
}
}
|
값을 복사하는게 아니기 때문에 change에서 ++ 할경우 메인에 있는 값을 확인 할경우 바뀐 것을 알수있다.
Deep Copy , Shallow Copy
- Deep Copy: 주소가 아닌 실제 값을 복사하는 것
- Shallow Copy: 주소만 복사하는 것
배열 메소드
- 배열 인스턴스의 메소드
- Arrays 클래스의 메소드
- sort : 배열의 요소를 오름차순
- binarySearch : 객체의 위치를 이진 검색 알고리즘으로 검색한 후, 위치를 반환
- copyOf : 전달받은 원본 배열과 복사할 요소의 개수로 원본 배열과 같은 타입의 새 배열 반환
- copyOfRange : 전달받은 원본 배열과 복사 시작 인덱스 및 복사 끝 인덱스로 원본 배열범위 내의 요소를 복사하여 같은 타입의 새 배열 반환
- fill : 배열의 모든 요소를 특정 값으로 초기화
foreach 문에서 배열 사용
- foreach문은 배열 처리를 위한 상세 작업을 추상화 함
1
2
3
4
5
6
7
8
| public class foreach {
public static void main(String[] args) {
for(String arg: args){
System.out.println(arg);
}
}
}
|
위와 같이 배열에서 하나씩 뽑아서 출력할 수 있다.