Item 30. Generic Method

이왕이면 μ œλ„€λ¦­ λ©”μ„œλ“œλ‘œ λ§Œλ“€λΌ

λ©”μ„œλ“œλ„ μ œλ„€λ¦­μœΌλ‘œ λ§Œλ“€ 수 μžˆλŠ”λ°, 이λ₯Ό μ œλ„€λ¦­ λ©”μ„œλ“œλΌκ³  ν•˜λ©°, Collections의 sort λ©”μ„œλ“œκ°€ λŒ€ν‘œμ μΈ μ˜ˆμ΄λ‹€. λͺ…λͺ… κ·œμΉ™μ΄λ‚˜ μ‚¬μš© 방법은 μ œλ„€λ¦­ ν΄λž˜μŠ€μ™€ λ™μΌν•˜λ‹€.


class Test {

    public static <E> Set<E> union(Set<E> s1, Set<E> s2) {
        Set<E> result = new HashSet<>(s1);
        result.addAll(s2);
        return result;
    }

    public static void main(String[] args) {
        Set<String> a = Set.of("a", "b", "c");
        Set<String> b = Set.of("d", "e", "f");
        Set<String> c = union(a, b);
    }
}

λ§ˆμ°¬κ°€μ§€λ‘œ ν•œμ •μ  μ™€μΌλ“œμΉ΄λ“œ νƒ€μž…μœΌλ‘œ 더 μœ μ—°ν•˜κ²Œ λ§Œλ“€ 수 μžˆλ‹€.

μ œλ„€λ¦­ μ‹±κΈ€ν„΄ νŒ©ν„°λ¦¬

λΆˆλ³€ 객체λ₯Ό μ—¬λŸ¬ νƒ€μž…μœΌλ‘œ ν™œμš©ν•  수 있게 λ§Œλ“€μ–΄μ•Ό ν•  λ•Œκ°€ μžˆλ‹€. μ œλ„€λ ‰μ€ λŸ°νƒ€μž„μ— νƒ€μž… 정보가 μ†Œκ±°λ˜κΈ° λ•Œλ¬Έμ— ν•˜λ‚˜μ˜ 객체λ₯Ό μ–΄λ–€ νƒ€μž…μœΌλ‘œ λ§€κ°œλ³€μˆ˜ν™” ν•  수 μžˆλŠ”λ°, 이λ₯Ό μœ„ν•΄μ„  νƒ€μž…μ„ λ°”κΏ”μ£ΌλŠ” 정적 νŒ©ν„°λ¦¬λ₯Ό λ§Œλ“€μ–΄μ•Ό ν•œλ‹€. 정적 νŒ©ν„°λ¦¬ λ©”μ„œλ“œμ—μ„œλŠ” μš”μ²­ν•œ νƒ€μž… λ§€κ°œλ³€μˆ˜μ— 맞게 κ·Έ 객체의 νƒ€μž…μ„ λ°”κΏ”μ£ΌλŠ” 역할을 μˆ˜ν–‰ν•˜κ²Œ 되며, 이 νŒ¨ν„΄μ„ μ œλ„€λ¦­ μ‹±κΈ€ν„΄ νŒ©ν„°λ¦¬λΌκ³  ν•œλ‹€.

μ œλ„€λ¦­ μ‹±κΈ€ν„΄ νŒ©ν„°λ¦¬λ₯Ό ν•­λ“±ν•¨μˆ˜λ₯Ό 담은 클래슀의 λ©”μ„œλ“œμ— μ μš©ν•˜λ©΄ μ•„λž˜μ™€ 같이 μ‚¬μš©ν•  수 μžˆλ‹€.

μž¬κ·€μ  νƒ€μž… ν•œμ •(recursive type bound)

자기 μžμ‹ μ΄ λ“€μ–΄κ°„ ν‘œν˜„μ‹μ„ μ‚¬μš©ν•΄ νƒ€μž… λ§€κ°œλ³€μˆ˜μ˜ ν—ˆμš© λ²”μœ„λ₯Ό ν•œμ •ν•˜λŠ” μž¬κ·€μ  νƒ€μž… ν•œμ •μ΄λΌλŠ” κ°œλ…λ„ μ‘΄μž¬ν•œλ‹€. μž¬κ·€μ  νƒ€μž… ν•œμ •μ€ 주둜 Comparable μΈν„°νŽ˜μ΄μŠ€μ™€ ν•¨κ»˜ μ‚¬μš©ν•œλ‹€.

값을 μƒν˜Έ λΉ„κ΅ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ»¬λ ‰μ…˜μ— λ‹΄κΈ΄ λͺ¨λ“  μ›μ†Œκ°€ μƒν˜Έ 비ꡐ될 수 μžˆμ–΄μ•Ό ν•œλ‹€. Collection의 max λ©”μ„œλ“œλ„ μ •μƒμ μœΌλ‘œ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄μ„  μƒν˜Έ 비ꡐ가 λ˜μ•Όν•˜λ―€λ‘œ Tκ°€ Comparable을 κ΅¬ν˜„ν•˜λ„λ‘ μ œν•œν•˜κ³  μžˆλ‹€.

Last updated

Was this helpful?