ITEM 16: Use Accessor methods

class Point {
    public double x;
    public double y;
}

μœ„ ν΄λž˜μŠ€λŠ” μ•„λž˜ λ¬Έμ œμ λ“€μ„ 가지고 μžˆλ‹€.

  • μΊ‘μŠν™” 이점 μ œκ³΅ν•˜μ§€ λͺ»ν•¨(데이터 ν•„λ“œμ— 직접 μ ‘κ·Ό κ°€λŠ₯)

  • λ‚΄λΆ€ ν‘œν˜„ λ³€κ²½μ‹œ API μˆ˜μ • ν•„μš”

  • λΆˆλ³€μ‹ 보μž₯ λΆˆκ°€λŠ₯

  • μ™ΈλΆ€μ—μ„œ ν•„λ“œμ— μ ‘κ·Όν•  λ•Œ λΆ€μˆ˜ μž‘μ—… μˆ˜ν–‰ λΆˆκ°€λŠ₯

μ΄λŸ¬ν•œ λ¬Έμ œμ λ“€μ΄ μ‹«μ–΄ 보톡 μ•„λž˜μ™€ 같이 private ν•„λ“œλ₯Ό public μ ‘κ·Όμžλ‘œ μ ‘κ·Όν•˜λŠ” 방법을 κ΅¬ν˜„ν•œλ‹€.

μ ‘κ·Όμž 방식

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){
        return this.x = x;
    }
    public void setY(double y){
        return this.y = y;
    }
}

νŒ¨ν‚€μ§€ λ°”κΉ₯μ—μ„œ μ ‘κ·Όν•  수 μžˆλŠ” 클래슀라면 μ ‘κ·Όμžλ₯Ό μ œκ³΅ν•˜μ—¬ 클래슀 λ‚΄λΆ€ ν‘œν˜„ 방식을 μ–Έμ œλ“  λ°”κΏ€ 수 μžˆλŠ” μœ μ—°μ„±μ΄ μžˆλ‹€. κ·ΈλŸ¬λ―€λ‘œ public ν΄λž˜μŠ€μ—μ„œ 이 방식은 ν™•μ‹€νžˆ λ§žλ‹€.

ν•˜μ§€λ§Œ, package-private, private 쀑첩 클래슀의 경우 데이터 ν•„λ“œλ₯Ό λ…ΈμΆœν•œλ‹€κ³  해도 κ·Έ ν΄λž˜μŠ€κ°€ ν‘œν˜„ν•˜λ €λŠ” 좔상 κ°œλ…λ§Œ μ˜¬λ°”λ₯΄κ²Œ ν‘œν˜„ν•œλ‹€λ©΄ λ¬Έμ œκ°€ μ—†λ‹€. μ ‘κ·Όμž 방식보닀 훨씬 κΉ”λ”ν•˜λ©°, νŒ¨ν‚€μ§€ λ°”κΉ₯ μ½”λ“œ 신경쓰지 μ•Šκ³  데이터 ν‘œν˜„ 방식을 λ°”κΏ€ 수 μžˆλ‹€.

λΆˆλ³€ ν•„λ“œ

public final class Time {
    private static final int HOURS_PER_DAY = 24;
    private static final int MINUTES_PER_DAY = 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_DAY){
            throw new IllegalArgumentException("λΆ„ : "+ hour);
        }
        this.hour = hour;
        this.minute = minute;
    }
}

λ‹€μŒκ³Ό 같이 public 클래슀의 ν•„λ“œκ°€ λΆˆλ³€μ΄λΌλ©΄ λΆˆλ³€μ‹μ€ 보μž₯ν•  수 μžˆκ²Œλ˜μ–΄ 직접 λ…ΈμΆœν•  λ•Œμ˜ 단점은 μ€„μ§€λ§Œ, μ—¬μ „νžˆ 단점이 μ‘΄μž¬ν•œλ‹€.

  • λ‚΄λΆ€ ν‘œν˜„ λ³€κ²½μ‹œ API μˆ˜μ • ν•„μš”

  • ν•„λ“œλ₯Ό 읽을 λ•Œ λΆ€μˆ˜ μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μ—†λ‹€.

Last updated

Was this helpful?