Item 16. public 필드가 아닌 접근자 메서드를 사용하라

심규환·2022년 1월 25일
0

Effective Java

목록 보기
15/29
post-thumbnail

public 클래스에는 public 필드를 사용하지 않아야 한다. 가능하면 접근자 메서드를 사용하라. 아래는 사용하면 안되는 예이다.

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

이렇게 public으로 필드를 구성하면 외부에서 직접 접근할 수 있기 때문에 캡슐화의 이점을 상실하게 된다. 또 API를 수정하지 않고는 내부 표현 방식을 바꿀 수 없고 불변식을 보장할 수도 없다.
가능하다면 아래와 같이 사용하라.

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;}
}

내부 필드는 private로 선언하고 접근자를 public으로 선언하여 패키지 바깥에서 접근할 수 있도록 해준다. 이렇게 하면 내부 표현 방식을 언제든 바꿀 수 있는 유연성을 얻을 수 있게 된다.

하지만 package-private 클래스 혹은 private 중첩 클래스라면 데이터 필드를 public으로 노출시켜도 괜찮다.
package-private 클래스라면 그 안에서만 사용할 수 있기 때문에 패키지 바깥 코드를 전혀 건드리지 않고 수정이 가능하게 된다.
private 중첩 클래스란 private 클래스 안에 private 클래스가 있는 것인데. 내부적으로 public으로 사용하여도 그 안에서만 놀기 때문에 public 필드를 사용해도 괜찮다.

profile
장생농씬가?

0개의 댓글