Skip to content

Latest commit

Β 

History

History
91 lines (58 loc) Β· 5.56 KB

File metadata and controls

91 lines (58 loc) Β· 5.56 KB

item 22 : μΈν„°νŽ˜μ΄μŠ€λŠ” νƒ€μž…μ„ μ •μ˜ν•˜λŠ” μš©λ„λ‘œλ§Œ μ‚¬μš©ν•˜λΌ

μΈν„°νŽ˜μ΄μŠ€λŠ” μžμ‹ μ„ κ΅¬ν˜„ν•œ 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό μ°Έμ‘°ν•  수 μžˆλŠ” νƒ€μž… 역할을 ν•œλ‹€. 달리 말해, ν΄λž˜μŠ€κ°€ μ–΄λ–€ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œλ‹€λŠ” 것은 μžμ‹ μ˜ μΈμŠ€ν„΄μŠ€λ‘œ 무엇을 ν•  수 μžˆλŠ”μ§€λ₯Ό ν΄λΌμ΄μ–ΈνŠΈμ— μ–˜κΈ°ν•΄μ£ΌλŠ” 것이닀. μΈν„°νŽ˜μ΄μŠ€λŠ” 이와 같은 μš©λ„λ‘œλ§Œ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

1. μ•ˆν‹° νŒ¨ν„΄ : μƒμˆ˜ μΈν„°νŽ˜μ΄μŠ€

μƒμˆ˜ μΈν„°νŽ˜μ΄μŠ€λž€ λ©”μ„œλ“œ 없이, μƒμˆ˜λ₯Ό λœ»ν•˜λŠ” static final ν•„λ“œλ‘œλ§Œ 가득 μ°¬ μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ§ν•œλ‹€.

public interface PhysicalConstants {
    // μ•„λ³΄κ°€λ“œλ‘œ 수 (1/λͺ°)
    static final double AVOGADROS_NUMBER = 6.022_140_857e23;
    // 볼츠만 μƒμˆ˜ (JAO
    static final double BOLTZMW_CONSTANT = 1.380_648_52e-23;
    // μ „μž μ§ˆλŸ‰ (kg)
    static final double ELECTRON_MASS = 9.109_383_56e-31;
}

μƒμˆ˜ μΈν„°νŽ˜μ΄μŠ€ μ•ˆν‹°νŒ¨ν„΄μ€ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 잘λͺ» μ‚¬μš©ν•œ μ˜ˆλ‹€. 클래슀 λ‚΄λΆ€μ—μ„œ μ‚¬μš©ν•˜λŠ” μƒμˆ˜λŠ” μ™ΈλΆ€ μΈν„°νŽ˜μ΄μŠ€κ°€ μ•„λ‹ˆλΌ λ‚΄λΆ€ κ΅¬ν˜„μ— ν•΄λ‹Ήν•œλ‹€. λ”°λΌμ„œ μƒμˆ˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λŠ” 것은 이 λ‚΄λΆ€ κ΅¬ν˜„μ„ 클래슀의 API둜 λ…ΈμΆœν•˜λŠ” ν–‰μœ„λ‹€.

  • μ‚¬μš©μžμ—κ²ŒλŠ” μ•„λ¬΄λŸ° μ˜λ―Έκ°€ μ—†λ‹€. 였히렀 μ‚¬μš©μžμ—κ²Œ ν˜Όλž€μ„ 주기도 ν•˜λ©°, 더 μ‹¬ν•˜κ²ŒλŠ” ν΄λΌμ΄μ–ΈνŠΈ μ½” λ“œκ°€ λ‚΄λΆ€ κ΅¬ν˜„μ— ν•΄λ‹Ήν•˜λŠ” 이 μƒμˆ˜λ“€μ— μ’…μ†λ˜κ²Œ ν•œλ‹€.
  • final이 μ•„λ‹Œ ν΄λž˜μŠ€κ°€ μƒμˆ˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œλ‹€λ©΄ λͺ¨λ“  ν•˜μœ„ 클래슀의 이름곡간이 κ·Έ μΈν„°νŽ˜μ΄μŠ€κ°€ μ •μ˜ν•œ μƒμˆ˜λ“€λ‘œ μ˜€μ—Όλ˜μ–΄ 버린닀.

2. μƒμˆ˜λ₯Ό κ³΅κ°œν•  λ•Œμ˜ μ˜¬λ°”λ₯Έ 방법

1) μƒμˆ˜μ˜ μœ„μΉ˜

