프로그래밍 언어/Java 프로그래밍
컬렉션 프레임워크(1) List 인터페이스- ArrayList
by Hyeon_
2021. 11. 30.
컬렉션 프레임워크(Collection Framework)
- 컬렉션(Collection)
- 사전적 의미로 요소(객체)를 수집해 저장한 것
- 프레임워크(Framework) = 라이브러리(기능) + 프로그래밍 방식
- 표준화, 정형화된 체계적인 프로그래밍 방식
- 미리 정해진 방식대로 프로그램을 작성
- 누가 작성하든 프로그램이 표준화되기 때문에 프로그램 유지보수하기 쉬워짐
컬렉션 프레임워크(Collection Framework)
- 컬렉션(다수의 객체)를 다루기 위한 표준화된 프로그래밍 양식
- 많은 양의 데이터를 저장, 삭제, 검색, 비교, 정렬 작업 등을 편리하게 쉽게 수행
- 객체들을 효율적으로 추가, 삭제, 검색할 수 있도록 제공되는 컬렉션 라이브러리
- 인터페이스를 통해서 정형화된 방법으로 다양한 컬렉션 클래스 이용
- 인터페이스와 다형성을 이용한 객체지향적 설계를 통해 표준화 되어 있기 때문에 사용법 편하고 재사용성이 높은 코드 작성 가능
- 프로그래머의 프로그래밍 부담을 많이 덜어줌
- java.util.* 패키지에 포함
자바 컬렉션
프레임워크
컬렉션 클래스
- 다수의 데이터를 저장할 수 있는 클래스
ArrayList
, LinkedList
, Vector
, HashSet
, TreeSet
컬렉션 프레임워크의 주요 인터페이스
- 인터페이스: List / Set / Map
- List와 Set의 공통된 부분을 뽑아서 새로운 인터페이스 Collection이 추가로 정의됨
- Map은 List / Set과 전혀 다른 형태로 컬렉션을 다루기 때문에 가은 상속 계층에 포함되지 못함
컬렉션 프레임워크 특징
- List, Set, Map 인터페이스 이름이 클래스 이름에 포함되어 있음
- 이름만으로도 클래스의 특징을 쉽게 알 수 있음
- Vector, Stack, Hashtable, Properties와 같은 클래스들은 컬렉션 프레임워크가 만들어지기 이전부터 존재했기 때문에 컬렉션 프레임워크 명명법을 따르지 않음
- Vector나 Hashtable 등 기존 컬렉션 클래스들은 이전에 작성된 프로그램들과 호환을 위해 설계를 변경해서 남겨둠
- 가능하면 새로 추가된 ArrayList와 HashMap 사용 추천
List 인터페이스의 특징 및 주요 메서드
- 특징
- 순서가 있는 집합
- 인덱스로 관리
- 중복해서 객체 저장 가능
- 구현 클래스
- ArrayList
- LinkedList
- Vector
- 주요 메서드
- add( ) / get( ) / isEmpty( ) / size( ) / remove( ) / clear( )
ArrayList: List 인터페이스의 구현 클래스
- 크기가 가변적으로 변하는 선형 리스트
- 배열과 유사: 순차 리스트, 인덱스 사용
- 배열과 차이점
- 배열: 크기 고정
- ArrayList: 객체 추가 가능. 저장용량 초과 시 자동으로 저장 용량 증가
- 단점
- 데이터를 읽어오고 저장하는데는 효율적이나 용량을 변경해야 할 경우엔느 배열을 생성한 후 기존 배열로부터 새로운 배열로 복사해야 하기 때문에 비효율적
- 따라서 처음에 인스턴스 생성할 때 저장할 데이터의 개수를 잘 고려하여 충분한 용량의 인스턴스를 생성하는 것이 좋음
ArrayList 사용법
- 제네릭(Generic)을 사용하지 않을 경우
List list = new ArrayList();
list.add("abc");
String str = (String)list.get(0);
- 제네릭(Generic)을 사용하는 경우
List<String> list = new ArrayList<String>();
list.add("abc");
String str = list.get(0);
- 객체 추가: 인덱스 0부터 차례로 저장
- 객체 제거
- 바로 뒤 인덱스부터 마지막 인덱스까지 모두 앞으로 1씩 이동
- 따라서 빈번한 객체 삭제와 삽입이 일어나는 경우 ArrayList를 사용하지 않는 것이 좋음 => LinkedList 사용
ArrayListEx1.java
package list;
import java.util.ArrayList;
import java.util.List;
public class ArrayListEx1 {
public static void main(String[] args) {
List list = new ArrayList(5);
list.add(100);
list.add(2.55);
list.add(300);
list.add(9.9);
list.add("자바 프로그래밍");
list.add(1,"데이터베이스");
System.out.println("리스트 내용 출력");
for(int i = 0; i<list.size(); i++){
System.out.println(i + " : "+list.get(i));
}
System.out.println("포함 여부 확인");
System.out.println(list.contains(300));
System.out.println(list.contains("자바"));
System.out.println("리스트에서 데이터 삭제");
System.out.println(list.remove(1));
System.out.println(list.remove("자바 프로그래밍"));
System.out.println("리스트 내용 출력");
for(int i = 0; i<list.size(); i++){
System.out.println(i + " : "+list.get(i));
}
}
}
ArrayListEx2.java - 제네릭 타입 사용
package list;
import java.util.ArrayList;
public class ArrayListEx2 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("Java");
list.add("JDBC");
list.add("Servlet/JSP");
System.out.println("전체 내용 출력");
for(int i = 0; i<list.size(); i++){
System.out.println(i + " : "+list.get(i));
}
// 값만 가져올 때 사용하는 방법
System.out.println("전체 내용 출력2");
for(String item : list) {
System.out.println(item);
}
// 세 번째 요소와 요소의 길이 출력
System.out.println("세 번째 요소 "+list.get(2));
System.out.println("세 번째 요소의 길이 "+list.get(2).length());
}
}
[OUTPUT]
전체 내용 출력
0 : Java
1 : JDBC
2 : Servlet/JSP
전체 내용 출력2
Java
JDBC
Servlet/JSP
세 번째 요소 Servlet/JSP
세 번째 요소의 길이 11