Today I Learned/웹

[javascript] 함수로 중복코드 제거하기

하나719 2020. 10. 14. 17:16
반응형

개발자들은 귀찮은 걸 싫어한다.

코드가 복잡해지고, 똑같은 코딩을 또 하는걸 싫어한다.

함수로 중복 코드를 제거해보자!

 

 

1. 중복 제거하기 전

if와 else 안에 컬러를 변경해주는 코드가 중복으로 작성되어 있다.

<head>
	<script>
		function mode_change(){
                var mode = document.querySelector('#mode').value;
                var bodyTag = document.querySelector('body');
                var as = document.querySelectorAll('li');
                
               
                if(mode === 'day'){
                
                    console.log('day click');
                    bodyTag.style.backgroundColor='black';
                    bodyTag.style.color='white';
                    document.querySelector('#mode').value = 'night';
                    
                    var i =0 ;
                    while(i < as.length){
                        as[i].style.color='red';
                        i += 1;
                    }
         
                } else {
                    console.log('night click')
                    bodyTag.style.backgroundColor='white';
                    bodyTag.style.color='black';
                    document.querySelector('#mode').value = 'day';
                    var i =0 ;
                    while(i < as.length){
                        as[i].style.color='blue';
                        i += 1;
                    }
                }
            }
  </script>
  </head>
 <body>
  	<input type='button' id='mode' onclick='mode_change()' value='day'>
    	<li>hana </li>
    	<li>duri </li>
</body>

2. 중복 제거 후

screen_mode 함수를 추가해서 반복적으로 작성됐던 컬러를 변경해주는 코드 담아서, 중복을 제거해주었다.

mode_change 함수에서는 screen_mode 함수의 인자로 원하는 컬러를 전달해주어서 결과를 얻고 있다.

 <head>
 	<script>
            function screen_mode(cfont,cback,mode,cli){
                
                var bodyTag = document.querySelector('body');
                var as = document.querySelectorAll('li');

                bodyTag.style.backgroundColor=cback;
                bodyTag.style.color=cfont;
                document.querySelector('#mode').value = mode;
                
                var i =0 ;
                    while(i < as.length){
                        as[i].style.color=cli;
                        i += 1;
                    }
            }

            function mode_change(){
                var mode = document.querySelector('#mode').value;
                if(mode === 'day'){
                    screen_mode('white','black','night','red');
                } else {
                    screen_mode('black','white','day','blue');
                }
            }
            
  	</script>
  </head>
  
  <body>
  	<input type='button' id='mode' onclick='mode_change()' value='day'>
    	<li>hana </li>
    	<li>duri </li>
  </body>

 

이렇게 코드의 중복을 없애고 간결하게 하는 과정을 리팩토링이라고하고, 리팩토링을 하는 규칙이 있다.

참고 👇🏻

위키백과: 리팩토링

 

리팩터링 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 리팩터링(refactoring)은 소프트웨어 공학에서 '결과의 변경 없이 코드의 구조를 재조정함'을 뜻한다. 주로 가독성을 높이고 유지보수를 편하게 한다. 버그를 없애

ko.wikipedia.org

 

 

반응형