본문 바로가기

Web/JavaScript

리팩토링

<리팩토링(Refactoring)>

- 전과 동일하게 작동하지만 코드 자체를 좀 더 효율적으로 바꾸는 과정

- 가독성을 높이고 유지 보수하기 쉽게 만들며, 중복된 부분을 최대한 없애는 방향으로 코드를 개선

- 소프트웨어의 규모가 커질수록 틈틈이 리팩토링 과정을 거쳐야 좋은 프로그램을 만들 수 있다.

 

 

 

 

<리팩토링 예시>

예시 코드와 웹 페이지 

→ 이 예시 코드의 윗부분에 버튼이 하나 있고, 아래에 버튼을 하나 더 만들고 싶어 아래쪽에 버튼을 추가한 모습이다.

     원래는 누를 때마다 day/night이 바뀌어가며 나오도록 짠 코드인데 위에 이미 input 태그의 id 값을 night_day로

     설정했기 때문에, 아래에 똑같은 코드를 복사 붙여 넣기 해 night_day가 두 개가 되어 제대로 작동하지 않고 있다.

 

 

 

 

 

예시 코드와 웹 페이지

→ 위의 문제를 해결하기 위해 id값을 night_day2로 바꾸니까 버튼의 글자가 누를 때마다 night/day로 바뀌며 제대로       작동하고 있다.

 

 

 

 

그러나 만약 버튼을 2개가 아니라 1억 개를 만든다면 이런 식으로 하나하나 다 바꿔줄 수 없을 것이다.

그래서 이러한 불편함을 없애기 위해 아래와 같이 특수한 키워드를 사용한다.

예시 코드와 웹 페이지

→ onclick과 같은 event 안에서 실행되는 코드들은 사실상 자기 자신을 가리키고 있다.

     다시 말해, 위의 예시에서는 document.querySelector('night_day2')가 onclick event가 속해있는 태그인

     input 태그를 가리키고 있는 것이다.

 

→ 이때, 불필요한 중복을 피하고 간단히 표기하기 위해 this라는 키워드를 사용한다.

 

                        document.querySelector('night_day2').value

                                                                   

                                                            this.value

 

→ this로 대체하게 되면 참조하려고 전에 추가해놓은 id값(id="night_day2")은 필요가 없어지므로 제거한다.

 

 

 

 

아직도 document,querySelector('body') 부분이 중복된다.

예시 코드와 웹 페이지

→ 중복을 피하기 위해, target이라는 이름의 새로운 변수를 생성해주고, 그 값을 중복을 피하고자 하는 부분인                       document.querySelector('body')로 지정해준다.

 

→ 이제 중복되는 부분을 target으로 대체해주면,

      1) 코드의 양을 줄일 수 있고

      2) 변수의 값에 해당하는 코드만 바꿔주면(ex. document.querySelector('h1')) target 변수를 쓰고 있는

          모든 코드가 한 번에 바뀌는 굉장한 효과를 가진다. (target 변수가 1억 개 있다고 상상해보자)