계산기Lv2_getter, setter 수정

지혜·2025년 1월 6일

계산기 LV2

💡 https://github.com/cjh0412/calculator

요구사항

  • 컬렉션 타입 필드를 이용하여 연산 결과 저장
  • 저장된 순서대로 삭제하는 기능 구현

조건

  1. 연산 결과를 저장하고 있는 컬렉션 필드에 직접 접근하지 못하도록 수정
  2. getter, setter하여 간접 접근

📌 처음 생각
1. 컬렉션은 들어간 순서대로 출력이 되는 queue를 사용해야겠다!
2. getter에서 삭제되는 값을 출력과 동시에 삭제하자

1차 시도 코드

 Calculator.class
 
	 // 컬렉션 getter, setter
    // 삭제
    public Integer getQueue() {
        return queue.poll();
    }
    // 저장
    public void setQueue(int result) {
        queue.add(result);
    }

But..
아무리 생각해도 getter에서 삭제를 같이 진행한다는 점이 맞지 않다고 생각했다
getter의 주된 역할은 변수 값을 읽어오는데 사용된다는 점이었다.
그런데 삭제될 값을 전달한다는 점에서 getter의 역할과 부합하지만 삭제를 하는건 옳지 않다고 생각했다. 그래서 삭제 메서드를 별도로 만드는 방식으로 수정을 진행했다.

📌수정 의도
1. queue.peek() 데이터 값만 호출
2. queue.poll() 최상위 데이터 검색 및 제거를 이용하여 delete()메서드 생성

결과
-> 값이 2개 이상 저장되고 삭제가 한번도 이뤄지지 않은 경우 n+1번째로 저장 된 값 확인이 어려움
-> queue -> list로 코드를 변경하기로 결정

2차 시도 코드

    // 컬렉션 getter, setter
    // 결과값 가져오기
    public Integer getQueue() {
        return queue.peek();
    }
    // 결과 값 저장
    public void setQueue(int result) {
        queue.add(result);
    }
    // 삭제
    int delete(){return queue.poll();}

📌 오류 발생
1. queue.peek() 데이터 값만 호출
2. queue.poll() 최상위 데이터 검색 및 제거를 이용하여 delete()메서드 생성

3차 시도 코드

    // queue -> list 생성
    List<Integer> list = new ArrayList<>();
    
    Calculator2(List<Integer> list){
        this.list = list;
    }

    // 컬렉션 getter, setter
    public Integer getList() {
        return list.get(list.size()-1);
    }

    public void setList(int result) {
        list.add(result);
    }

    int delete(){
        return list.remove(0);
    }

3차 시도 끝에 위와 같이 코드를 완성했다.
getter/setter를 수정하기 위해 많은 곳을 구글링하게되었다. 그럴때마다 getter/setter 사용을 지양해야한다고 적혀있다.

🤔 getter, setter 왜 쓰는 걸까?
getter, setter를 사용하는 가장 큰 이유는 데이터의 값을 직접적으로 외부에 노출시키지 않기 위해서 이다.
private 필드에 간접 접근을 위해 존재하는 getter/setter 왜 쓰지 말라는 걸까?

해당 내용에 대해선 좀 더 고민 후 추후 정리해 보고자 한다.

0개의 댓글