μƒμˆ˜λ₯Ό κ³΅κ°œν•  λ•ŒλŠ” κ·Έ μƒμˆ˜κ°€ 어디에 μœ„μΉ˜ν•΄μ•Ό 할지 μ‹ μ€‘νžˆ κ²°μ •ν•΄μ•Ό ν•œλ‹€. μƒμˆ˜κ°€ νŠΉμ • ν΄λž˜μŠ€λ‚˜ μΈν„°νŽ˜μ΄μŠ€μ™€ κ°•ν•˜κ²Œ μ—°κ΄€λ˜μ–΄ μžˆλ‹€λ©΄ κ·Έ ν΄λž˜μŠ€λ‚˜ μΈν„°νŽ˜μ΄μŠ€ 내뢀에 ν¬ν•¨ν•˜λŠ” 것이 μ μ ˆνžˆλ‹€. 예λ₯Ό λ“€μ–΄, μžλ°”μ˜ κΈ°λ³Έ νƒ€μž… λ°•μ‹± 클래슀인 Integer와 Doubleμ—λŠ” 각각 μ΅œμ†Œκ°’κ³Ό μ΅œλŒ€κ°’μ„ λ‚˜νƒ€λ‚΄λŠ” μƒμˆ˜ MIN_VALUE, MAX_VALUEκ°€ ν¬ν•¨λ˜μ–΄ μžˆλ‹€.

2) μ—΄κ±° νƒ€μž… μ‚¬μš©

μƒμˆ˜κ°€ λͺ‡ 가지 ν•œμ •λœ κ°’ 쀑 ν•˜λ‚˜μΌ 경우, μ—΄κ±°ν˜•(enum)을 μ‚¬μš©ν•˜μ—¬ μƒμˆ˜λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 것이 μ’‹λ‹€. 예λ₯Ό λ“€μ–΄, μš”μΌμ΄λ‚˜ λ°©ν–₯을 λ‚˜νƒ€λ‚Ό λ•Œ μ—΄κ±° νƒ€μž…μœΌλ‘œ λ‚˜νƒ€λ‚΄λŠ” 것이 μ μ ˆν•˜λ‹€. μ—΄κ±° νƒ€μž…μ€ κ°’μ˜ μœ νš¨μ„±μ„ 보μž₯ν•˜κ³ , νƒ€μž… μ•ˆμ „μ„±μ„ μ œκ³΅ν•œλ‹€(μ•„μ΄ν…œ 34μ—μ„œ λ‹€λ£Έ)

3) μΈμŠ€ν„΄μŠ€ν™”ν•  수 μ—†λŠ” μœ ν‹Έλ¦¬ν‹° 클래슀 μ‚¬μš©

μ–΄λ–€ ν΄λž˜μŠ€λ‚˜ μΈν„°νŽ˜μ΄μŠ€μ™€ μ§μ ‘μ μœΌλ‘œ μ—°κ΄€λ˜μ§€ μ•Šμ€ μƒμˆ˜λŠ” μΈμŠ€ν„΄μŠ€ν™”ν•  수 μ—†λŠ” μœ ν‹Έλ¦¬ν‹° ν΄λž˜μŠ€μ— λ‹΄μ•„ κ³΅κ°œν•˜λŠ” 것이 μ’‹λ‹€.

μœ ν‹Έλ¦¬ν‹° ν΄λž˜μŠ€λŠ” μƒμˆ˜λ‚˜ 정적 λ©”μ„œλ“œλ₯Ό μ œκ³΅ν•˜λŠ” 클래슀인데, 이 ν΄λž˜μŠ€λŠ” μΈμŠ€ν„΄μŠ€ν™”ν•˜μ§€ μ•Šλ„λ‘ μ„€κ³„λ˜μ–΄μ•Ό ν•œλ‹€. 이λ₯Ό μœ„ν•΄ private μƒμ„±μžλ₯Ό μΆ”κ°€ν•˜μ—¬ μ™ΈλΆ€μ—μ„œ 객체λ₯Ό μƒμ„±ν•˜μ§€ λͺ»ν•˜κ²Œ λ§Œλ“ λ‹€.

μ½”λ“œ μ˜ˆμ‹œ: μƒμˆ˜λ₯Ό ν¬ν•¨ν•œ μœ ν‹Έλ¦¬ν‹° 클래슀

package effectivejava.chapter4.item22.constantutilityclass;

public class PhysicalConstants {
    private PhysicalConstants() { } // μΈμŠ€ν„΄μŠ€ν™” 방지

    // μ•„λ³΄κ°€λ“œλ‘œ 수 (1/λͺ°)
    public static final double AVOGADROS_NUMBER = 6.022_140_857e23;
    
    // 볼츠만 μƒμˆ˜ (J/K)
    public static final double BOLTZMANN_CONSTANT = 1.380_648_52e-23;
    
    // μ „μž μ§ˆλŸ‰ (kg)
    public static final double ELECTRON_MASS = 9.109_383_56e-31;
}

