20. JAVA의 제네릭, 컬렉션 프레임워크 - LIST
제네릭스(Generics)
<E> : 제네릭이라고 하며 타입을 지정해 주는 것입니다.
제네릭(Generic)은 클래스 내부에서 지정하는 것이 아닌 외부에서 사용자에 의해 지정되는 것을 의미합니다.
한마디로 특정(Specific) 타입을 미리 지정해주는 것이 아닌 필요에 의해 지정할 수 있도록 하는 일반(Generic) 타입이라는 것입니다.
- Generic(제네릭)의 장점
1. 제네릭을 사용하면 잘못된 타입이 들어올 수 있는 것을 컴파일 단계에서 방지할 수 있습니다.
2. 클래스 외부에서 타입을 지정해주기 때문에 따로 타입을 체크하고 변환해줄 필요가 없습니다.
3. 비슷한 기능을 지원하는 경우 코드의 재사용성이 높아집니다.
보통 제네릭은 아래 표의 타입들이 많이 쓰입니다.
와일드 카드<?>
와일드카드란, 제네릭 클래스의 객체를 메소드의 매개변수로 받을 때, 그 객체의 타입 변수를 제한하는 것을 말합니다.
? 와일드카드 제한
- <T>로 선언하는 것과 달리 ?로 선언했을 때는 제한이 있습니다. : 좁은 의미로 사용
와일드 카드<?>의 제한 종류
- <? extends T> 와일드 카드의 상한 제한(upper bound) - T와 그 자손들을 구현한 객체들만 매개변수로 가능
- <? super T> 와일드 카드의 하한 제한(lower bound) -T와 그 조상들을 구현한 객체들만 매개변수로 가능
- <?> 제한 없음
컬렉션 프레임워크(Collection Framework) : 자료구조
컬렉션 프레임 워크는 객체나 데이터들을 효율적으로 관리(추가, 삭제, 검색, 저장)할 수 있는 자료구조입니다.
컬렉션 프레임 워크를 사용하므로서 가장 큰 이점은 크기가 고정적인 배열의 문제점을 해결 하는 것입니다.
자바는 배열의 이러한 문제점을 해결하기 위해, 널리 알려져 있는 자료구조를 바탕으로 들을 만들어 놓았습니다.
이러한 자료구조들이 있는 라이브러리를 컬렉션 프레임워크라고 합니다.
대표적으로는 List, Set, Map, Stack, Queue 등이 있습니다.
알고리즘
어떤 문제가 발생되었을 때 해결할 수 있는 절차 혹은 순서
자료구조
의미 없는 데이터를 하나의 정보로 만들어주는 알고리즘들의 집합,
수집한 자료를 저장하는 방법.
주요 인터페이스의 간략한 특징
이번 시간에는 List에 대해서 먼저 알아보겠습니다.
1. List extends Collection
- List 구현 클래스
Vector : 보안성 강화, 처리량 감소, 용량 관리
LinkedList : FILO으로 인해 넣을 때는 빨라도 뺄 때에는 느리다.
ArrayList : 인덱스로 데이터를 관리한다.
ArrayList
컬렉션 클래스 중 실무에서 가장 많이 사용되는 클래스입니다.
배열의 특징인 인덱스를 이용하여 값을 저장하고 관리합니다.
★ 배열과 ArrayList의 차이 ★
배열은 길이에 제한을 두어야 할 때 자주 사용되고,
ArrayList는 몇 개의 데이터가 들어올 지 알 수 없을 때 사용합니다.
1. ArrayList 생성
1. ArrayList<Integer> datas1 = new ArrayList<>(); /// 타입 지정
2. ArrayList<Integer> datas2 = new ArrayList<>(10); // 초기 용량(Capacity) 설정
3. ArrayList<Integer> datas3 = new ArrayList<>(Arrays.asList(1,2,3,4,5)); //생성시 값추가
2. ArrayList 주요 메소드
add(E e)
- 순서대로 리스트를 추가
add(int index, E element)
- index위치에 엘리먼트를 추가
get(int index)
- index위치에 있는 엘리먼트를 가져올 수 있습니다.
intdexOf(Object o)
- ArrayList 안에 있는 엘리먼트가 어디에 있는지 찾기위한 메소드입니다.
만약 찾지 못하면 -1을 리턴합니다.
remove(int index)
- index위치에 있는 해당 엘리먼트를 삭제합니다.
remove(Object o)
- index뿐 아니라 객체 자체를 삭제 할 수 있습니다.
ex) list.remove(Integer.valueOf(100));
set(int index, E element)
- index위치에 들어있는 엘리먼트를 수정 할 때 사용합니다.
size()
- ArrayList의 엘리먼트의 수를 알고싶을 때 사용합니다.
contains(Object o)
- 어떤 구체적인 객체가 있는지 확인하는 메소드 입니다.
리턴타입은 boolean입니다.
clear()
- 이 메소드는 ArratList를 깔끔하게 비워줍니다.
Collections.sort()
- ArrayList를 정렬할때 사용합니다.
내림차순으로 정렬하고 싶다면, 오름차순으로 정렬 후에 Collections.reverse(); 메소드르 사용하면 됩니다.
isEmpty()
- ArrayList에 엘리먼트들이 있는지 확인하는 메소드입니다.
리턴타입은 boolean으로 비어있으면 true 리턴합니다.
3. ArrayList 사용 예시
이상으로 제네릭과 list에 대해 알아보았습니다.
'KoreaIt Academy > JAVA' 카테고리의 다른 글
22. JAVA 의 스트림(Stream), filter, map, sorted, forEach, collect (0) | 2021.07.27 |
---|---|
21. JAVA의 컬렉션 프레임워크 - HashSet , HashMap (0) | 2021.07.26 |
19. JAVA의 Wrapper 클래스, 박싱(Boxing), 언박싱(UnBoxing) (0) | 2021.07.22 |
18. JAVA의 예외(Exception), 에러(Error), try-catch문, throw, throws (0) | 2021.07.22 |
17. JAVA의 람다식(Lambda Expression) , 메소드 참조 (0) | 2021.07.22 |
댓글