개요
- 자바에서 사용하는 자료구조인 List에 대한 모든 것을 정리!
1. List와 List형
1-1. List
row type
이라고 부름- 지양해야할 타입임
- 사유 : 리스트에 새로운 element를 추가할 때, 타입체크가 안돼서 문제가 생길 수 있다
primitive
타입은 못 넣는다. 즉,int
타입은 못쓰고wrapper 클래스
인Integer
타입만 쓸 수 있다
1-1-1. 제네릭 (Generic)
list
의 Interface를 확인해보면<E>
. 즉, 제네릭 형태를 받도록 되어있다public interface List<E> extends Collection<E> { ~ }
제네릭(Generic)
은 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법을 의미한다- 즉, 클래스를 정의할 땐 데이터 타입을 확정하지 않고, 인스턴스를 생성할 때 데이터타입을 지정하는 기능이 바로 제네릭이다.
- 이 때
<E>
라던가<T>
와 같은<>
안에 들어가는 대문자는 문법적으로 지정된 것은 아니지만, (작동방식은 같지만)** 관습적으로 의미하는 바**가 있어 외워두는 것이 좋다<T>
: type 타입.<E>
: Element 요소. 컬렉션 클래스와 같은 배열 기반의 구조. (ex. List, ArrayList 등)<K>
: key 키. (ex. Map<k,v>)<V>
: variable. 리턴 값 또는 매핑된 값
- 제네릭의 장점
- 컴파일 단계에서 오류가 검출된다 (런타임 중 에러는 치명적)
- 중복의 제거와 타입 안전성을 동시에 추구할 수 있다
1-2. List<?> : 와일드카드
<?>
를 와일드카드라고 부른다List (row type)
처럼 모든 element를 Object로 간주하는 것 같다- 차이점 :
add()
가 막혀있다. 따라서null
만 넣을 수 있음- 의도하지 않은 타입의 element가 추가되는걸 막아준다. 그래서 타입 안전성이 보장됨!
- 추가로,
List<? extends Number>
등으로 범위를 한정지을 수 있어 더욱 유용함
- 차이점 :
1-3. List<T>, List<E>
type parameter
이름이 다를 뿐, 본질적으로 같음- type parameter ->
<>
안에 있는 대문자(타입 변수라고 생각하면 된다)
- type parameter ->
- 기능은 와일드 카드와 거의 비슷하다
- 차이점 : 메소드나 클래스 내부에서
T
와E
같은type parameter
를 참조할 수 있다는 점
- 차이점 : 메소드나 클래스 내부에서
1-4. List<Object>
- raw type과 동일
- 가급적 사용하지 않는 것을 추천 -> 타입 체크가 안돼서, 안전성이 떨어짐
참고블로그
'java' 카테고리의 다른 글
[java] 예외(Exception) 발생시키기 (0) | 2023.11.22 |
---|---|
[java, 자료구조] 컬렉션 프레임워크 선택 기준 (0) | 2023.11.15 |
[java] 자료구조 Set, Iterator (0) | 2023.11.15 |
[java] .split() 사용시 주의사항 (0) | 2023.10.26 |
[JAVA, JSP] AJAX를 사용하여 JSON 데이터를 주고받기 (0) | 2023.10.19 |