Collection
여러 데이터의 묶음 (List, Set등등)
Iterator
Stream
컬렉션도 결국엔 데이터의 연속
Iterator보다 효율적이다.
System.in / System.out
Collections.stream()을 제공
filter, map, forEach같은 고차함수(함수를 인자로 받는 함수)가 제공되어 굉장히 편리하다.
Stream을 만드는법
Stream.generate() / Stream.iterate
스트림을 사용하면 연속된 데이터에 대해 풍부한 고차함수 사용하여 강력한 기능을 간결하게 표현 가능하다.
Optional
NPE : Null Pointer Exception → 가장 많이 발생하는 에러중 하나.
자바에서는 거의 모든 것이 레퍼런스다. → null이 될 수 있다.
항상 null check를 해야한다.
이제부터 null을 쓰지 않기로 계약한다.
그럼 어떻게 해야하지?
Empty객체를 사용하는 방법
public static User *EMPTY* = new User(0, "");
Optional을 사용한다. → Optional이 다 해주는데 Empty를 사용해야하나?
Optional
null : Optional.empty();
data : Optional.of({DATA});
check하는법 : isEmpty() / isPresent()
check하는 메서드 : ifPresent() / ifPresentOrElse()
//비어있음
Optional<User> optionalUser = Optional.empty();
//비어있지 않음
Optional<User> optionalUser2 = Optional.of(new User(1, "a"));
if (optionalUser.isEmpty()) { //값이 없으면 true
System.out.println("empty");
}else {
System.out.println("not empty");
}
if (optionalUser.isPresent()) { //값이 있으면 true
System.out.println("not empty");
}else {
System.out.println("empty");
}
optionalUser.ifPresent(user ->{ //값이 있으면 실행
System.out.println("not empty");
});
optionalUser.ifPresentOrElse(user -> { //if else문으로 실행
System.out.println("not empty");
}, ()->{
System.out.println("empty");
});
컬렉션 → 자료구조
이터레이터 → 자료구조를 하나씩 쪼개서 처리하는 수단 (뒤로는 못감)
스트림 → 고차함수를 지원하기 때문에 이터레이터보다 훨씬 효율적이다.
만드는법은 generate와 iterator
옵셔널 → null은 여러 장애를 초래하기 때문에 Optional을 통해 empty상태와 객체가 비어있는지 확인하는 메서드들이 있다.