Roel Notebook

[comment] 상태를 가지는 객체에 Getter Setter를 쓰지마라?!

by Roel Downey
728x90
반응형

더 성장하기 위해 comment 받은 부분을 기록 하려고 한다. 

 

상황

User 라는 Entity를 만들어라. User에는 email, password가 있다. 지금은 간단하지만 회원가입에 쓰려면 잘 설계 해봐!

 

아 ! 그건 쉽지!! 

class User {
    private final Email email;
    private String password;
    
    public Email getEmail() {
        return email;
    }
    
    public String getPassword() {
        return password;
    }
    
    public void setPassword(String pw) {
        this.password = pw;
    }

}

 

comment

상태를 가지는 객체의 데이터를 get으로 꺼내려 하지말고 객체에 메시지를 보내는 방식으로 작성해보세요. (무조건 사용하지 말라는 뜻은 아니고 출력과 순수값으로 사용하는건 OK) 라는 comment를 받았다. 

 

간단한 방법이 있는데 왜? 라는 궁금증이 생겼다. 

 

객체는 내부 데이터와 구현을 노출시키면 안되고, 접근 메소드와 수정 메소드는 내부 데이터와 구현을 노출시키므로 유지보수에 악영향을 미친다.

정보를 요구하지말고 정보를 가지고 있는 객체에게 일을 해달라고 부탁한다. 

또한 디미터의 법칙을 위반한 예를 참고해서 다양하게 경험해보세요.

라고 두 번째 comment를 받게 되었다. 

 

극단적인 예로 int형을 반환하는 get 메소드를 호출 하는 곳이 1,000 곳이 있는데, 프로그램 수정으로 인해 반환 타입을 long으로 바꾸게 되면 get 메소드를 호출 하는 1,000곳을 모두 수정해야 하는 사태가 발생되죠. 하지만, get을 쓰지 않고 해당 객체에 일을 해달라고 요청하는 형태로 메소드를 수정 하면, 반환 타입이 바뀌더라도 클래스 내부만 수정하면 되니 유지보수가 훨씬 수월해지는 것 입니다.

쉽게 표현 하자면
 "이 속성 값을 줘. 그래야 내가 그 것을 출력할 수 있어" 라고 하지 말고,  "이 속성을 출력해줘"  라고 하는 거죠.


 

 

아직 와닿지 않는다. ㅜㅜ 그렇지만 아래의 참고 자료 링크를 보고 아!! 라는 생각을 하게 되었다. 생각만....

 

참고 자료 링크 

- 객체를 객체스럽게 사용하도록 리팩토링 해라

- getter 메소드를 사용하지 않도록 리팩토링 한다

 

 

 

 

728x90
반응형

블로그의 정보

What doing?

Roel Downey

활동하기