[μ΄νŽ™ν‹°λΈŒ μžλ°”] Item2. μƒμ„±μžμ— λ§€κ°œλ³€μˆ˜κ°€ λ§Žλ‹€λ©΄ λΉŒλ”λ₯Ό κ³ λ €ν•˜λΌ. (점측적 μƒμ„±μž νŒ¨ν„΄, μžλ°”λΉˆμ¦ˆ νŒ¨ν„΄)

2023. 1. 5. 09:07ㆍJAVA/Effective JAVA

728x90

 

μ•„μ΄ν…œ2. μƒμ„±μžμ— λ§€κ°œλ³€μˆ˜κ°€ λ§Žλ‹€λ©΄ λΉŒλ”λ₯Ό κ³ λ €ν•˜λΌ.  

μ•žμ—μ„œ λ°°μ› λ˜ 정적 νŒ©ν„°λ¦¬μ™€ μƒμ„±μžμ—λŠ” μ œμ•½μ΄ μžˆλŠ”λ°, 선택적 λ§€κ°œλ³€μˆ˜κ°€ λ§Žμ„ κ²½μš°μ— μ μ ˆν•˜κ²Œ λŒ€μ‘ν•˜κΈ° μ–΄λ ΅λ‹€λŠ” 점이닀. 

 

예λ₯Ό λ“€μ–΄ μ‹ν’ˆ 포μž₯ μ˜μ–‘ 정보λ₯Ό ν‘œν˜„ν•˜λŠ” ν΄λž˜μŠ€κ°€ μžˆλ‹€.

μ˜μ–‘ μ •λ³΄λŠ” 1회 λ‚΄μš©λŸ‰, 총 n회 μ œκ³΅λŸ‰ 같은 ν•„μˆ˜ ν•­λͺ©κ³Ό 총 지방, 트랜슀 지방, 포화 지방, 콜레슀트둀, λ‚˜νŠΈλ₯¨ λ“± 20κ°œκ°€ λ„˜λŠ” 선택항λͺ©μœΌλ‘œ 이루어져 μžˆλ‹€.  근데 이 선택항λͺ©μ˜ 값은 λŒ€λ‹€μˆ˜ 0이닀. 

 

μ΄λ ‡κ²Œ 선택적 λ§€κ°œλ³€μˆ˜κ°€ λ§Žμ„ λ•Œ κ³ λ €ν•  수 μžˆλŠ” λ°©μ•ˆμœΌλ‘œ λ¨Όμ € 점측적 μƒμ„±μž νŒ¨ν„΄ λ˜λŠ” μƒμ„±μž 체이닝이라고 λΆˆλ¦¬μ˜€λŠ”κ²Œ μžˆλ‹€. 

λŒ€μ•ˆ1. 점측적 μƒμ„±μž νŒ¨ν„΄ λ˜λŠ” μƒμ„±μž 체이닝 

servingSize, servingsλŠ” ν•„μˆ˜ λ§€κ°œλ³€μˆ˜μ΄κ³ , λ‚˜λ¨Έμ§€λŠ” 선택 λ§€κ°œλ³€μˆ˜μ΄λ‹€. 

 

public NutritionFacts(int servingSize, int servings) {
//        this.servingSize = servingSize;
//        this.servings = servings;
//        this.calories = 0;
//        this.fat = 0;
//        this.sodium= 0;
//        this.carbohydrate = 0;
        this(servingSize, servings, 0); // 점측적 μƒμ„±μž νŒ¨ν„΄
    }

    public NutritionFacts(int servingSize, int servings, int calories) {
//        this.servingSize = servingSize;
//        this.servings = servings;
//        this.calories = calories;
//        this.fat = 0;
//        this.sodium= 0;
//        this.carbohydrate = 0;
        this(servingSize, servings, calories, 0);
    }

    public NutritionFacts(int servingSize, int servings, int calories, int fat) {
//        this.servingSize = servingSize;
//        this.servings = servings;
//        this.calories = calories;
//        this.fat = fat;
//        this.sodium= 0;
//        this.carbohydrate = 0;
        this(servingSize, servings, calories, fat, 0);
    }

    public NutritionFacts(int servingSize, int servings, int calories, int fat, int sodium) {
//        this.servingSize = servingSize;
//        this.servings = servings;
//        this.calories = calories;
//        this.fat = fat;
//        this.sodium = sodium;
//        this.carbohydrate = 0;
        this(servingSize, servings, calories, fat, sodium, 0);
    }

    public NutritionFacts(int servingSize, int servings, int calories, int fat, int sodium, int carbohydrate) {
        this.servingSize = servingSize;
        this.servings = servings;
        this.calories = calories;
        this.fat = fat;
        this.sodium = sodium;
        this.carbohydrate = carbohydrate;
    }

