개발 R.I.P.

5/19 Dev.Feedback (계산기 구현)

편행 2021. 5. 19. 19:31
반응형

이번 과제는 계산기의 기능을 구현하는 과제였다.

여러 기능 중 나는 사칙연산 기호를 여러 번 눌렀을 때, 마지막으로 누른 사칙연산 기호만 작동하게 만들고자 한다.

 

떠오른 방법은

1. 하나의 배열을 만들고,

2. 클릭을 할 때마다 배열에 클릭을 한 요소가 추가 되게 하고

3. 그 배열의 요소 중 마지막 요소를 함수에 들어갈 변수에 할당해준다.

 

먼저 떠올린 방법은 push를 통해 추가하는 방법이었다. 하지만, 한 가지만 추가 됐고, 반복이 되지 않는 문제가 생겼다.

if (action === 'operator') {
      
      if(previousKey === firstNum){
        operatorForAdvanced = buttonContent;
        previousKey = operatorForAdvanced;
      }
        let arr= [];
          let openArr = arr.push(operatorForAdvanced)
        console.log(openArr)
        console.log(arr)
        }
        


      if(previousKey === operatorForAdvanced){
        previousNum = firstNum;
      }

그래서 떠올린 방법은 countOp를 하나 선언해주고, opreator 버튼이 눌릴때마다 countOp의 수가 올라가고,

그 countOp의 수를 기준으로 하여 for 문을 돌려보려 했다.

let countOp = 0;

if (action === 'operator') {
      countOp++
      
      if(previousKey === firstNum){
        operatorForAdvanced = buttonContent;
        previousKey = operatorForAdvanced;
      }
        let arr= [];
        // 한가지만 들어가는데, for문을 쓴다? for문을 쓴다면, 변수는 어떤 걸로?
        for(let i =0; i<countOp; i++){
          let openArr = arr.push(operatorForAdvanced)
          // 
        console.log(openArr)
        console.log(arr)
        }
        


      if(previousKey === operatorForAdvanced){
        previousNum = firstNum;
      }

console.log를 찍어보니, 배열의 길이가 늘어나지만, 처음에 눌렀던 사칙연산만 배열의 요소로 추가되는 문제가 발생했다.

어떻게 해야 다른 사칙연산 기호가 들어갈까? 조건을 달아줘야 할까? 달아준다면, 어떤 조건을 넣어줘야 할까?

 

 

pm 2:41 

 

pm 3:31

방법을 못찾겠따. 아직 내 실력으로 힘든 것일까...?

그럼에도 포기하지 않고, 계속 알아보는 중이다

 

pm 3:41

배열의 요소로 추가하는 방안이 아닌 다른 방안으로 해야될 것 같다. 아무리 고민해봐도 지금의 내 실력에서는 ㅠㅠㅠ 힘들 것 같다.

나중에 event로 발생한 요소들을 반복문을 통해 arr에 추가하는 방법을 찾아봐야겠다. 방법이 있을까?

 

pm 3:52 

매우 간단하게 해결이 됐다.... 기존의 코드를 크게 변경하지 않고, 조건 하나만을 바꿔주면 되는 것이었다.

if (action === 'operator') {
      
      if(previousKey === firstNum){
        operatorForAdvanced = buttonContent;
        previousKey = operatorForAdvanced;
      }
      
      if(previousKey !== firstNum){
      // 만일 이전에 누른 키가 숫자가 아니라면,
        operatorForAdvanced= buttonContent;
        // 함수에 들어갈 사칙연산 변수에 버튼으로 누른 컨텐트를 할당하고
        previousKey = operatorForAdvanced;
        // 이전에 누른 키에 사칙연산 버튼을 다시 할당한다.
      }

      if(previousKey === operatorForAdvanced){
        previousNum = firstNum;
      }

    }

이렇게 하면, 가장 마지막 연산 기호에 반응하여 계산이 실행된다.

비록 시간을 많이 소비하기는 했지만, 그래도 직접 해냈다는 것에 성취감이 생긴다. 그러면서 동시에 자괴감이 ㅠㅠㅠ

그래도 이런 삽질을 한 경험이 계속 늘어나면 그만큼 성장할 수 있는 것이라 생각한다.

 

 

 

반응형