Skip to content

Latest commit

Β 

History

History
51 lines (35 loc) Β· 3.43 KB

File metadata and controls

51 lines (35 loc) Β· 3.43 KB

λ„μš°λ―Έ λ©”μ„œλ“œ

λ„μš°λ―Έ λ©”μ„œλ“œ(Helper Method)λž€, μ–΄λ–€ μž‘μ—…μ„ μˆ˜ν–‰ν•  λ•Œ μ£Ό λ©”μ„œλ“œμ˜ κΈ°λŠ₯을 λ³΄μ‘°ν•˜κ±°λ‚˜ 반볡적인 μž‘μ—…μ„ μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ˜λŠ” 보쑰적인 λ©”μ„œλ“œμž…λ‹ˆλ‹€.

λ„μš°λ―Έ λ©”μ„œλ“œλŠ” μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±μ„ 높이고, μ£Ό λ©”μ„œλ“œμ˜ 가독성을 ν–₯μƒμ‹œν‚€κΈ° μœ„ν•΄ 주둜 μ‚¬μš©λ©λ‹ˆλ‹€.

μ£Ό λ©”μ„œλ“œμ˜ λ³΅μž‘ν•œ μž‘μ—…μ„ μ—¬λŸ¬ μž‘μ€ μž‘μ—…μœΌλ‘œ λ‚˜λˆŒ λ•Œ, 각각의 μž‘μ€ μž‘μ—…μ„ λ„μš°λ―Έ λ©”μ„œλ“œλ‘œ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 μ½”λ“œλ₯Ό λͺ¨λ“ˆν™”ν•˜κ³ , μœ μ§€λ³΄μˆ˜ν•˜κΈ° μ‰½κ²Œ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

1. λ„μš°λ―Έ λ©”μ„œλ“œμ˜ μ—­ν• κ³Ό μ‚¬μš© μ˜ˆμ‹œ

λ„μš°λ―Έ λ©”μ„œλ“œλŠ” λ‹€μŒκ³Ό 같은 μƒν™©μ—μ„œ μœ μš©ν•©λ‹ˆλ‹€:

  1. λ³΅μž‘ν•œ λ‘œμ§μ„ λ‹¨μˆœν™”ν•  λ•Œ: μ£Ό λ©”μ„œλ“œμ—μ„œ νŠΉμ • μž‘μ—…μ„ 반볡적으둜 μ²˜λ¦¬ν•΄μ•Ό ν•˜κ±°λ‚˜ λ³΅μž‘ν•œ 둜직이 ν•„μš”ν•œ 경우, 이λ₯Ό λ³„λ„μ˜ λ„μš°λ―Έ λ©”μ„œλ“œλ‘œ λΆ„λ¦¬ν•¨μœΌλ‘œμ¨ μ£Ό λ©”μ„œλ“œμ˜ 가독성을 λ†’μž…λ‹ˆλ‹€.
  2. μ½”λ“œ 쀑볡을 쀄일 λ•Œ: μ—¬λŸ¬ λ©”μ„œλ“œμ—μ„œ 반볡적으둜 μ‚¬μš©λ˜λŠ” λ‘œμ§μ„ λ„μš°λ―Έ λ©”μ„œλ“œλ‘œ λΆ„λ¦¬ν•˜λ©΄ μ½”λ“œ 쀑볡을 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€.
  3. μΊ‘μŠν™”: νŠΉμ • λ‘œμ§μ„ 외뢀에 λ…ΈμΆœν•˜μ§€ μ•Šκ³  λ‚΄λΆ€μ—μ„œλ§Œ μ‚¬μš©ν•˜κ³  싢을 λ•Œ λ„μš°λ―Έ λ©”μ„œλ“œλ‘œ μ •μ˜ν•©λ‹ˆλ‹€.

1) λ„μš°λ―Έ λ©”μ„œλ“œμ˜ 예

λ‹€μŒμ€ 이전 μ˜ˆμ œμ—μ„œ λ„μš°λ―Έ λ©”μ„œλ“œ(wildcardSwapHelper)의 역할을 μ„€λͺ…ν•œ κ²ƒμž…λ‹ˆλ‹€.

import java.util.List;

class SwapTest {
    // μ™€μΌλ“œμΉ΄λ“œ νƒ€μž…μ„ μ‚¬μš©ν•œ swap λ©”μ„œλ“œ
    public static void wildcardSwap(List<?> list, int i, int j) {
        // λ„μš°λ―Έ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ νƒ€μž… μ•ˆμ „μ„±μ„ 확보
        wildcardSwapHelper(list, i, j);
    }

