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

νŒ¨ν‚€μ§€ λ°”κΉ₯μ—μ„œ μ ‘κ·Όν•  수 μžˆλŠ” 클래슀라면 μ ‘κ·Όμžλ₯Ό μ œκ³΅ν•˜λΌ

ν‡΄λ³΄ν•œ 클래슀

class Point {
	public double x;
	public double y;
}
  • 단점
    • λ‚΄λΆ€ ν‘œν˜„μ„ λ°”κΎΈλ €λ©΄ APIλ₯Ό μˆ˜μ •ν•΄μ•Ό 함
    • λΆˆλ³€μ‹ 보μž₯ X
    • μ™ΈλΆ€μ—μ„œ ν•„λ“œμ— μ ‘κ·Όν•  λ•Œ λΆ€μˆ˜ μž‘μ—… μˆ˜ν–‰ λͺ»ν•¨

μΊ‘μŠν™”ν•œ 클래슀

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; }
}
  • μž₯점
    • λ‚΄λΆ€λ₯Ό μ–Έμ œλ“  λ°”κΏ€ 수 μžˆλŠ” μœ μ—°μ„±

package-private(default) ν΄λž˜μŠ€λ‚˜ private 쀑첩(nested) ν΄λž˜μŠ€λŠ” 데이터 ν•„λ“œλ₯Ό λ…ΈμΆœν•΄λ„ λ¬Έμ œκ°€ μ—†λ‹€.

  • 클래슀 μ„ μ–Έ 및 μ‚¬μš©ν•˜λŠ” μ½”λ“œ λ©΄μ—μ„œ μ ‘κ·Όμž 방식보닀 훨신 깔끔
  • ν•΄λ‹Ή 클래슀λ₯Ό ν¬ν•¨ν•˜λŠ” νŒ¨ν‚€μ§€ μ•ˆμ—μ„œλ§Œ λ™μž‘ν•˜λŠ” μ½”λ“œμ΄κΈ°μ— νŒ¨ν‚€μ§€ λ°”κΉ₯ μ½”λ“œμ— μ „ν˜€ μ†λŒ€μ§€ μ•Šκ³  데이터 ν‘œν˜„ 방식 변경이 κ°€λŠ₯
  • private 쀑첩 ν΄λž˜μŠ€λŠ” 이 클래슀λ₯Ό ν¬ν•¨ν•˜λŠ” μ™ΈλΆ€ ν΄λž˜μŠ€κΉŒμ§€λ‘œ μˆ˜μ • λ²”μœ„κ°€ 더 쒁닀

public 클래슀의 ν•„λ“œλ₯Ό 직접 λ…ΈμΆœμ‹œν‚¨ 사둀

  • java.awt.package의 Point와 Dimension (아직도 ν•΄κ²°λ˜μ§€ λͺ»ν–ˆλ‹€, item67)

public 클래슀의 final ν•„λ“œλ₯Ό 직접 λ…ΈμΆœν–ˆμ„ λ•Œ

  • λΆˆλ³€μ‹μ€ 보μž₯ν•  수 μžˆλ‹€.
  • 단점
    • λ‚΄λΆ€ ν‘œν˜„μ„ λ°”κΎΈλ €λ©΄ APIλ₯Ό μˆ˜μ •ν•΄μ•Ό 함
    • μ™ΈλΆ€μ—μ„œ ν•„λ“œμ— μ ‘κ·Όν•  λ•Œ λΆ€μˆ˜ μž‘μ—… μˆ˜ν–‰ λͺ»ν•¨
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 ν΄λž˜μŠ€λŠ” μ ˆλŒ€ κ°€λ³€ ν•„λ“œλ₯Ό 직접 λ…ΈμΆœν•΄μ„œλŠ” μ•ˆλœλ‹€.
  • λΆˆλ³€ ν•„λ“œμ˜ λ…ΈμΆœλ„ μ•ˆ ν•˜λŠ” 것이 μ’‹λ‹€.
  • package-private(default) ν΄λž˜μŠ€λ‚˜ private 쀑첩 ν΄λž˜μŠ€μ—μ„œλŠ” (λΆˆλ³€μ΄λ“  μ•„λ‹ˆλ“ ) ν•„λ“œλ₯Ό λ…ΈμΆœν•˜λŠ” 것이 λ‚˜μ„ λ•Œλ„ μžˆλ‹€.

참고 자료