[Ajax] 리팩토링 함수화

2021. 3. 21. 15:55Front-end/Javascript

728x90
반응형

안녕하세요, 이번 시간에는 여태 작성했던 코드를 함수화 해보겠습니다.

 

<body>
  <h1><a href="index.html">WEB</a></h1>
  <input id="night_day" type="button" value="night" onclick="
    nightDayHandler(this);
  ">
  <ol>
    <li><a onclick="
    fetch('html').then(function(response){
        response.text().then(function(text){
            document.querySelector('article').innerHTML = text;
        })
    })
      ">HTML</a></li>
    <li><a onclick="
      fetch('css').then(function(response){
        response.text().then(function(text){
            document.querySelector('article').innerHTML = text;
        })
    })
        ">CSS</a></li>
    <li><a onclick="
      fetch('javascript').then(function(response){
        response.text().then(function(text){
            document.querySelector('article').innerHTML = text;
        })
    })
        ">JavaScript</a></li>
  </ol>
  <article></article>
</body>

 

지난시간 까지 작성했던 코드를 보면 중복이 발생하고 있습니다.

소프트웨어를 만드는 과정에서 언제나 고심해야할 부분은 '어떻게 하면 중복을 제거할 수 있을까?' 입니다.

 

여기 있는 이 코드 중에서 중복인 부분이 있고 중복이 아닌 부분이 있습니다.

 

 fetch('html').then(function(response){

        response.text().then(function(text){

            document.querySelector('article').innerHTML = text;

        })

    })

'html' 이부분은 중복이 아닌 부분이고, 나머지는 중복인 부분 입니다.

그러면 어떻게 하면 중복을 제거할 수 있을까요? 함수를 이용하면 되겠죠.

 

index.html에서 body가 끝나기 직전에 script 부분을 추가하고, 여기에 함수를 작성하겠습니다.

함수의 목표는 코드를 재활용하는 것입니다.

 

<script>

    function fetchPage(name){

      fetch(name).then(function(response){

        response.text().then(function(text){

            document.querySelector('article').innerHTML = text;

        })

    })

  };

  </script>

다음과 같이 작성하면 됩니다. 우리는 fetch('html') 에서 괄호안에 들어가는 부분만 바뀌면 되기 때문에 그 부분을 name이라는 인자로 받도록 위와 같이 함수를 작성하면 됩니다.  이렇게 함수를 작성했다면 우리는 아까 onclick 부분을 아름답게 만들 수 있습니다.

 

 <ol>

    <li><a onclick="fetchPage('html')">HTML</a></li>

    <li><a onclick="fetchPage('css')">CSS</a></li>

    <li><a onclick="fetchPage('javascript')">JavaScript</a></li>

  </ol>

이렇게 수정하고 실행해보면 이전과 똑같이 작동합니다.

이전보다 훨씬 더 코드가 가독성이 높아졌고, 유지보수하기가 쉬워졌고 코드의 양이 줄어들었습니다.

728x90
반응형

'Front-end > Javascript' 카테고리의 다른 글

클래스(Class)  (0) 2021.03.23
프로토타입(Prototype)  (0) 2021.03.23
[Ajax] Ajax의 적용  (0) 2021.03.21
[Ajax] fetch API - response 객체  (0) 2021.03.21
[Ajax] fetch API - 요청과 응답  (0) 2021.03.21