이 μ½”λ“œλŠ” 물리 μƒμˆ˜λ₯Ό 담은 μœ ν‹Έλ¦¬ν‹° 클래슀λ₯Ό μ •μ˜ν•œ μ˜ˆμ‹œμ΄λ‹€. 각 μƒμˆ˜λŠ” public static final둜 μ„ μ–Έλ˜μ–΄ 있으며, μ™ΈλΆ€μ—μ„œ 객체λ₯Ό 생성할 수 없도둝 private μƒμ„±μžκ°€ μΆ”κ°€λ˜μ–΄ μžˆλ‹€.

4) 정적 μž„ν¬νŠΈ (static import) μ‚¬μš©

μœ ν‹Έλ¦¬ν‹° ν΄λž˜μŠ€μ— μ •μ˜λœ μƒμˆ˜λ₯Ό 빈번히 μ‚¬μš©ν•˜λŠ” 경우 정적 μž„ν¬νŠΈλ₯Ό ν™œμš©ν•΄ 클래슀 이름을 μƒλž΅ν•˜κ³  μƒμˆ˜ μ΄λ¦„λ§Œ μ‚¬μš©ν•  수 μžˆλ‹€. 정적 μž„ν¬νŠΈλ₯Ό μ‚¬μš©ν•˜λ©΄ μ½”λ“œκ°€ κ°„κ²°ν•΄μ§€μ§€λ§Œ, λ‚¨μš©ν•˜λ©΄ μ½”λ“œμ˜ 가독성을 λ–¨μ–΄λœ¨λ¦΄ 수 μžˆμœΌλ―€λ‘œ ν•„μš”ν•œ κ²½μš°μ—λ§Œ μ‚¬μš©ν•˜λŠ” 것이 μ’‹λ‹€.

import static effectivejava.chapter4.item22.constantutilityclass.PhysicalConstants.*;

public class Test {
    double atoms(double mols) {
        return AVOGADROS_NUMBER * mols;
    }
}

이 μ˜ˆμ‹œλŠ” PhysicalConstants ν΄λž˜μŠ€μ—μ„œ μƒμˆ˜λ₯Ό 가져와 μ‚¬μš©ν•˜λŠ” μ˜ˆμ΄λ‹€. 정적 μž„ν¬νŠΈλ₯Ό μ‚¬μš©ν–ˆκΈ° λ•Œλ¬Έμ— AVOGADROS_NUMBERλ₯Ό 클래슀 이름 없이 직접 μ‚¬μš©ν•  수 μžˆλ‹€.

✨ μ΅œμ’… 정리

  1. μƒμˆ˜λ₯Ό κ³΅κ°œν•  λ•ŒλŠ” μ—°κ΄€λœ ν΄λž˜μŠ€λ‚˜ μΈν„°νŽ˜μ΄μŠ€ 내뢀에 ν¬ν•¨ν•˜κ±°λ‚˜, 그렇지 μ•Šλ‹€λ©΄ μΈμŠ€ν„΄μŠ€ν™”ν•  수 μ—†λŠ” μœ ν‹Έλ¦¬ν‹° ν΄λž˜μŠ€μ— λ‹΄μ•„μ•Ό ν•œλ‹€.
  2. μƒμˆ˜κ°€ ν•œμ •λœ κ°’μ˜ 집합이라면 μ—΄κ±° νƒ€μž…(enum)으둜 μ •μ˜ν•˜λŠ” 것이 μ μ ˆν•˜λ‹€.
  3. μƒμˆ˜κ°€ 자주 μ‚¬μš©λœλ‹€λ©΄ 정적 μž„ν¬νŠΈ(static import)λ₯Ό 톡해 κ°„νŽΈν•˜κ²Œ μ‚¬μš©ν•  수 μžˆμ§€λ§Œ, κ³Όλ„ν•˜κ²Œ μ‚¬μš©ν•˜μ§€ μ•Šλ„λ‘ μ£Όμ˜ν•΄μ•Ό ν•œλ‹€.
  4. μƒμˆ˜λŠ” public static final둜 μ„ μ–Έν•΄ λΆˆλ³€μ„±μ„ 보μž₯ν•˜κ³ , μœ ν‹Έλ¦¬ν‹° ν΄λž˜μŠ€λŠ” private μƒμ„±μžλ‘œ μΈμŠ€ν„΄μŠ€ν™”λ₯Ό λ°©μ§€ν•œλ‹€.

{% hint style="success" %} μΈν„°νŽ˜μ΄μŠ€λŠ” νƒ€μž…μ„ μ •μ˜ν•˜λŠ” μš©λ„λ‘œλ§Œ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€. μƒμˆ˜ 곡개용 μˆ˜λ‹¨μœΌλ‘œ μ‚¬μš©ν•˜μ§€ 말자. {% endhint %}