TIL/JAVA

[TIL] Getter와 Setter를 사용하는 이유를 항상 고민하자

Dream COM Ddulut 2024. 11. 14. 23:14

오늘은 계산기 만들기 과제 Lv2를 구현했다.

과제 안에 Getter, Setter를 활용할 것을 요구하는 내용이 있었다. 
Getter와 Setter를 만드는 법은 아니까 배운대로 척척 만들었는데, 완성 된 코드를 보는 순간 '내가 만든 Getter, Setter가 무슨 의미가 있는거지?...'라는 의문이 들었다.

 

아래는 내가 초기에 만든 Getter, Setter다.

private Deque<Integer> ansList=new LinkedList<>();

public Deque<Integer> getAnsList(){
    return ansList;
}

public void setAnsList(Deque<Integer> ansList){
    this.ansList=ansList;
}


코드를 보면 알겠지만, '안에 있는 내용 어차피 다 보여주고, 다 바꿀 수 있게해주면, Getter, Setter를 만드는게 무슨 소용인가' 싶었다. 그냥 가져다가 쓰면 되는거 아닌가?

갑자기 내가 Getter, Setter에 대해 제대로 알고 있는게 맞나 혼란스러워져서 이번에는 빠르게 튜터님을 찾아갔다.

코드를 보여드리자마자,  Getter, Setter는 잘 만든게 맞다고 하셨다, 하지만 '왜 캡슐화를 사용하는가? Getter, Setter를 왜 사용하는가?'등 이 것 외에도 항상 '왜?'를 고민해야한다고 조언해주셨다. 

(무엇을 하든지 목적을 가지고 해야한다는 의미로 이해했다.)

그리고 이어서 지금 내가 짠 코드는 사용자에게 모든 것을 노출하고 있기 때문에 사실상  Getter, Setter를 사용하는 의미가 없다고 하셨다. (맞아요! 제 고민이 바로 그거였어요!🥹)



🟡 그래서 결론은 무엇이냐? 

Getter, Setter에 정답은 없다! 개발자 마음대로다! 

내가 사용자에게 어디까지 보여주고싶은지, 어디까지 접근해서 변경하도록 허락할 것인지, 어떤 조건을 만족하는 값만 입력되도록 할 것인지! 이런 부분을 깊이 고민하고 설계하면 된다고 하셨다. 

그동안 나는 Getter, Setter를 사용할 때 필드의 값을 전부 활용해야한다고 착각하고있었다.

항상 int, String 타입 필드를 가지고 Getter, Setter를 만든 예시만 보다가, 

갑자기 컬랙션 필드에 대한 Getter, Setter를 구현하라는 요청을 받으니 혼란스러웠던 것이다. 

 

튜터님과 질의응답을 진행한 후에야 문제에서 이야기하는 '구현한 Getter, Setter를 main 메서드 위에서 활용 해봅시다.'가 무슨 뜻인지 이해가 갔다...

그래서 Getter, Setter를 다음과 같이 수정해보았다.

    /*Getter*/
    public int getAnsList(){
        int lastIndex=ansList.size()-2;
        if(lastIndex<0){
            System.out.println("이전 기록이 없습니다. 0을 반환합니다.");
            return 0;
        }else return ansList.get(lastIndex); //이전 값 출력
    }

    /*Setter*/
    public void setAnsList(int num){
        if(ansList.isEmpty()){
            ansList.add(num); //list 가 비어있는 경우 새 값 추가.
        }else ansList.set(0,num); //첫 번째 값을 원하는 값으로 변경
    }


그리고 수정된 Getter, Setter는 List에서 제일 마지막 값 이전 값을 제공하고, 또, List의 첫번째 값을 원하는 값으로 변경하는데에 활용해보았다.

 

아직은 내가 제대로 잘 한 것인지에 대해 확신이 없지만, 앞으로 많이 경험해 나가면서 감을 잡아나가야겠다!!


 


[후기]
정확히, 구체적으로 질문하는게 너무 어렵다... 아직도 자꾸 뭉뚱그려서 질문하게 되는데 질문에도 연습이 많이 필요할 것 같다.