    // λ„μš°λ―Έ λ©”μ„œλ“œ
    // 이 λ©”μ„œλ“œλŠ” μ œλ„€λ¦­ νƒ€μž… <E>을 μ‚¬μš©ν•˜μ—¬ μ™€μΌλ“œμΉ΄λ“œλ‘œ μ „λ‹¬λœ 리슀트λ₯Ό μ•ˆμ „ν•˜κ²Œ μ²˜λ¦¬ν•©λ‹ˆλ‹€.
    private static <E> void wildcardSwapHelper(List<E> list, int i, int j) {
        // 리슀트의 두 μ›μ†Œλ₯Ό κ΅ν™˜ν•˜λŠ” 둜직
        list.set(i, list.set(j, list.get(i)));
    }
}

2) 이 μ˜ˆμ œμ—μ„œ λ„μš°λ―Έ λ©”μ„œλ“œμ˜ μ—­ν• 

  • wildcardSwap λ©”μ„œλ“œλŠ” List<?> νƒ€μž…μ˜ 리슀트λ₯Ό 받아듀이기 λ•Œλ¬Έμ— 리슀트의 μ›μ†Œ νƒ€μž…μ΄ μ–΄λ–€ 것인지 μ•Œ 수 μ—†μŠ΅λ‹ˆλ‹€. 이 경우, null μ™Έμ˜ 값을 λ¦¬μŠ€νŠΈμ— μΆ”κ°€ν•  수 μ—†μŠ΅λ‹ˆλ‹€.
  • wildcardSwapHelper λ©”μ„œλ“œλŠ” λ„μš°λ―Έ λ©”μ„œλ“œλ‘œμ„œ, μ™€μΌλ“œμΉ΄λ“œ νƒ€μž…μ„ μ‹€μ œ μ œλ„€λ¦­ νƒ€μž… <E>으둜 λ³€ν™˜ν•΄ μ£Όμ–΄ νƒ€μž… μ•ˆμ •μ„±μ„ ν™•λ³΄ν•©λ‹ˆλ‹€. 즉, List<E>둜 νƒ€μž…μ„ μΆ”λ‘ ν•˜κ²Œ ν•˜μ—¬ μ›μ†Œλ₯Ό μ•ˆμ „ν•˜κ²Œ κ΅ν™˜ν•  수 있게 λ©λ‹ˆλ‹€.
  • λ„μš°λ―Έ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•¨μœΌλ‘œμ¨ μ£Ό λ©”μ„œλ“œ(wildcardSwap)λŠ” 더 간단해지고, μ™€μΌλ“œμΉ΄λ“œ νƒ€μž…μ˜ ν•œκ³„λ₯Ό 극볡할 수 μžˆμŠ΅λ‹ˆλ‹€.

3) λ„μš°λ―Έ λ©”μ„œλ“œκ°€ ν•„μš”ν•œ 이유

  • μ™€μΌλ“œμΉ΄λ“œ νƒ€μž…μ˜ μ œν•œ 극볡: List<?>와 같은 μ™€μΌλ“œμΉ΄λ“œ νƒ€μž…μ—μ„œλŠ” νƒ€μž… μ•ˆμ „μ„± 문제둜 인해 null μ™Έμ˜ 값을 μΆ”κ°€ν•  수 μ—†μ§€λ§Œ, λ„μš°λ―Έ λ©”μ„œλ“œμ—μ„œλŠ” νƒ€μž… λ§€κ°œλ³€μˆ˜λ₯Ό λͺ…μ‹œν•΄ μ•ˆμ „ν•˜κ²Œ μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ½”λ“œμ˜ λ‹¨μˆœν™”: λ³΅μž‘ν•œ λ‘œμ§μ„ λ„μš°λ―Έ λ©”μ„œλ“œλ‘œ λΆ„λ¦¬ν•˜λ©΄ μ£Ό λ©”μ„œλ“œμ˜ 가독성이 λ†’μ•„μ§‘λ‹ˆλ‹€.

λ”°λΌμ„œ λ„μš°λ―Έ λ©”μ„œλ“œλŠ” μ£Ό λ©”μ„œλ“œλ₯Ό λ³΄μ‘°ν•˜λ©΄μ„œλ„, νŠΉμ • μž‘μ—…μ„ μ•ˆμ „ν•˜κ²Œ μ²˜λ¦¬ν•˜κ±°λ‚˜ 반볡적인 μž‘μ—…μ„ λͺ¨λ“ˆν™”ν•˜λŠ” 데 μ€‘μš”ν•œ 역할을 ν•©λ‹ˆλ‹€.