반응형
제네릭스를 이용하면 형 변환과 관련된 불필요한 코딩을 줄일 수 있고, 잘못된 형 변환 때문에 발생하는 런타임 오류를 방지할 수 있다.
제네릭스를 사용하지 않은 예:
ArrayList pitches = new ArrayList();
pitches.add("138");
pitches.add("129");
String one = (String) pitches.get(0);
String two = (String) pitches.get(1);
제네릭스를 사용하지 않으면 ArrayList에 추가하는 객체는 Object 자료형으로 인식된다. Object 자료형은 모든 객체가 상속하고 있는 가장 기본적인 자료형이다. 따라서 ArrayList 객체인 pitches에 값을 넣을 때는 문제가 없지만 값을 가져올 때는 매번 Object 자료형에서 String 자료형으로 형 변환(casting) 을 해야 한다.
제네릭스 사용 예:
ArrayList<String> pitches = new ArrayList<>();
pitches.add("138");
pitches.add("129");
String one = pitches.get(0); // 형 변환이 필요없다.
String two = pitches.get(1); // 형 변환이 필요없다.
배열을 리스트로 변환 예:
import java.util.ArrayList;
import java.util.Arrays;
public class Sample {
public static void main(String[] args) {
String[] data = {"138", "129", "142"}; // 이미 투구수 데이터 배열이 있다.
ArrayList<String> pitches = new ArrayList<>(Arrays.asList(data));
System.out.println(pitches); // [138, 129, 142] 출력
}
}
참고로 리스트 자료형에는 ArrayList, Vector, LinkedList 등이 있다.
- 오름차순(순방향) 정렬 - 리스트명.sort(Comparator.naturalOrder());
- 내림차순(역방향) 정렬 - 리스트명.sort( Comparator.reverseOrder());
✅ 자바 List 클래스 비교 요약
구분 | ArrayList | Vector | LinkedList |
기본 구조 | 동적 배열 (Resizable Array) | 동적 배열 | 이중 연결 리스트 (Doubly Linked List) |
동기화 (Thread-safe) | ❌ 비동기화 (멀티스레드 사용 시 직접 동기화 필요) | ✅ 동기화됨 (내부에 synchronized 처리) | ❌ 비동기화 |
속도 | 빠름 (읽기, index 접근이 빠름) | 느림 (동기화 비용) | 삽입/삭제가 빠름 (중간 데이터 조작 시 효율적) |
삽입/삭제 | 느림 (중간에 삽입/삭제 시 데이터 이동 필요) | 느림 (동기화 + 데이터 이동) | 빠름 (노드 연결만 바꾸면 됨) |
랜덤 접근 | 빠름 (get(index) → O(1)) | 빠름 | 느림 (O(N)) |
메모리 사용 | 적음 | 적음 | 더 많음 (포인터 2개 추가 필요) |
레거시 여부 | ✅ 최신 사용 추천 | 🔴 레거시 클래스 (과거 호환용) | ✅ 사용 가능 |
사용 예시 | 대부분의 일반적인 리스트 작업 | 멀티스레드 환경에서 리스트 필요할 때 | 큐, 덱 구조처럼 앞뒤 삽입/삭제 자주 일어날 때 |
✅ 대표 사용 예
🔹 ArrayList
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
System.out.println(list.get(1)); // banana
🔹 Vector (요즘 잘 안 씀)
Vector<Integer> vec = new Vector<>();
vec.add(1);
vec.add(2);
🔹 LinkedList
LinkedList<String> list = new LinkedList<>();
list.add("first");
list.addFirst("zero"); // 맨 앞에 추가
list.removeLast(); // 맨 뒤 제거
✅ 결론 요약
상황추천 | 클래스 |
일반적인 리스트 처리 (빠른 접근 위주) | ArrayList ✅ |
멀티스레드 환경에서 리스트 사용 | Vector (또는 Collections.synchronizedList) |
빈번한 삽입/삭제가 리스트 중간 또는 앞에서 발생 | LinkedList ✅ |
반응형
'언어 > java' 카테고리의 다른 글
[java] 접근제어자 (1) | 2024.07.23 |
---|---|
[java] HashMap (0) | 2024.07.22 |
[java] StringBuffer, StringBuilder, String 차이 (0) | 2024.07.22 |
[java] 배열 (0) | 2024.06.04 |
[java] 메서드 오버로딩, 매서드 오버라이딩, 가변인자 (0) | 2024.06.04 |