<aside> <img src="/icons/clear_red.svg" alt="/icons/clear_red.svg" width="40px" /> DataBase.findAll()에서 forEach하면 왜 key, value가 아니라 key만 됐을까?
Collection의 values에 대해서만 반복문을 돌린다. Map은 따로 forEach 구현이 되어있다고 한다.
Map.java에 구현이 되어있음
// Map.java
default void forEach(BiConsumer<? super K, ? super V> action) {
</aside>
<aside> <img src="/icons/info-alternate_blue.svg" alt="/icons/info-alternate_blue.svg" width="40px" /> **Iterable.java 설명**
이 인터페이스를 구현하면 객체가 향상된 for 문("for-each 루프" 문이라고도 함)의 대상이 될 수 있습니다.
</aside>
<aside> <img src="/icons/info-alternate_blue.svg" alt="/icons/info-alternate_blue.svg" width="40px" /> forEach 설명
모든 요소가 처리되거나 액션에서 예외가 발생할 때까지 이터러블의 각 요소에 대해 지정된 액션을 수행합니다.
반복 순서가 지정된 경우 반복 순서대로 액션이 수행됩니다. 액션이 던진 예외는 호출자에게 전달됩니다.
재정의 클래스에서 동시 수정 정책을 지정하지 않는 한, 액션이 요소의 기본 소스를 수정하는 부작용을 수행하는 경우 이 메서드의 동작은 지정되지 않습니다.
</aside>
// Iterable.java
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
<aside> <img src="/icons/info-alternate_blue.svg" alt="/icons/info-alternate_blue.svg" width="40px" /> <? super T>는 무엇인가요 ?
Java 제네릭스에서 사용되는 와일드카드 타입으로, 특정 타입의 상위 타입만을 허용
사용 예)
<? super T>는 "T 타입 또는 T의 상위 타입"을 의미합니다. 이는 제네릭 타입 매개변수가 T 타입이거나 T 타입의 상위 타입만을 허용하게 합니다.
List<Object> objectList = new ArrayList<>();
List<Number> numberList = new ArrayList<>();
List<Integer> integerList = new ArrayList<>();
addToList(objectList, 10); // Object는 Integer의 상위 타입
addToList(numberList, 10); // Number는 Integer의 상위 타입
// addToList(integerList, 10); // 오류: Integer는 Integer의 상위 타입이 아님
</aside>
<aside> <img src="/icons/info-alternate_blue.svg" alt="/icons/info-alternate_blue.svg" width="40px" /> Consumer 설명
단일 입력 인수를 받아들이고 결과를 반환하지 않는 연산을 나타냅니다. 대부분의 다른 함수형 인터페이스와 달리 Consumer는 부작용을 통해 작동할 것으로 예상됩니다.
함수 메서드가 accept(Object)인 함수형 인터페이스입니다.
void accept(T t)
주어진 인수에 대해 이 연산을 수행합니다.
</aside>
void accept(T t);