- 데이터 요소들이 순서대로 배치되어 있는 선형구조입니다. - 각 요소는 다음 요소와 연결되어 있으며 각 요소는 인덱스를 통해 접근할 수 있습니다.
3) 순차 리스트 종류 : 배열(Array)
💡 배열(Array) - 메모리의 연속 공간에 값이 채워져 있는 형태의 자료구조를 의미합니다.
- 배열은 '동일한 타입'의 데이터 요소를 저장하는 데 사용되며 '고정된 크기'를 가지고 있어서 동일한 배열의 유형과 크기를 지정하여 생성하여 사용합니다. 배열의 값을 접근하고자 할때는 '인덱스'를 통해 참조하여 접근 할 수 있습니다. - 해당 인덱스는 첫 번째 요소는 0부터 시작을 합니다. 데이터의 집합을 효율적으로 저장하고 관리하기 위해 사용합니다. - 배열을 이용하여 데이터 검색, 정렬, 필터링, 통계 등에 활용될 수 있습니다.
1. 배열의 특징
💡 배열의 특징
1. '인덱스'를 사용하여 요소에 빠르게 접근할 수 있습니다. - 키 값을 이용하여 접근하는 방식보다 인덱스로 접근하는 방식이 빠릅니다.
2. 메모리에 연속적으로 저장되기 때문에 '연속 접근이 가능'합니다. - 키 값을 이용하여 접근하는 방식은 연속적으로 저장된 데이터에 대해 순차적인 접근이 불가능 하지만 배열은 연속접근이 가능합니다.
3. 요소들이 '동일한 자료형'을 가지고 있기 때문에 일관된 데이터 처리가 가능합니다. - 일관된 데이터 타입을 가지고 있기에 처리가 편리합니다.
4. '크기가 고정'되어 있어 추가적인 메모리 할당이 필요하지 않습니다. - 초기화 시에 ‘고정된 크기’를 지정하기에 추가 메모리 할당을 하지 않습니다.
5. 배열의 요소들은 순서가 있기 때문에 정렬된 데이터를 다루기에 유용합니다. 순차적으로 저장된 데이터이고 각각의 인덱스 기반 순서를 가지고 있기에 데이터 처리가 용이합니다.
2. 배열 활용: 배열의 초기화
💡 배열의 초기화
- 배열의 크기와 값에 따라 다양한 초기화를 수행할 수 있습니다.
// 1. '사이즈'와 '값'이 둘다 없는 빈 배열
String[] strArr1 = {};
// 2. '사이즈'는 존재하지만 '값'이 없는 빈 배열
String[] strArr2 = new String[3];
// 3. '사이즈'가 자동 지정된 '값'이 있는 배열
String[] strArr3 = {"one", "two", "three"};
[ 더 알아보기 ] 💡 배열의 크기만 지정하고 값을 할당하지 않으면 무슨 값을 가질까?
데이터 유형
초기화 값
int
0
boolean
false
char
null
String
null
float, double
0.0
객체 자료형 (예: Integer, Boolean, String)
null
3. 배열 활용: 배열의 값 할당
💡 배열의 값 할당
- 값이 없는 빈 배열에 값을 할당하거나 인덱스를 기반으로 값을 할당할 수 있습니다
// 1. 빈 배열에 값 넣기
String[] strArr1 = new String[3];
strArr1[0] = "one";
strArr1[1] = "two";
strArr1[2] = "three";
// 2. 빈 배열 -> 사이즈 할당 -> 값 넣기
String[] strArr2 = {};
strArr2 = new String[3];
for (int i = 0; i < strArr2.length; i++) {
strArr2[i] = Integer.toString(i);
}
- 행과 열로 구성된 1차원 배열을 모아서 2차원 배열을 형성합니다. - 일반 배열과 동일하게 행과 열의 배열의 인덱스를 사용하여 요소를 접근할 수 있습니다.
// 해당 배열은 3행과 4열의 형태를 갖는 배열입니다.
int[][] matrix2Array = new int[3][4];
// 2차원 배열의 요소 접근 방법
for (int i = 0; i < matrix2Array.length; i++) {
for (int j = 0; j < matrix2Array[i].length; j++) {
System.out.print(array[i][j] + " ");
}
}
- 리스트는 '동일한 타입'의 데이터 요소를 저장하는데 사용되며 '가변적 크기'를 가지고 있어서 동일한 타입의 유형을 선택하지만 크기에 제한 없이 객체를 추가하고 삭제하는데 편리합니다.
- 컬렉션 프레임워크의 List의 인터페이스를 활용하여 구현한 구현체입니다. ArrayList 외에 LinkedList, Vector 등이 있습니다. - 생성된 배열은 ‘인덱스’를 사용하여 개별 요소에 대해 액세스 할 수 있습니다. 해당 인덱스는 첫 번째 요소는 0부터 시작을 합니다. - 제네릭 클래스로 제공되어, 다양한 타입의 객체를 저장할 수 있습니다. 제네릭 클래스는 클래스 내부에서 사용할 데이터 타입을 컴파일 시에 지정할 수 있는 기능을 제공합니다.
💡 ArrayList의 객체를 생성할 때, 데이터 타입은 ‘T’로 제너릭 타입의 매개변수로 사용이 됩니다.
- 아래와 같은 제너릭 타입은 객체 자료형으로 사용이 가능합니다.
객체 자료형
설명
Integer
정수 값을 저장하는 타입
String
문자열 값을 저장하는 타입
Double
실수 값을 저장하는 타입
Boolean
논리 값을 저장하는 타입
Object
모든 객체 타입을 저장할 수 있는 타입
List<T> list = new ArrayList<>();
[ 더 알아보기 ]
💡 ArrayList는 크기 제한이 없을까?
- ArrayList의 크기 제한은 없습니다. ArrayList는 동적으로 크기가 조정되는 배열 기반의 자료구조이므로, 필요에 따라 요소를 추가하거나 제거할 수 있습니다. - ArrayList는 내부적으로 배열을 사용하며, 요소를 추가할 때 배열의 크기가 부족하면 자동으로 더 큰 크기의 배열로 복사됩니다. 따라서 ArrayList는 필요한 만큼 요소를 저장할 수 있습니다.