Item 21. Default Method

μΈν„°νŽ˜μ΄μŠ€λŠ” κ΅¬ν˜„ν•˜λŠ” μͺ½μ„ 생각해 μ„€κ³„ν•˜λΌ.

Java 8λΆ€ν„°λŠ” μΈν„°νŽ˜μ΄μŠ€λ„ λ””ν΄νŠΈ λ©”μ„œλ“œλ₯Ό 톡해 κ΅¬ν˜„ μ½”λ“œλ₯Ό 포함할 수 있게 λ˜μ—ˆλ‹€. ν•˜μ§€λ§Œ λͺ¨λ“  λ””ν΄νŠΈ λ©”μ„œλ“œλ“€μ΄ κ΅¬ν˜„ ν΄λž˜μŠ€μ— λ§€λ„λŸ½κ²Œ λ™μž‘λ  κ²ƒμ΄λΌλŠ” 보μž₯은 μ—†κΈ° λ•Œλ¬Έμ— μ£Όμ˜ν•΄μ„œ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

Java 8μ—μ„œ 핡심 μ»¬λ ‰μ…˜ μΈν„°νŽ˜μ΄μŠ€μ— λ””ν΄νŠΈ λ©”μ„œλ“œκ°€ μΆ”κ°€λ˜μ—ˆκ³ , μžλ°” 라이브러리의 λ””ν΄νŠΈ λ©”μ„œλ“œλŠ” μ½”λ“œ ν’ˆμ§ˆμ΄ λ†’κ³  잘 λ™μž‘ν•˜μ—¬ 쒋은 예라고 ν•  수 μžˆλ‹€. ν•˜μ§€λ§Œ λͺ¨λ“  λ””ν΄νŠΈ λ©”μ„œλ“œκ°€ 그렇지 μ•Šμ€λ°, κ·Έ μ˜ˆλ‘œλŠ” Collection μΈν„°νŽ˜μ΄μŠ€μ˜ removeIf λ©”μ„œλ“œκ°€ μžˆλ‹€.

// Java 8의 Collection μΈν„°νŽ˜μ΄μŠ€μ˜ removeIf λ©”μ„œλ“œ
public interface Collection<E> extends Iterable<E> {
    
    // ...
    
    default boolean removeIf(Predicate<? super E> filter) {
        Objects.requireNonNull(filter);
        boolean result = false;
        for (Iterator<E> it = iterator(); it.hasNext(); ) {
            if (filter.test(it.next())) {
                it.remove();
                result = true;
            }
        }
        return result;
    }
}

μœ„ μ½”λ“œ μžμ²΄κ°€ λ¬Έμ œκ°€ μžˆλŠ” μ½”λ“œλŠ” μ•„λ‹ˆμ§€λ§Œ, λͺ¨λ“  Collection κ΅¬ν˜„μ²΄μ— 적용될 수 μ—†λ‹€. 예λ₯Ό λ“€μ–΄ μžλ°” ν”Œλž«νΌ λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œλŠ” 이 문제λ₯Ό μ˜ˆλ°©ν•˜κΈ° μœ„ν•΄ μΈν„°νŽ˜μ΄μŠ€μ˜ λ””ν΄νŠΈ λ©”μ„œλ“œλ₯Ό μž¬μ •μ˜ν•˜κ³ , λ‹€λ₯Έ λ©”μ„œλ“œμ—μ„œλŠ” λ””ν΄λ“œ λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜κΈ° 전에 ν•„μš”ν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λ„λ‘ ν•˜μ—¬ ν•΄κ²°ν•˜κ³  μžˆλ‹€. ν•˜μ§€λ§Œ μžλ°” ν”Œλž«νΌμ— μ†ν•˜μ§€ μ•Šμ€ μ„œλ“œ νŒŒν‹° κΈ°μ‘΄ μ»¬λ ‰μ…˜ κ΅¬ν˜„μ²΄λ“€μ€ λ°”λ‘œ λŒ€μ‘μ„ ν•˜μ§€ λͺ»ν•˜μ—¬ λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆλ‹€.(μ•„νŒŒμΉ˜μ˜ SynchronizedCollectionμ—μ„œ 동기화 κ΄€λ ¨ λ¬Έμ œκ°€ λ°œμƒν•œλ‹€.)

κ²°λ‘ 

이처럼 λ””ν΄νŠΈ λ©”μ„œλ“œλŠ” κΈ°μ‘΄ κ΅¬ν˜„μ²΄μ— λŸ°νƒ€μž„ 였λ₯˜λ₯Ό μΌμœΌν‚¬ 수 μžˆμœΌλ‹ˆ, λ””ν΄νŠΈ λ©”μ„œλ“œλ₯Ό μΆ”κ°€ν•˜λŠ” 것은 κΌ­ ν•„μš”ν•œ κ²½μš°κ°€ μ•„λ‹ˆλΌλ©΄ ν”Όν•΄μ•Ό ν•œλ‹€. ν•˜μ§€λ§Œ μƒˆλ‘œμš΄ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μƒμ„±ν•˜λŠ” κ²½μš°μ—” λ””ν΄νŠΈ λ©”μ„œλ“œλ₯Ό 톡해 ν‘œμ€€μ μΈ λ©”μ„œλ“œ κ΅¬ν˜„μ„ μ œκ³΅ν•˜λŠ” 데 μ•„μ£Ό μœ μš©ν•˜κΈ° λ•Œλ¬Έμ— μž₯점은 λ§Žλ‹€.

Last updated