동일한 자료형(Data Type)의 데이터를 연속된 공간에 저장하기 위한 자료구조를 배열(Array)이라고 한다.
1. 배열은 왜 사용할까?
- 같은 종류의 데이터를 효율적으로 관리 가능하다.
- 같은 종류의 데이터를 순차적으로 저장한다.
장점
- 빠른 접근 가능
: 첫 데이터의 위치에서 상대적인 위치로 데이터 접근(인덱스 번호로 접근)
단점
- 데이터 추가/ 삭제의 어려움
: 미리 최대 길이를 지정해야한다.
-> 길이를 모르는 경우에는 배열이 아닌 Collection 객체의 ArrayList를 사용하여 해결한다.
1_2. 변수 선언 시 사용되는 자료형
Primitive(원시) 자료형 / Wrapper 클래스
Primitive type | Wrapper Class |
byte | Byte |
short | Short |
int | Integer |
long | Long |
double | Double |
char | Character |
float | Float |
boolean | Boolean |
Wrapper 클래스의 장점
- null 처리 용이하게 가능하다.
- ArrayList 등 객체만을 핸들링 하는 기능 사용 용이하다.
tip : wrapper 클래스의 값은 내부의 값을 저장하는 것이 아닌 참조 주소를 비교하기 때문에 == 연산자의 사용이 불가능하며, equals()같은 메소드를 사용해야한다.
2. 배열 선언 및 초기화
// new 키워드를 사용해서 배열을 미리 선업하고, 데이터 넣기
Integer list = new Integer[5];
list[0] = 5;
// 배열 선언과 동시에 데이터 넣기
Integer[] list2 = {1,2,3,4,5};
// 배열의 내용을 출력하기 위해 Arrays.toString(배열변수) 메소드 사용
System.out.printLn(Array.toString(list2));
3. ArrayList
- ArrayList 클래스는 내부적으로 배열을 이용하여 요소를 저장한다.
- List는 빈 공간을 허용하지 않는다.
장점
- 배열을 이용하기 때문에 인덱스를 이용해 배열 요소에 빠르게 접근할 수 있다.
단점
- 배열은 크기를 변경할 수 없는 인스턴스이므로, 크기를 늘리기 위해서는 새로운 배열을 생성하고 기존의 요소들을 옮겨야 하는 과정을 거친다.
즉, 요소의 추가 및 삭제 작업에 걸리는 시간이 매우 길어진다.
3_1. List와 ArrayList 차이
List<Integer> list1 = new ArrayList<Integer>();
ArrayList<Integer> list2 = new ArrayList<Integer>();
List는 인터페이스고, ArrayList는 클래스이다.
- 클래스는 크게 일반 클래스와 클래스 내에 '추상 메소드'가 하나 이상 있거나, abstract로 정의된 추상 클래스로 나뉜다.
- 인터페이스는 모든 메소드가 추상 메소드인 경우를 의미하며, 인터페이스를 상속받는 클래스는 인터페이스에서 정의된 추상 메소드를 모두 구현해야한다. (따라서 다양한 클래스를 상속받는 특정 인터페이스는 결국 동일한 메소드를 제공한다.)
-> ArrayList가 아니라 List로 선언된 변수는 다음과 같이 필요헤 따라 다른 리스트 클래스를 쓸 수 있는 구현상의 유연성을 제공한다.
// 다른 객체로 대체 가능
List<Integer> list = new ArrayList<Integer>();
list = new LinkedList<Integer>();
'JAVA > Data Structure' 카테고리의 다른 글
[JAVA] ConcurrentHashMap (0) | 2022.10.23 |
---|---|
[JAVA] Queue 자료구조 add와 offer 차이 (0) | 2022.10.10 |
[JAVA] HashMap (0) | 2022.10.08 |