본문 바로가기

Javascript

Refactoring

728x90
반응형

생산한 물건에 문제가 생기면 다시 리콜이라든가 뭘 해서 공장에 돌려보낸다. 

코드도 심히 비효율적이라거나 문제가 있다면 리팩토링해서 돌려보내서 더 효율적인 코드로 개선할 필요가 있다.

 

아까 완성한 코드를 리팩토링 해보도록 하겠다. 

    <input id="night_day" type="button" value="night" onclick="
    if(document.querySelector('#night_day').value === 'night'){
      document.querySelector('body').style.backgroundColor = 'black';
      document.querySelector('body').style.color = 'white';
      document.querySelector('#night_day').value = 'day';
    } else {
      document.querySelector('body').style.backgroundColor = '#a9a9a9';
      document.querySelector('body').style.color = 'black';
      document.querySelector('#night_day').value = 'night';
    }

    ">

그래 쓰면서도 뭔가 너무 길고 지저분해보였다. 공장에 다시 돌려보낼 필요가 있는 코드

 

저 위에 있는 document.querySelector('#night_day')라는 코드는 위에 있는 버튼 자기 자신을 가르키는 코드이다. 

근데 이게 너무 길어지기도 하고, 아이디 값을 매번 새로 줘야하기 때문에 반복적이다. 그래서 자기 자신을 가르키는 명령어인 'this'를 활용해서 아래와 같이 바꿔준다. 

 

<input type="button" value="night" onclick="
    if(this.value === 'night'){
      document.querySelector('body').style.backgroundColor = 'black';
      document.querySelector('body').style.color = 'white';
      this.value = 'day';
    } else {
      document.querySelector('body').style.backgroundColor = '#a9a9a9';
      document.querySelector('body').style.color = 'black';
      this.value = 'night';
    }

 

this 선택자를 통해서 위와 같이 간결하게 코드를 바꿔줬다. 

그리고 또 중복이 있다면 저 document.querySelector('body'); 이다. 이거는 변수 target에 담아버리고 그 다음부터는 변수를 사용해주면 된다. 

 

    <input type="button" value="night" onclick="
    var target =   document.querySelector('body');
    if(this.value === 'night'){
      target.style.backgroundColor = 'black';
      target.style.color = 'white';
      this.value = 'day';
    } else {
      target.style.backgroundColor = '#a9a9a9';
      target.style.color = 'black';
      this.value = 'night';
    }
    ">

 

 

끄읕

 

 

 

728x90
반응형

'Javascript' 카테고리의 다른 글

반복문  (0) 2020.12.07
반복문을 위한 배열 (array) 배우기  (0) 2020.12.07
조건문  (0) 2020.12.03
비교연산자와 불리언  (0) 2020.12.03
Javascript  (0) 2020.12.03