item 16 dodo4513 - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki

μ•„μ΄ν…œ16 public ν΄λž˜μŠ€μ—μ„œλŠ” public ν•„λ“œκ°€ μ•„λ‹Œ μ ‘κ·Όμž λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜λΌ

class Point {
    public double x;
    public double y;
}
  • μœ„ ν΄λž˜μŠ€λŠ” 데이터 ν•„λ“œμ— 직접 μ ‘κ·Όν•  수 μžˆμœΌλ‹ˆ μΊ‘μŠν™”μ˜ 이점을 μ œκ³΅ν•˜μ§€ λͺ»ν•œλ‹€.
  • APIλ₯Ό μˆ˜μ •ν•˜μ§€ μ•Šκ³ λŠ” λ‚΄λΆ€ ν‘œν˜„μ„ λ°”κΏ€ 수 μ—†κ³ , λΆˆλ³€μ‹μ„ 보μž₯ν•  μˆ˜λ„ μ—†μœΌλ©°, μ™ΈλΆ€μ—μ„œ ν•„λ“œμ— μ ‘κ·Όν•  λ•Œ λΆ€μˆ˜ μž‘μ—…μ„ μˆ˜ν–‰ν•  μˆ˜λ„ μ—†λ‹€.

getterλ₯Ό μ΄μš©ν•΄ 데이터λ₯Ό μΊ‘μŠν™” ν•˜μž.

class Point {
  private double x;
  private double y;
  public Point(double x, double y) {
    this.x = x;
    this.y = y;
  }
  public double getX() { return x; }
  public double getY() { return y; }
  public void setX(double x) { this.x = x; }
  public void setY(double y) { this.y = y; }
}
  • publicν•œ 클래슀라면 μ ‘κ·Όμžλ₯Ό μ œκ³΅ν•¨μœΌλ‘œμ¨ 클래슀 λ‚΄λΆ€ ν‘œν˜„ 방식을 μ–Έμ œλ“  λ°”κΏ€ 수 μžˆλŠ” μœ μ—°μ„±μ„ 얻을 수 μžˆλ‹€. ν•˜μ§€λ§Œ package-private 클래슀 ν˜Ήμ€ private 쀑첩 클래슀라면 데이터 ν•„λ“œλ₯Ό λ…ΈμΆœν•œλ‹€ 해도 ν•˜λ“±μ˜ λ¬Έμ œκ°€ μ—†λ‹€.

κ·Έλ ‡λ‹€λ©΄ 뢈편 ν•„λ“œλ₯Ό λ…ΈμΆœν•˜λŠ” public ν΄λž˜μŠ€λŠ”?

public final class Time {
  private static final int HOURS_PER_DAY = 24;
  private static final int MINUTES_PER_HOUR = 60;
  public final int hour;
  public final int minute;
  public Time(int hour, int minute)
  {
    if (hour < 0 || hour >= HOURS_PER_DAY)
      throw new IllegalArgumentException ("μ‹œκ°„: " + hour);
    if (minute < 0 || minute >= MINUTES_PER_HOUR)
      throw new IllegalArgumentException ("λΆ„: " + minute);
    this.hour = hour;
    this.minute = minute;
  }
  ... // λ‚˜λ¨Έμ§€ μ½”λ“œ μƒλž΅
}
  • public 클래슀의 ν•„λ“œκ°€ λΆˆλ³€μ΄λΌλ©΄ 직접 λ…ΈμΆœν•  λ•Œμ˜ 단점이 μ‘°κΈˆμ€ μ€„μ–΄λ“€μ§€λ§Œ, μ—¬μ „νžˆ κ²°μ½” 쒋은 생각은 μ•„λ‹ˆλ‹€. APIλ₯Ό λ³€κ²½ν•˜μ§€ μ•Šκ³ λŠ” ν‘œν˜„ 방식을 λ°”κΏ€ 수 μ—†κ³ , ν•„λ“œλ₯Ό 읽을 λ•Œ λΆ€μˆ˜ μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μ—†λ‹€λŠ” 단점은 μ—¬μ „ν•˜κΈ° λ•Œλ¬Έ.
  • 단, λΆˆλ³€μ‹μ€ 보μž₯ν•  수 있게 λœλ‹€.

핡심정리

public ν΄λž˜μŠ€λŠ” μ ˆλŒ€ κ°€λ³€ ν•„λ“œλ₯Ό 직접 λ…ΈμΆœν•΄μ„œλŠ” μ•ˆ λœλ‹€.
λΆˆλ³€ ν•„λ“œλΌλ©΄ λ…ΈμΆœν•΄λ„ 덜 μœ„ν—˜ν•˜μ§€λ§Œ μ™„μ „νžˆ μ•ˆμ‹¬ν•  μˆ˜λŠ” μ—†λ‹€.
ν•˜μ§€λ§Œ package-private ν΄λž˜μŠ€λ‚˜ private 쀑첩 ν΄λž˜μŠ€μ—μ„œλŠ” μ’…μ’… (λΆˆλ³€μ΄λ“  가변이든) ν•„λ“œλ₯Ό λ…ΈμΆœν•˜λŠ” 편이 λ‚˜μ„ λ•Œλ„ μžˆλ‹€.

⚠️ **GitHub.com Fallback** ⚠️