ENUM
- 특정 값들의 집합을 미리 정의, 이를 상수처럼 사용할 수 있도록 도와주는 자료형
- 타입 안정성 제공 -> 강타입의 자료형이기 때문에 잘못된 값 사용을 방지
- 변수명을 누가 봐도 알 수 있는 네이밍으로 정해야 한다.
- 너무 많은 값을 ENUM으로 사용하면 오히려 가독성이 떨어지므로 관련성이 높은 값만 사용
public static void main(String[] args) {
Item sowrd = new Item("Sword" , ItemType.WEAPON);
Item potion = new Item("Potion", ItemType.CONSUMABLE);
System.out.println(sowrd);
System.out.println(potion);
}
public enum ItemType {
WEAPON,
CONSUMABLE,
ARMOR
}
- enum은 JVM이 고유한 하나의 객체로 관리
- 항상 같은 메모리 주소를 가짐
- 따라서 equal보다 참조 비교 == 가 안전하고 정확
- equal도 실행이 되긴함
Stream
- 컬렉션 데이터를 처리하기 위한 함수형 방식
- 간결한 문법
- 가독성 향상
- 요구사항이 많아지면 많아 질수록 stream의 가독성 향상은 아주 좋음
- 지연 처리를 통해 필요한 시점에만 연산을 수행하여 효율적
List <Item> weapons = new ArrayList<>();
for (Item item : items) {
if (item.getType() == ItemType.WEAPON) {
weapons.add(item);
}
}
for (Item weapon : weapons) {
System.out.println(weapon);
}
List <Item> weapons = items.stream()
.filter(item -> item.getType().equals(ItemType.WEAPON)).toList();
weapons.forEach(System.out::println);
- 성능차이
- 성능차이의 3가지 이유
- 1. 초기화
- 2. 데이터 크기
- 3. 병렬 (비동기/동기)
- if문은 단순 반복문 = 초기화 비용 x
- if문은 데이터 크기에 상관없이 고정된 성능
- stream은 작은 데이터 셋 말고 고가용성을 필요로 하는 큰 데이터 셋에서 효율적
- stream의 경우 병렬 스트림 방식 사용 -> 멀티 코어 이용
- toList와 forEach는 같이 쓰려면 변수에 넣는 식이 아닌 그냥 둬야한다!