ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JavaScript] 개요
    생활코딩/WEBn 2020. 8. 28. 22:17

    [강의 출처] opentutorials.org/course/3085

     

    WEB2 - JavaScript - 생활코딩

    수업소개 이 수업은 https://opentutorials.org 를 만들어가면서 JavaScript에 대한 지식과 경험을 동시에 채워드리기 위한 목적으로 만들어진 수업입니다.  수업대상 이 수업은 웹 페이지를 사용자와 상�

    opentutorials.org


     

    JavaScript란?

    • 사용자와 동적으로 상호작용(사용자의 조작에 반응해서 움직이는)하는 웹페이지를 구현하는 기술
    • 주로 HTML을 제어하는 용도로 쓰이며, HTML 위에서 동작하도록 고안된 프로그래밍 언어
    • 웹페이지에서 일어나는 일련의 사건들(event) 중 특별한 경우들(onclick, onchange, ...)을 통해 상호작용 가능
    • HTML의 속성 중, input을 JS로 받는 속성들 안에서 사용하거나, (ex. onclick)
    • HTML의 <script> 태그 안쪽에 들어가거나 (<script> 태그 내에서 선언된 변수 등은 해당 HTML파일 내에서 유효),
    • 콘솔(Developer Tools > Console)을 통해 실행

     

    JavaScript의 특징

    • 데이터타입은 6가지(Number, String, Boolean, Null, Undefined, Symbol) + Object
    • 변수(variable) 지정시:  var 변수명 = 대입할 값; 형식으로 작성
    • 비교 연산자(Comparison operators): ===, >, <
    • Boolean: true, false
    • if else 구문: if(조건){
    •                       true실행문
    •                     } else{
    •                       false실행문
    •                     }
    • this: 자기 자신을 가리키는 키워드
      • python의 self와 유사하지만, 파이썬의 self가 변수명인 것과는 달리
      • JS의 this는 키워드이기 때문에 아무런 문맥 없이도 사용할 수 없으며
      • 문맥 없이 사용된 경우, 전역변수(브라우저 콘솔이라면 window)를 가리킴
    • 배열(array):
    •                   var 배열이름 = ['data1', 'data2'];   // 정의
    •                   배열이름[index];                           // 인덱싱
    •                   배열이름.length;                           // 배열 크기 확인
    •                   배열이름.push('data3');                // element 삽입
    • 객체(object): var 객체이름 = {
    •                         'data1': 'value1',
    •                         'data2': 'value2'
    •                       };
    •                       객체이름.data3 = 'value3';                     // 데이터 추가하기
    •                       객체이름['data 4'] = 'value4';                 // 데이터 추가하기2
    •                       객체이름.data1;                                    // 데이터 가져오기
      • python의 dictionary와 다른 점 [출처]
      • i = 'k'
      • 객체 = {i: 'j'}
      • <JS>        객체.i === 'j' && 객체['i'] === 'j'  // 객체.k, 객체['k']는 undefined
      • <python> 객체['k'] == 'j' && 객체[i] == 'j'    // 객체.i, 객체.k, 객체['i']는 error
    • while 반복문: while(조건){
    •                        반복문
    •                      };
    • for 반복문: for(var key in 객체이름) {
    •                    반복문
    •                  };
    • 함수(function): function 함수명(params){
    •                            함수내용
    •                            return 리턴값;
    •                          };
    • 객체 메소드(object method) 정의:
    •                          객체명.메소드명 = function(properties){   // 객체에 소속된 변수는 properties
    •                                                    메소드내용                     // 객체에 소속된 함수는 method
    •                                                    return 리턴값;
    •                                                  };
    •  

     

     

    JS 코드 공유/재사용

    • CSS의 코드 공유/재사용 방법과 동일한 원리
    • 여러 페이지가 동일한 JS 스크립트를 공유하는 경우, <script> 태그 안의 내용을 .js 파일을 별도로 저장
    • 기존  <script> 태그가 있던 <head> 부분에 아래 태그를 추가함으로써 공유 및 재사용 가능
    • <script src="파일위치.js"></script>
    • js파일을 1회 다운로드 받은 후, caching을 통해 추가 트래픽 발생 없이 빠르게 여러 페이지에 적용가능

     

    <JS 사용예시1> HTML의 속성 중, input을 JS로 받는 속성들 안에서 사용되는 예시

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8">
        <title></title>
      </head>
      <body>
        <input type="button" value="night" onclick="
        /* onclick 속성의 값은 JS 문법에 따르도록 되어 있기 때문에 여기부터 */
        document.querySelector('body').style.backgroundColor = 'black';
        document.querySelector('body').style.color = 'white';
        /* 여기까지는 JS 구문에 해당함 */
        ">
        <input type="button" value="day" onclick="
        document.querySelector('body').style.backgroundColor = 'white';
        document.querySelector('body').style.color = 'black';
        /* querySelector를 통해 'body' 태그를 선택하고 (클래스나 아이디라면 .class or #id)
        .* style 속성의 backgroundColor를 JS 문법에 맞도록 지정 */
        ">
        <p>
          Sample Text
        </p>
        /* 혹은 위의 코드를 if else 구문을 이용해 아래와 같이 처리할 수도 있음 */
        <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 = 'white';
            target.style.color = 'black';
            this.value = 'night';
          }
        ">
      </body>
    </html>
    

     

    <JS 사용예시2> HTML의 <script> 태그 안쪽에 들어가는 예시

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8">
        <title></title>
        <script>
          /* 위의 button과 비슷한 기능(+h2 색깔 바꾸는 기능을 추가한)
          *  을 구현하는 함수를 따로 정의한 다음, */
          function dayNightHandler(self){
            var target = document.querySelector('body');
              if(self.value === 'night') {
                target.style.backgroundColor = 'black';
                target.style.color = 'white';
                self.value = 'day';
                /// 야간모드일때는 h2 태그의 색깔을 powderblue로 바꿔보자
                var i = 0;
                h2list = document.querySelectorAll('h2'); // 'h2'태그를 모두 가져온 다음
                while(i<h2list.length){                   // i가 'h2'태그 개수보다 작은 동안
                  h2list[i].style.color = 'powderblue';    // h2의 i번째 요소의 색깔을 바꿔라
                  i = i + 1;
                }
              } else {
                target.style.backgroundColor = 'white';
                target.style.color = 'black';
                self.value = 'night';
                /// 주간모드일때는 h2 태그의 색깔을 green으로 바꿔보자
                var i = 0;
                h2list = document.querySelectorAll('h2');
                while(i<h2list.length){
                  h2list[i].style.color = 'green';
                  i = i + 1;
                }
              }
          }
        </script>
      </head>
      <body>
        <p>
          Sample Text
        </p>
        <input type="button" value="night" onclick="
          dayNightHandler(this);
        /* 위에서처럼 해당 부분에 함수로 불러올 수도 있음
         * 함수 내에서 this를 사용해야 하는 경우가 있다면, 인자로 넣어줘야함
         * 그렇지 않으면 기존에 this를 사용했던 문맥과 달라지기 때문임*/
        ">
      </body>
    </html>
    

     

    <JS 사용예시3> 객체를 이용해 2번을 리팩토링한 예시

    *리팩토링(re-factoring): 기능 변경 없이 코드의 효율성을 높이는 작업. 중복 제거, 가독성 개선 작업 등이 포함됨.

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8">
        <title></title>
        <script>
          /* 색을 바꾸는 작업이 빈번하게 일어나므로 정리를 위해 객체 생성
           * <body> 태그를 대상으로 이루어질 작업 정리 */
          var Body = {
            setColor:function(color){
              document.querySelector('body').style.color = color;
            },
            /* body의 텍스트 색깔을 바꾸는 함수를 먼저 정의하고 */
            setBackGroundColor:function(color){
              document.querySelector('body').style.backgroundColor = color;
            }
            /* body의 배경 색깔을 바꾸는 함수도 정의
             * h2 태그에 대해서도 비슷한 함수를 정의할 것이기 때문에
             * Body라는 객체에 메소드로 정리하는 편이 가독성이 높고 혼란이 적음 */
          };
          var h2s = {
            setColor:function(color){
              var i = 0;
              h2list = document.querySelectorAll('h2');
              while(i<h2list.length){
                h2list[i].style.color = color;
                i = i + 1;
              }
            }
            /* 마찬가지로 h2 태그에 대해서도 색깔 바꾸는 함수를 정의 */
          };
          function dayNightHandler(self){
            if(self.value === 'night') {
              Body.setColor('white');   // 기존에 document.querySelector로 지정하던 부분을
              Body.setBackGroundColor('black');  // Body 객체와 메소드로 치환
              self.value = 'day';
              /// 야간모드일때는 h2 태그의 배경색을 바꿔보자
              h2s.setColor('powderblue');  // h2 태그에 대해서도 마찬가지로 교체
            } else {
              Body.setColor('black');
              Body.setBackGroundColor('white');
              self.value = 'night';
              h2s.setColor('green');
              }
          }
        </script>         <!-- 위쪽 함수부분만 리팩토링했기 때문에 이 아래쪽은 2번 예시와 동일함 -->
      </head>
      <body>
        <p>
          Sample Text
        </p>
        <input type="button" value="night" onclick="
          dayNightHandler(this);
        /* 위에서처럼 해당 부분에 함수로 불러올 수도 있음
         * 함수 내에서 this를 사용해야 하는 경우가 있다면, 인자로 넣어줘야함
         * 그렇지 않으면 기존에 this를 사용했던 문맥과 달라지기 때문임*/
        ">
      </body>
    </html>
    

     

     

    <JS 사용예시4> 3번을 스크립트로 분리해 리팩토링한 예시

    colorbuttons.js

    var Body = {
      setColor:function(color){
        document.querySelector('body').style.color = color;
      },
      setBackGroundColor:function(color){
        document.querySelector('body').style.backgroundColor = color;
      }
    };
    var h2s = {
      setColor:function(color){
        var i = 0;
        h2list = document.querySelectorAll('h2');
        while(i<h2list.length){
        h2list[i].style.color = color;
        i = i + 1;
        }
      }
    };
    function dayNightHandler(self){
      if(self.value === 'night') {
        Body.setColor('white');   // 기존에 document.querySelector로 지정하던 부분을
        Body.setBackGroundColor('black');  // Body 객체와 메소드로 치환
        self.value = 'day';
        /// 야간모드일때는 h2 태그의 배경색을 바꿔보자
        h2s.setColor('powderblue');  // h2 태그에 대해서도 마찬가지로 교체
      } else {
        Body.setColor('black');
        Body.setBackGroundColor('white');
        self.value = 'night';
        h2s.setColor('green');
      }
    };

    htmlfile.html

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8">
        <title></title>
        <script scr="colorbuttons.js"></script> <!-- 여기에 해당 js 스크립트 경로를 넣어주기 -->
      </head>
      <body>
        <p>
          Sample Text
        </p>
        <input type="button" value="night" onclick="
          dayNightHandler(this);
        ">
      </body>
    </html>
    

     

     

    댓글

Designed by Tistory.