점측적 μƒμ„±μž νŒ¨ν„΄μ€ ν•„μˆ˜ λ§€κ°œλ³€μˆ˜λ§Œ λ°›λŠ” μƒμ„±μž, ν•„μˆ˜ λ§€κ°œλ³€μˆ˜μ™€ 선택 λ§€κ°œλ³€μˆ˜ 1개λ₯Ό λ°›λŠ” μƒμ„±μž, 선택 λ§€κ°œλ³€μˆ˜ 2개λ₯Ό λ°›λŠ” μƒμ„±μž.. ν˜•νƒœλ‘œ 선택 λ§€κ°œλ³€μˆ˜ μ „λΆ€ λ°›λŠ” μƒμ„±μžκΉŒμ§€ λŠ˜λ €κ°€λŠ” 방식이닀. 

μ΄λ ‡κ²Œ λ§Œλ“€μ–΄λ‘λ©΄ 이 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“€λ €λ©΄ μ›ν•˜λŠ” λ§€κ°œλ³€μˆ˜λ₯Ό λͺ¨λ‘ ν¬ν•¨ν•œ μƒμ„±μž 쀑 κ°€μž₯ 짧은 것을 κ³¨λΌμ„œ μ‚¬μš©ν•˜λ©΄ λœλ‹€. 

 

πŸ“ƒ 점측적 μƒμ„±μž νŒ¨ν„΄μ„ μ‚¬μš©ν•  μˆ˜λ„ μžˆλŠ”λ°, μ΄λŠ” λ§€κ°œλ³€μˆ˜μ˜ κ°œμˆ˜κ°€ λ§Žμ•„μ§€λ©΄ ν΄λΌμ΄μ–ΈνŠΈ μ½”λ“œλ₯Ό μž‘μ„±ν•˜κ±°λ‚˜ 읽기 μ–΄λ ΅λ‹€. 

μ½”λ“œλ₯Ό 읽을 λ•Œ 각 κ°’μ˜ μ˜λ―Έκ°€ 무엇인지 νŒŒμ•…ν•˜κΈ° μ–΄λ ΅κ³ , λ§€κ°œλ³€μˆ˜κ°€ λͺ‡κ°œμΈμ§€ μ£Όμ˜ν•΄μ„œ μ„Έμ–΄ 보아야 ν•œλ‹€. 

그리고 ν΄λΌμ΄μ–ΈνŠΈκ°€ μ‹€μˆ˜λ‘œ λ§€κ°œλ³€μˆ˜μ˜ μˆœμ„œλ₯Ό λ°”κΏ” κ±΄λ„€μ€˜λ„ μ»΄νŒŒμΌλŸ¬λŠ” μ•Œμ•„μ±„κΈ° μ–΄λ ΅κ³ , κ²°κ΅­ λŸ°νƒ€μž„μ— μ΄μƒν•˜κ²Œ λ™μž‘ν•˜κ²Œ 될 것이닀. 

(μ§€κΈˆμ€ μœ„μ— 캑쳐 ν™”λ©΄κ³Ό 같이 IDE 특히 μΈν…”λ¦¬μ œμ΄μ—μ„œ μ’€ 더 μ‰½κ²Œ νŒŒμ•…ν•  수 μžˆλ„λ‘ κΈ°λŠ₯을 μ œκ³΅ν•΄μ£Όκ³  μžˆμ§€λ§Œ, μ΄λ ‡κ²Œ μ œκ³΅ν•΄μ£Όμ§€ μ•ŠλŠ” IDE도 μžˆμœΌλ‹ˆκΉŒ..) 

 

 

