리팩토링(Refacotring)이란?
팩토리(factory, 공장) + re(다시) : 공장으로 다시 보내서 좀 더 개선한다.
코딩 후, 코드의 비효율적인 면이 생길 수 있다.
코드를 효율적으로 만들어서 코드의 가독성을 높이고, 유지보수가 편리하도록, 중복된 코드를 낮추는 이러한 방향으로 코드를 다시 개선하는 작업.
- 코드의 효율성
- 가독성
- 유지보수의 편리성
- 중복된 코드 (제거)
틈틈이 리팩토링 해야 좋은 프로그램을 만들 수 있다.!!
목표 : 비효율적인 코드를 제거하는 리팩토링 사례를 학습
night_day 버튼을 복사해서 웹페이지 하단에서도 동작하도록 하고 싶다.
input id="night_day" 태그를 복사하여 하단에 붙여넣기한 뒤 실행해보면?
클릭한 버튼으로 버튼의 value 값이 바뀌는 대상은 첫 번째 버튼이다.
why?
동일한 id 값을 사용했기 때문!
붙여 넣은 두 번째 버튼의 id 값을 'night_day2' 라고 수정하면 정상적으로 동작한다.
this 키워드
자기 자신을 가리키는 키워드
하지만, 불편함이 발생.
이러한 버튼을 1억 개 복사한다.?
이 코드가 속해있는 태그, 즉 여기에서는 input 태그이다. 이 태그를 가리키도록 약속되어있는 특수한 키워드가 있다. -> "this"
이 코드는 사실상 자기 자신을 가리키고 있다. (onclick 이벤트가 속해있는 태그 자신)
document.getElementById('#night_day2')
this로 변경하면 더 이상 태그에 id값을 사용하지 않으므로 삭제.
<!-- 수정 전 코드 -->
<input id="night_day2" type="button" value="night" onclick="
if(document.quertySelector('#night_day2').value === 'night'){
document.querySelector('body').style.backgroundColor = 'gray';
document.querySelector('body').style.color = 'white';
document.quertySelector('#night_day2').value='day';
}else{
document.querySelector('body').style.backgroundColor = 'white';
document.querySelector('body').style.color = 'black';
document.quertySelector('#night_day2').value='night';
}
">
<!-- 수정 후 코드 -->
<input type="button" value="night" onclick="
if(this.value === 'night'){
document.querySelector('body').style.backgroundColor = 'gray';
document.querySelector('body').style.color = 'white';
this.value='day';
}else{
document.querySelector('body').style.backgroundColor = 'white';
document.querySelector('body').style.color = 'black';
this.value='night';
}
">
정상적으로 동작하면서, 코드가 훨씬 간결해졌다.
이 코드를 복사해서 다른 부분에 사용하여도 코드의 수정이 필요 없어짐. 효율성이 올라감!! => 유지보수하기 쉬워짐.
코딩을 잘하는 방법?
중복을 끝까지 쫓아가서 없앤다!!!
중복된 코드를 변수를 사용하여 제거한다.
<!-- 수정 전 코드 -->
<input type="button" value="night" onclick="
if(this.value === 'night'){
document.querySelector('body').style.backgroundColor = 'gray';
document.querySelector('body').style.color = 'white';
this.value='day';
}else{
document.querySelector('body').style.backgroundColor = 'white';
document.querySelector('body').style.color = 'black';
this.value='night';
}
">
<!-- 수정 후 코드 -->
<input type="button" value="night" onclick="
var target = document.querySelector('body');
if(this.value === 'night'){
target.style.backgroundColor = 'gray';
target.style.color = 'white';
this.value='day';
}else{
target.style.backgroundColor = 'white';
target.style.color = 'black';
this.value='night';
}
">
코드가 간결하고 효율적으로 수정되었다.
'코딩공부 > WEB2 - JavaScript' 카테고리의 다른 글
[8] 함수 (0) | 2019.09.06 |
---|---|
[7] 배열과 반복문 (0) | 2019.09.06 |
[5] 조건문 (0) | 2019.09.06 |
[4] 프로그램, 프로그래밍, 프로그래머 (0) | 2019.09.06 |
[3] 웹브라우저 제어, 제어할 태그 선택하기 (0) | 2019.09.05 |