티스토리 뷰

JAVA

getter/setter 메서드를 활용하자

세댕댕이 2022. 7. 23. 00:35

* 이펙티브 자바 2/E를 읽고 공부하기 위해 기록한 게시글입니다.

 

14. public 클래스 안에는 public 필드를 두지말고 접근자 메서드를 사용하라

데이터 필드를 외부에서 직접 조작할 수 있는 클래스는 캡슐화의 이점을 누릴 수 없다.

- API를 변경하지 않고서는 내부 표현을 변경할 수 없고, 불변식도 강제할 수 없고, 필드를 사용하는 순간에 어떤 동작이 실행되도록 만들 수도 없다.

-> private 필드와 public 접근자 메서드(getter)로 변경하라! (변경 가능 클래스라면 수정자 메서드(setter)도 같이..)

= 꼭 getter/setter 메서드가 아니더라도, 메서드를 통해서만 필드에 접근/변경이 가능하도록 만들어라!! 

@Getter @Setter
public class Point {
    private double x;
    private double y;

    public Point(double x, double y) {
        this.x = x;
        this.y = y;
    }
}

 

선언된 패키지 밖에서도 사용가능한 클래스는 getter 메서드를 제공하라. 그래야 클래스 내부 표현을 자유롭게 수정할 수 있게 된다. 

- public 클래스의 데이터 필드를 외부에 공개해버리면 그 내부표현을 변경할 수 없게된다. 변경 시 이미 작성된 클라이언트 코드를 깨뜨리게 되기 때문. (확장에는 열려있고 변경에는 닫혀있는 OCP 원칙 위반?)

 

 

* default 클래스나 private 중첩 내부 클래스(nested class)는 데이터 필드를 public으로 공개하더라도 괜찮다.

- private 중첩 클래스의 경우 그 클래스의 바깥 클래스 외부의 코드는 아무런 영향을 받지 않기 때문.

 

(결론)

public 클래스의 변경 가능 필드private로 선언해두고 메서드(getter/setter 등)를 통해서만 접근/변경이 가능하도록 만들자.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함