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

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

  • λ‹€μŒκ³Ό 같은 ν‡΄λ³΄ν•œ ν΄λž˜μŠ€λŠ” pulblic μ΄μ–΄μ„œλŠ” μ•ˆλ¨
  • μΊ‘μŠν™”λ₯Ό μ œκ³΅ν•˜μ§€ λͺ»ν•¨
  • APIλ₯Ό μˆ˜μ •ν•˜μ§€ μ•Šκ³ λŠ” λ‚΄λΆ€ ν‘œν˜„μ„ λ°”κΏ€ 수 μ—†μŒ
  • λΆˆλ³€μ‹μ„ 보μž₯ν•  수 μ—†μŒ
  • μ™ΈλΆ€μ—μ„œ ν•„λ“œμ— μ ‘κ·Όν•  λ•Œ λΆ€μˆ˜μž‘μ—…μ„ μˆ˜ν–‰ ν•  수 μ—†μŒ
class Point {
    public double x;
    public double y;
}
  • ν•„λ“œλ₯Ό λͺ¨λ‘ private둜 λ³€κ²½
  • public 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 클래슀의 ν•„λ“œλ₯Ό 직접 λ…ΈμΆœν•˜μ§€ λ§λΌλŠ” κ·œμΉ™μ„ μ–΄κΈ΄ 사둀

  • java.awt.package

Point, Dimension class (item 67)

μΈμŠ€ν„΄μŠ€ ν•„λ“œ λΆˆλ³€μΌ 경우 단점

  • public 클래슀의 ν•„λ“œκ°€ λΆˆλ³€μ΄λΌλ©΄ 직접 λ…ΈμΆœν•  λ•Œμ˜ 단점이 μ‘°κΈˆμ€ 쀄어 λ“€μ§€λ§Œ APIλ₯Ό λ³€κ²½ν•˜μ§€ μ•Šκ³ λŠ” ν‘œν˜„ 방식을 λ°”κΏ€ 수 μ—†μŒ
  • ν•„λ“œλ₯Ό 읽을 λ•Œ λΆ€μˆ˜ μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μ—†λ‹€.

핡심 정리

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