μƒμ„±μžμ— λ§€κ°œλ³€μˆ˜κ°€ λ§Žμ„ λ•Œ κ³ λ €ν•  수 μžˆλŠ” 또 λ‹€λ₯Έ λ°©μ•ˆμœΌλ‘œλŠ” μžλ°”λΉˆμ¦ˆ νŒ¨ν„΄μ΄ μžˆλ‹€. 

 

λŒ€μ•ˆ2. μžλ°”λΉˆμ¦ˆ νŒ¨ν„΄ 

μžλ°”λΉˆμ¦ˆ νŒ¨ν„΄μ€ λ§€κ°œλ³€μˆ˜κ°€ μ—†λŠ” μƒμ„±μžλ‘œ 객체λ₯Ό λ§Œλ“  ν›„, setter λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•΄μ„œ μ›ν•˜λŠ” λ§€κ°œλ³€μˆ˜μ˜ 값을 μ„€μ •ν•˜λŠ” 방식이닀. 

μžλ°”λΉˆμ¦ˆ νŒ¨ν„΄μ—μ„œλŠ” μœ„μ— 점측적 μƒμ„±μž νŒ¨ν„΄μ˜ 단점은 보이지 μ•Šκ³ , μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“€κΈ° μ‰¬μ›Œμ‘Œκ³ , κ·Έ κ²°κ³Ό 더 읽기 μ‰¬μš΄ μ½”λ“œκ°€ 됐닀. 

μ΄λ ‡κ²Œλ§Œ 보면 μžλ°”λΉˆμ¦ˆ νŒ¨ν„΄μ΄ μ’‹μ•„λ³΄μ΄μ§€λ§Œ,,, 쑰금만 생각해보면 μžλ°”λΉˆμ¦ˆ νŒ¨ν„΄μ€ μ‹¬κ°ν•œ 단점을 가지고 μžˆλ‹€. 

μžλ°”λΉˆμ¦ˆ 객체λ₯Ό 생성해야 ν•œλ‹€λ©΄ μœ„μ— μ˜ˆμ‹œ?와 같이 ν•˜λ‚˜μ˜ 객체λ₯Ό μƒμ„±ν•˜λŠ”λ° λ©”μ„œλ“œλ₯Ό μ—¬λŸ¬ 개 ν˜ΈμΆœν•΄μ•Ό ν•˜κ³ , 

객체가 μ™„μ „νžˆ μƒμ„±λ˜κΈ° μ „κΉŒμ§€ 일관성 consistencyκ°€ λ¬΄λ„ˆμ§„ μƒνƒœμ— λ†“μ΄κ²Œ λœλ‹€. 

 

점측적 μƒμ„±μž νŒ¨ν„΄μ—μ„œλŠ” λ§€κ°œλ³€μˆ˜λ“€μ΄ μœ νš¨ν•œμ§€ μƒμ„±μžμ—μ„œ μœ νš¨μ„± 체크만 ν•΄μ£Όλ©΄ 일관성을 μœ μ§€ν•  수 μžˆμ—ˆλ˜ 반면, 

μžλ°”λΉˆμ¦ˆ νŒ¨ν„΄μ—μ„œλŠ” 그럴 수 μ—†λ‹€..

 

μ΄λ ‡κ²Œ 일관성이 λ¬΄λ„ˆμ§€λŠ” λ¬Έμ œλ•Œλ¬Έμ— μžλ°”λΉˆμ¦ˆ νŒ¨ν„΄μ—μ„œλŠ” 클래슀λ₯Ό λΆˆλ³€μœΌλ‘œ λ§Œλ“€ μˆ˜μ—†κ³ , μŠ€λ ˆλ“œμ—μ„œ μ•ˆμ •μ„±μ„ μ–»κΈ° μœ„ν•΄μ„œλŠ” ν”„λ‘œκ·Έλž˜λ¨Έκ°€ μΆ”κ°€ μž‘μ—…μ„ ν•΄μ€˜μ•Ό ν•œλ‹€. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90