[μ΄νŽ™ν‹°λΈŒ μžλ°”] Item4. μΈμŠ€ν„΄μŠ€ν™”λ₯Ό λ§‰μœΌλ €κ±°λ“  private μƒμ„±μžλ₯Ό μ‚¬μš©ν•˜λΌ.

2023. 1. 11. 11:46ㆍJAVA/Effective JAVA

728x90

 

item04. μΈμŠ€ν„΄μŠ€ν™”λ₯Ό λ§‰μœΌλ €κ±°λ“  private μƒμ„±μžλ₯Ό μ‚¬μš©ν•˜λΌ. 

 

μΈμŠ€ν„΄μŠ€ν™”λ₯Ό 막아야 ν•˜λŠ” μ„±κ²©μ˜ ν΄λž˜μŠ€λ“€μ΄ μ‘΄μž¬ν•˜λŠ”λ° κ·Έ 쀑 λŒ€ν‘œμ μΈ? 것이 정적 λ©”μ„œλ“œλ§Œμ„ 담은 μœ ν‹Έλ¦¬ν‹° ν΄λž˜μŠ€λŠ” μΈμŠ€ν„΄μŠ€λ‘œ λ§Œλ“€μ–΄ μ“°λ €κ³  μ„€κ³„ν•œ ν΄λž˜μŠ€κ°€ μ•„λ‹ˆλ‹€. 

 

 

μΈμŠ€ν„΄μŠ€ν™” λ§‰λŠ” 방법

 

1) 좔상 클래슀둜 λ§Œλ“€κΈ° 

public abstract class UtilityClass {

    public static String hello() {
        return "hello";
    }
}

μ΄λŸ°μ‹μœΌλ‘œ μΆ”μƒν΄λž˜μŠ€λ‘œ μ„ μ–Έν•΄μ„œ μΈμŠ€ν„΄μŠ€ν™” ν•˜λŠ” 것을 막을 μˆ˜λŠ” μžˆμ§€λ§Œ.. 

μ΄λŠ” μ„œλΈŒν΄λž˜μŠ€λ‘œ ν•΄λ‹Ή 클래슀λ₯Ό μƒμ†λ°›μœΌλ©΄ μΈμŠ€ν„΄μŠ€ν™”λ₯Ό ν•  수 있기 λ•Œλ¬Έμ— μ™„λ²½νžˆ 막을 μˆ˜λŠ” μ—†λ‹€.

 

 

2) private μƒμ„±μž μΆ”κ°€ 

μ±…μ—μ„œλŠ” 1) λ°©λ²•λ³΄λ‹€λŠ” 2) 방법을 더 ꢌμž₯ν•˜κ³  μžˆλ‹€. 

μ™œλƒν•˜λ©΄ 1)은 μ™„λ²½νžˆ μΈμŠ€ν„΄μŠ€ν™”λ₯Ό 막을 μˆ˜λŠ” μ—†κΈ° λ•Œλ¬Έμ— λΆˆμΆ©λΆ„ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€! 

public class UtilityClass {

    /**
     * 이 ν΄λž˜μŠ€λŠ” μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“€ 수 μ—†μŠ΅λ‹ˆλ‹€.
     */
    private UtilityClass() {
        // λ‚΄λΆ€μ—μ„œλ„ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜μ§€ λͺ»ν•˜λ„둝 ν•˜κΈ° μœ„ν•΄μ„œλŠ”
        // μ—λŸ¬λ₯Ό 던져쀌으둜써 이 μ½”λ“œλŠ” λ§Œλ‚˜λ©΄? μ•ˆλœλ‹€κ³  μ–˜κΈ°ν•΄μ£ΌλŠ” 것이닀.
        // try-catch둜 μž‘μ„ ν•„μš” μ—†μŒ
        throw new AssertionError();
    }

    public static String hello() {
        return "hello";
    }
}

 

public class Main04 {

    public static void main(String[] args) {
        String hello = UtilityClass.hello();
    }
}

μ΄λ ‡κ²Œ private μƒμ„±μžλ₯Ό μΆ”κ°€ν•΄μ£Όλ©΄ 클래슀의 μΈμŠ€ν„΄μŠ€ν™”λ₯Ό 막을 수 μžˆλ‹€.

근데 단점? 이라고 ν•˜λ©΄ ꡳ이 μ•ˆμ‚¬μš©ν•˜λŠ” μ½”λ“œλ₯Ό λ„£μ–΄μ•Ό ν•˜λ‚˜?에 λŒ€ν•œ 문제?κ°€ μžˆλ‹€. 

μ΄λŠ” μœ„μ— μ½”λ“œμ— μ£Όμ„μ²˜λŸΌ private μƒμ„±μžλ₯Ό κ΅¬ν˜„ν•œ μ΄μœ μ— λŒ€ν•΄μ„œ μ„€λͺ…ν•΄μ£ΌλŠ” 것이 μ’‹λ‹€. 

 

μ΄λ ‡κ²Œ μƒμ„±μžλ₯Ό private둜 μ„ μ–Έν•΄μ£ΌλŠ” 방법은 상속을 방지할 λ•Œλ„ 같은 방법을 μ‚¬μš©ν•  수 μžˆλ‹€. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90