국비

[ 25일차 137~144 ] 수업 정리 - 자바

코딩하는냥이 2025. 5. 20. 15:16
반응형

📌 주요 학습 내용

오늘은 자바의 컬렉션 프레임워크 중 List, Set, Map의 기본 사용법과 특징, 그리고 동기화 처리 여부와 관련된 구현 클래스들을 학습했습니다.


📌 예제 코드

1. ArrayList를 이용한 객체 저장 및 삭제

List<Board> list = new ArrayList<>();
for (int i = 1; i <= 5; i++)
    list.add(new Board("제목" + i, "내용" + i, "글쓴이" + i));
list.remove(2);  // 인덱스 2번 객체 삭제

2. Vector를 활용한 동기화 처리

List<Board> list = new Vector<>();
Thread t1 = new Thread(() -> {
    for (int i = 1; i <= 1000; i++)
        list.add(new Board("제목" + i, "내용" + i, "글쓴이" + i));
});

3. LinkedList와 ArrayList의 성능 비교

List<String> list1 = new ArrayList<>();
List<String> list2 = new LinkedList<>();
for(int i = 0; i < 10000; i++)
    list1.add(0, String.valueOf(i));

4. HashSet을 이용한 중복 제거 및 순회

Set<String> set = new HashSet<>();
set.add("Java");
set.add("Java");  // 중복 무시됨

5. 사용자 정의 객체 중복 제거 (hashCode, equals 오버라이딩)

public boolean equals(Object obj) {
    if (obj instanceof Member target)
        return name.equals(target.name) && (age == target.age);
    return false;
}

6. HashMap 기본 사용법

Map<String, Integer> map = new HashMap<>();
map.put("홍길동", 95);  // key 중복 시 마지막 값으로 덮어씀

7. Hashtable의 동기화 처리 확인

Map<String, Integer> map = new Hashtable<>();
// 두 스레드가 동시에 put 수행 → 안전

💡 포인트 정리

  • ArrayList는 읽기 성능이 좋고, LinkedList는 삽입/삭제 성능이 좋다.
  • VectorHashtable은 동기화를 제공하지만 최신 코드에서는 Collections.synchronizedList 등을 활용하는 것이 일반적이다.
  • Set은 중복을 허용하지 않으며, hashCode()equals()를 반드시 오버라이딩해야 정확한 중복 비교가 가능하다.
  • HashMap은 키-값 쌍을 저장하며, 키 중복 시 마지막 값으로 대체된다.
  • MapkeySet()이나 entrySet()으로 전체 순회할 수 있다.

📌정리하자면, 이번 25일차 수업에서는 Java 컬렉션 프레임워크의 기본 구성요소인 List, Set, Map에 대해 학습하며 각 자료구조의 특징과 차이점, 그리고 동기화가 필요한 상황에서의 대응 방식을 실습했습니다. 특히 HashSet, HashMap, Hashtable, ArrayList, Vector, LinkedList 각각의 차이를 실제 코드로 비교하며 이해도를 높일 수 있는 시간이었습니다.