컬렉션
ㅡ> 데이터를 효율적으로 저장하고 관리하기 위한 자료구조의 집합
Java Collection Framework (JCF) 핵심 구조
Collection (인터페이스)
└ List : 순서 O, 중복 O
└ ArrayList
└ LinkedList
└ Vector
└ Set : 순서 X, 중복 X
└ HashSet
└ LinkedHashSet
└ TreeSet
└ Queue : FIFO 구조, 선입선출
└ LinkedList (Queue 구현도 함)
└ PriorityQueue
Map (인터페이스) : Key-Value 쌍 저장, Key 중복 X
└ HashMap
└ LinkedHashMap
└ TreeMap
└ Hashtable
각 컬렉션 특징 요약
- List = 순서 O, 중복 O
- Set = 순서 X, 중복 X
- Map = Key-Value, Key 중복 X
- 상황에 맞게 선택해서 효율적 코드 작성 가능
상황별 추천
💡 예시 코드
import java.util.*;
public class CollectionExample {
public static void main(String[] args) {
// List
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("A"); // 중복 허용
System.out.println("List: " + list);
// Set
Set<String> set = new HashSet<>();
set.add("A");
set.add("B");
set.add("A"); // 중복 제거됨
System.out.println("Set: " + set);
// Map
Map<String, Integer> map = new HashMap<>();
map.put("A", 1);
map.put("B", 2);
map.put("A", 3); // Key 중복 → 값 덮어쓰기
System.out.println("Map: " + map);
}
}
✅ Optional이란?
ㅡ> "값이 있을 수도, 없을 수도 있는 상황을 안전하게 처리하는 컨테이너 클래스"
ㅡ> 값이 있으면 담고, 없으면 비어 있음
ㅡ> null 체크 안 해도 안전하게 값 처리 가능
설명
변수값이 null이면 종종 NullPointerException 발생
ㅡ> null 체크 하는 코드 만들어줘야 함
<null체크 안하면>
String str = null;
System.out.println(str.length()); // ❌ NullPointerException 터짐!
<null 체크>
String str = null;
if (str != null) { // null 체크!
System.out.println(str.length());
} else {
System.out.println("값이 없음!");
}
■ Optional
ㅡ> null체크 자동으로 해줌
Optional<String> opt = Optional.ofNullable(null);
System.out.println(opt.orElse("기본값")); // "기본값" 출력, NPE 안 남!
✅ 주요 메서드
✅ 예제
import java.util.Optional;
public class OptionalExample {
public static void main(String[] args) {
// 1. Optional 생성
Optional<String> opt1 = Optional.of("Hello"); // null 불가
Optional<String> opt2 = Optional.ofNullable(null); // null 허용
Optional<String> opt3 = Optional.empty(); // 빈 Optional
// 2. 값 확인 & 처리
System.out.println(opt1.isPresent()); // true
System.out.println(opt2.isPresent()); // false
// 3. 값 꺼내기
System.out.println(opt1.get()); // "Hello"
// 4. 값 없을 때 기본값 제공
System.out.println(opt2.orElse("Default")); // "Default"
// 5. 값 있으면 실행
opt1.ifPresent(val -> System.out.println(val.toUpperCase())); // "HELLO"
// 6. 값 변환
Optional<Integer> length = opt1.map(String::length);
System.out.println(length.orElse(0)); // 5
}
}
✅ 언제 쓰나?
- null 리턴 대신 Optional 반환 → 호출자에게 "값이 없을 수 있음" 명확히 전달
- NullPointerException 방지
- 명시적 null 체크 코드 줄임 → 함수형 스타일 가능
🚫 주의할 점
- 필드로 Optional 쓰지 마세요. → 객체 직렬화, 메모리 낭비 문제 있음
- 파라미터로 Optional 전달 ❌ → 리턴 값에만 사용 추천
- Optional.get() 바로 호출 X → orElse, orElseThrow 써야 안전
'언어 > Java' 카테고리의 다른 글
Java 변수 종류 (0) | 2025.04.27 |
---|---|
Java 스트림 API (0) | 2025.03.17 |
Java 예외처리 (0) | 2025.03.16 |
JAVA OOP 캡슐화, 상속, 다형성 (0) | 2025.03.15 |
JAVA 클래스와 객체 (0) | 2025.03.15 |