public class Point {
public double x;
public double y;
// 코드 16-2 접근자와 변경자(mutator) 메서드를 활용해 데이터를 캡슐화한다. (102쪽)
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; }
}
// 코드 16-3 불변 필드를 노출한 public 클래스 - 과연 좋은가? (103-104쪽)
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: " + hour);
if (minute < 0 || minute >= MINUTES_PER_HOUR)
throw new IllegalArgumentException("Min: " + minute);
this.hour = hour;
this.minute = minute;
}
// 나머지 코드 생략
}
p103, 아이템 67에서 설명하듯, 내부를 노출한 Dimesion 클래스의 심각한 성능 문제는 오늘날까지도 해결되지 못했다
public class DimensionExample {
public static void main(String[] args) {
Button button = new Button("hello button");
button.setBounds(0, 0, 20, 10);
Dimension size = button.getSize();
System.out.println(size.height);
System.out.println(size.width);
}
private static void doSometing(Dimension dimension){
Dimension dimension1 = new Dimension();
dimension1 width = dimension1.width;
....
}
}