배열은 기본 타입 뿐만 아니라 클래스 타입의 배열도 만들 수 있기 때문에 객체 저장소로 사용될 수 있다.
하지만 배열은 선언 시 정한 크기(저장 용량)를 변경할 수 없고, 항목을 저장, 삭제, 추가하는 메소드가 없기 때문에 직접 인덱스를 사용해야 한다.
이러한 불편함을 해결하기 위해 자바는 컬렉션 프레임워크를 제공한다.
자바는 널리 알려져 있는 자료구조를 사용해서 객체들을 효율적으로 추가, 삭제, 검색할 수 있도록 인터페이스와 구현 클래스를 java.util 패키지에서 제공한다. 이들은 총칭해서 컬렉션 프레임워크라고 부른다.
컬렉션은 객체의 저장을 뜻하고, 프레임워크란 사용 방법을 정해놓은 라이브러리를 말한다. 실제로 컬렉션 프레임워크는 사용 방법을 정의한 인터페이스와 실제 객체를 저장하는 다양한 컬렉션 클래스(구현 클래스)를 제공한다.
컬렉션 프레임워크의 주요 인터페이스로는 List, Set, Map이 있다.
이 인터페이스들은 컬렉션 클래스를 사용하는 방법을 정의한 것이다.
List 컬렉션
List 컬렉션은 배열과 비슷하게 객체를 인덱스로 관리한다. 배열과의 차이점은 저장 용량이 자동으로 증가하며, 객체를 저장할 대 자동 인덱스가 부여된다는 것이다. 그리고 추가, 삭제, 검색을 위한 다양한 메소드들이 제공된다.
List 컬렉션은 객체 자체를 저장하는 것이 아니라 객체의 번지를 참조한다. 그렇기 때문에 동일한 객체를 중복 저장할 수 있는데, 이 경우 동일한 번지가 참조된다. null도 저장이 가능하며, 이 경우 해당 인덱스는 객체를 참조하지 않는다.
List 컬렉션에는 ArrayList, Vector, LinkedList 등이 있는데, 다음은 List 컬렉션에서 공통적으로 사용 가능한 List 인터페이스의 메소드이다. 인덱스로 객체를 관리하기 때문에 인덱스를 매개값으로 갖는 메소드가 많다.
기능 | 메소드 | 설명 |
객체 추가 | boolean add(E e) | 주어진 객체를 맨 끝에 추가한다 |
void add(int index, E element) | 주어진 인덱스에 객체를 추가한다 | |
E set(int index, E element) | 주어진 인덱스에 저장된 객체를 주어진 객체로 바꾼다 | |
객체 검색 | boolean contains(Object o) | 주어진 객체가 저장되어 있는지 조사한다 |
E get(int index) | 주어진 인덱스에 저장된 객체를 리턴한다 | |
boolean isEmpty() | 컬렉션이 비어 있는지 조사한다 | |
int size() | 저장되어 있는 전체 객체 수를 리턴한다 | |
객체 삭제 | void clear() | 저장된 모든 객체를 삭제한다 |
e remove(int index) | 주어진 인덱스에 저장된 객체를 삭제한다 | |
boolean remove(Object o) | 주어진 객체를 삭제한다 |
위 표에서 메스드의 매개 변수 타입과 리턴 타입에 E라는 타입 파라미터가 있는데, 이것은 저장되는 객체의 타입을 List 컬렉션을 생성할 때 결정하라는 뜻이다.
//list 변수 선언
List<String> list = ...;
list.add("꼬부기"); //맨 끝에 객체 추가
list.add(1,"리자몽"); //지정된 인덱스에 객체 삽입
String str = list.get(1); //인덱스로 객체 검색
list.remove(0); //인덱스로 객체 삭제
list.remove("신용권"); //객체 삭제
List<String>은 List 컬렉션에 저장되는 객체를 String 타입으로 하겠다는 뜻이다.
따라서 E 타입 파라미터는 String 타입이 되는 것이다.
그래서 add()메소드의 매개값은 문자열이 되고 get()메소드의 리턴값은 문자열이 된다.
ArrayList
ArrayList는 List 인터페이스의 대표적인 구현 클래스이다.
'Language > Java' 카테고리의 다른 글
[JAVA] 입출력 스트림(자바I/O 스트림) (0) | 2022.02.13 |
---|---|
[JAVA] throws 키워드 : 예외 떠넘기기 (0) | 2022.02.13 |
예외 처리 코드 (try - catch - finally) (0) | 2022.01.27 |
실행 예외 (0) | 2022.01.27 |
예외 클래스 (0) | 2022.01.27 |