배열 (Array)
- 동일한 자료형의 순차적 자료구조
- 요소(Element)와 인덱스로 구성
- 물리적 위치와 논리적 위치가 동일하다. (각 element의 address가 인접) ↔ linked list는 논리적 위치는 인접하지만 물리적 위치는 다를 수 있음
- 배열의 주소는 첫번째 element를 가리킨다.
- 자바에서는 자바 유틸 패키지 안에서 제공되는 ArrayList를 사용한다.
장단점
- 장점 : 인덱스 연산자 [ ]를 이용해 특정 element를 참조하는 것이 빠르다.
- 단점 : 배열은 중간에 데이터가 비면 안되므로 수정할 때 Operation 수행 시간이 길다. O(n)
insert : 데이터 한칸씩 뒤로 밀림 / delete : 데이터 한칸씩 앞으로 당김
선언
- 배열을 선언할 때는 길이(length)를 명시하여 메모리에 배열의 사이즈를 잡고 사용한다.
- 선언 시 int, double은 각각 0, 0.0으로, 객체는 null로 초기화된다.
// 두가지 모두 동일한 표현
int[] arr1 = new int[10]
int arr1[] = new int[10]
초기화
// 세가지 모두 동일한 표현
int[] nums = new int[] (10, 20, 30); // 개수 생략
int[] nums = (10, 20, 30); // new int[] 생략 가능
int[] nums;
nums = new int[] (10, 20, 30); // 선언한 후에 초기화 할 때는 new int[] 생략 불가
예제 코드
(1) 배열을 이용해 합을 구하는 프로그램
- [ ] 인덱스 연산자 활용하여 element가 저장된 메모리 위치에 접근
- enhanced for : 사이즈가 n인 배열의 요소를 처음부터 끝까지(0~n-1) 순차적으로 순회할 때 간단하게 사용할 수 있다.
package ch20;
public class ArrayTest {
public static void main(String[] args) {
int[] arr = new int[10]; // 배열 선언
int total = 0;
for (int i = 0, num = 1; i < arr.length; i++) {
// System.out.println(arr[i]); arr의 초기화값 출력
arr[i] = num++;
}
for (int num : arr) { // enhanced for
total += num;
}
System.out.println(total); // 출력 : 55
}
}
(2) 문자 배열을 만들어 A-Z까지 저장하고 다시 출력하기
package ch20;
public class CharArrayTest {
public static void main(String[] args) {
char[] alphabets = new char[26];
char ch = 'A';
for(int i = 0; i < alphabets.length; i++) {
alphabets[i] = ch++;
}
for(char alpha : alphabets) {
System.out.println(alpha + "," + (int)alpha);
}
}
}
※ 배열의 길이와 요소의 개수는 동일하지 않을 수 있다.
- 배열 요소의 개수보다 배열의 크기가 클 수 있다.
- 무조건 .length 속성을 쓰면 오류 발생 가능
- 해결 : 배열의 element 개수를 나타내는 count 변수를 사용해준다.
'Java & Kotlin' 카테고리의 다른 글
[Java 객체지향] 객체 배열 (0) | 2022.01.29 |
---|---|
[Java 객체지향] Singleton Pattern 응용 문제 (0) | 2022.01.27 |
[Java 객체지향] Singleton Pattern (static 응용) (0) | 2022.01.27 |