반응형

이 글의 동영상 강의입니다.

https://youtu.be/mcq-cqnFJD0

 

* 이 글은 MDN Javascript 안내서를 참조하여 작성하였습니다.

https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Introduction

 

Introduction - JavaScript | MDN

이 장은 JavaScript를 소개하고 그 일부 기초 개념을 다룹니다.

developer.mozilla.org

 

Javascript 실행 방법

Javascript 코드를 만들고 실행하는 방법은 다음과 같습니다.

  • test.js 파일을 만들고 test.html에서 test.js를 선언해서 사용할 수 있습니다.
<script src="./test.js"></script>
  • 크롬 브라우저 개발자 도구에서 콘솔에 javascript 코드를 입력하여 실행 할 수 있습니다.
    크롬 개발자 도구는 크롬 실행 후 F12 키를 눌러 실행 시킬 수 있습니다.

  • nodejs를 설치한 후 node 명령을 통해 실행할 수 있습니다.
    아래는 nodejs로 test.js를 실행하는 명령입니다.
node test

여기서는 주로 3번째 방법인 nodejs를 설치하여 테스트 하도록 하겠습니다.

 

문법

  • 대소문자를 구분합니다.
var name = "Spider Man";
var Name = "Iron Man";

console.log(name);
console.log(Name):
  • 크롬 브라우저의 개발자도구에서 실행한 결과는 다음과 같습니다.
    크롬 개발자도구는 브라우저 실행 후 F12를 누르면 나타납니다.

  • 주석은 다음과 같이 사용합니다.
// 한 줄 주석

/* 이건 더 긴,
 * 여러 줄 주석입니다.
 */

/* 그러나, /* 중첩된 주석은 쓸 수 없습니다 */ SyntaxError */
  • 명령문(Statement)는 세미콜론( ; )으로 구분합니다.
    한줄로 명령문이 끝날 경우에는 세미콜론을 사용하지 않아도 됩니다.
    하지만 프로그램의 가독성을 위해 저는 사용하는 것을 권합니다.
var name = "Spider Man";

 

선언

  • Javascript는 3가지 선언 방법이 있습니다.
    • var : 변수를 선언하고 동시에 값을 초기화 함.
    • let : 블록 범위 지역변수를 선언하고, 동시에 값을 초기화 함.
    • const : 블록 범위 읽기 전용 상수를 선언함. 
  • var는 scope과 hoisting 문제가 있습니다. 이로 인해 ES6 이후부터 나온 let과 const의 사용을 권합니다. 
  • 아래는 scope 문제의 예입니다.
var name = "Spider Man";
if (name) {
	var name = "Iron Man";
	console.log("I am " + name);
}
console.log("I am " + name);

실행 결과

  • if문 block에서 변경한 name의 값이 block 외부에도 영향을 미치고 있습니다.
  • 다음과 같이 let과 const를 사용하면 block scope을 갖게 됩니다.
let name = "Spider Man";
if (name) {
	let name = "Iron Man";
	console.log("I am " + name);
}
console.log("I am " + name);

실행결과

  • 아래는 hoisting 문제의 예입니다.
console.log(name);
var name = "Iron Man";
console.log(name);

실행 결과

  • name을 선언하지 않았지만 오류가 나지 않고 undefined라는 값을 출력했습니다.
  • 아래와 같이 let과 const를 사용하면 에러가 발생하게 됩니다.
console.log(name);
let name = "Iron Man";
console.log(name);

실행 결과

변수

  • 변수는 var와 let을 이용해 선언합니다.
  • 초기값이 없을 경우 undefined 값을 갖습니다.
var a;
console.log("a 값은 " + a); // "a 값은 undefined"로 로그가 남음.

let x;
console.log('x 값은 ' + x); // x 값은 undefined​
  • undefined를 갖는 변수는 if 문에서 false가 리턴됩니다.
var name;
if (name) {
	console.log("true");
}else {
   console.log("false");
}

 

상수

  • 상수는 const를 사용하여 선언합니다.
  • 상수는 초기에 설정된 값외에 다른 값으로 바꿀 수 없습니다.
  • 상수는 재선언할 수 없습니다.

 

데이터형

Javascript는 7가지 데이터 형을 정의합니다.

  • Boolean : true or false
  • null : 값이 없음
  • undefined : 값이 정의되지 않음
  • Number : 정수 또는 실수형 숫자. 예:5 or 3.14159
  • String : 문자열
  • Symbol : 고유하고 불변인 데이터 형
  • Object : 객체형

 

배열

Javascript에서 배열은 다음과 같이 []를 사용하여 선언합니다.

var coffees = ["French Roast", "Colombian", "Kona"];

 

Block

  • Block 문은 코드의 묶음을 나타내고 중괄호 "{ }"로 표시합니다.
{
  statement_1;
  statement_2;
  .
  .
  .
  statement_n;
}
  • Block 문은 일반적으로 제어문(if, for, while)과 함께 사용합니ㅏㄷ.
while (x < 10) {
  x++;
}

 

조건문

  • 조건문은 참인 경우에 실행하는 명령의 집합입니다.
  • javascript에서 조건문은 if...else와 switch 문이 있습니다.
if (condition) {
  statement_1;
} else {
  statement_2;
}
switch (expression) {
  case label_1:
    statements_1
    [break;]
  case label_2:
    statements_2
    [break;]
    ...
  default:
    statements_def
    [break;]
}

 

예외처리

  • javascript의 예외처리는 throw와 try...catch...finally문을 사용합니다.
throw "Error2";   // String type
throw 42;         // Number type
throw true;       // Boolean type
throw {toString: function() { return "I'm an object!"; } };
try {
  writeMyFile(theData); //This may throw a error
} catch(e) {
  handleError(e); // If we got a error we handle it
} finally {
  closeMyFile(); // always close the resource
}

 

javascript 기초적인 문법은 반드시 알고 있어야 하므로 모르실때마다 꼭 확인하는 습관을 들이시기 바랍니다.

반응형

'자바스크립트' 카테고리의 다른 글

JSON 기초 (feat. Live Server)  (0) 2021.10.16
반응형

이 글의 동영상 강의입니다.
https://youtu.be/7mpiKHkkVD4

 

JSON 기초 이론과 실습

 
요즘 가장 많이 사용하는 Data Type인 JSON에 대해 알아보고 실습을 진행합니다.
* 이 문서는 Mozilla의 MDN 사이트의 내용을 참고하여 작성하였습니다.
  https://developer.mozilla.org/ko/docs/Learn/JavaScript/Objects/JSON
 

JSON은 JavaScript Object Notation 의 약어입니다.

JSON의 특징

  • JSON은 문자열 형태로 만들어집니다.
  • 따라서 네트워크로 전송할 때 유용합니다. (객체 직렬화가 가능하기 때문)
  • JSON의 데이터에 Access하기 위해서는 문자열 형태를 JSON 객체로 변환해야 합니다.
  • Javascript에서는 기본적으로 JSON과 문자열의 상호 변환을 지원합니다.

JSON의 구조

  • JSON은 {} 로 감싸여 있는 구조를 갖고 있습니다.
  • 내부 데이터는 "Key : Value"의 형태로 구성되어 있습니다.
  • Key는 "name"로 만들어진 문자열을 사용함. 예) "id", "password"등
  • Value는 Javascript의 type 즉, 문자열, 숫자, 배열, Boolean등을 사용할 수 있습니다.
  • 아래는 예제 프로그램에서 사용할 샘플 JSON입니다.
{ 
  "squadName": "Super hero squad", 
  "homeTown": "Metro City", 
  "formed": 2016, 
  "secretBase": "Super tower", 
  "active": true, 
  "members": [ 
    { 
      "name": "Molecule Man", 
      "age": 29, 
      "secretIdentity": "Dan Jukes", 
      "powers": [ 
        "Radiation resistance", 
        "Turning tiny", 
        "Radiation blast" 
      ] 
    }, 
    { 
      "name": "Madame Uppercut", 
      "age": 39, 
      "secretIdentity": "Jane Wilson", 
      "powers": [ 
        "Million tonne punch", 
        "Damage resistance", 
        "Superhuman reflexes" 
      ] 
    }, 
    { 
      "name": "Eternal Flame", 
      "age": 1000000, 
      "secretIdentity": "Unknown", 
      "powers": [ 
        "Immortality", 
        "Heat Immunity", 
        "Inferno", 
        "Teleportation", 
        "Interdimensional travel" 
      ] 
    } 
  ] 
}

JSON Data에 접근하는 방법

  • Javascript에서는 아래와 같이 JSON 객체로 선언하면 사용이 가능합니다.
    (실무에서는 RESTAPI등을 호출하여 JSON 데이터를 가져오는 형태로 많이 사용합니다.)
const superHeroes = { 
      "squadName" : "Super hero squad",
      ...
}
  • 위 JSON을 다음과 같이 호출하여 사용합니다.
superHeroes.homeTown 
superHeroes['active']
  • 배열일 경우에는 "[index]"의 형식으로 사용 가능합니다.
    (index로 사용하는 숫자는 첫 번째가 0부터 시작됩니다)
superHeroes['members'][1]['powers'][2]

 

실습

프로젝트 생성 및 코드 작성

  • hero라는 이름의 폴더를 생성합니다.
mkdir hero
cd hero
  • VSCode에서 폴더를 오픈합니다.
  • 아래와 같이 index.html을 만듭니다.
<!DOCTYPE html> 
<html> 
  <head> 
    <meta charset="utf-8"> 
    <title>Our superheroes</title> 
    <link href="https://fonts.googleapis.com/css?family=Faster+One" rel="stylesheet"> 
    <link rel="stylesheet" href="style.css"> 
  </head> 
  <body> 
      <header> 
      </header> 
      <section> 
      </section> 
    <script> 
    const header = document.querySelector('header'); 
    const section = document.querySelector('section'); 
    </script> 
  </body> 
</html>
  • 아래와 같이 style.css를 만듭니다.
/* || general styles */ 
html { 
  font-family: 'helvetica neue', helvetica, arial, sans-serif; 
} 
body { 
  width: 800px; 
  margin: 0 auto; 
} 
h1, h2 { 
  font-family: 'Faster One', cursive; 
} 
/* header styles */ 
h1 { 
  font-size: 4rem; 
  text-align: center; 
} 
header p { 
  font-size: 1.3rem; 
  font-weight: bold; 
  text-align: center; 
} 
/* section styles */ 
section article { 
  width: 33%; 
  float: left; 
} 
section p { 
  margin: 5px 0; 
} 
section ul { 
  margin-top: 0; 
} 
h2 { 
  font-size: 2.5rem; 
  letter-spacing: -5px; 
  margin-bottom: 10px; 
}

프로젝트 실행

  • 우리는 프로그램 실행을 편하게 하기 위해서 VSCode의 확장 프로그램인 Live Server를 사용합니다.
    • VSCode의 extention에서 Live Server를 검색하여 설치합니다.
VSCode Extention LIve Server
  • VSCode의 탐색기에 index.html을 마우스를 우클릭하여 LIve Server를 실행합니다.
  • 브라우저가 실행되며 아래와 같이 실행됩니다.
Live Server Run
  • Live Server가 잘 작동하는지 확인하기 위해 아래와 같이 index.html의 header를 수정합니다.
<header>
    <h1>Heroes!!!</h1>
</header>
  • 다시 브라우저를 확인합니다.
    • 아래와 같이 Title이 나오면 정상입니다.
Live Server Test

JSON Data 가져오기

var requestURL = 'https://mdn.github.io/learning-area/javascript/oojs/json/superheroes.json';
var request = new XMLHttpRequest();
request.open('GET', requestURL);
request.responseType = 'json'; 
request.send();
  • Response가 왔을때 처리하는 코드를 아래와 같이 작성합니다.
request.onload = function() { 
  var superHeroes = request.response; 
  populateHeader(superHeroes); 
  showHeroes(superHeroes); 
}
  • 위의 populateHeader function의 Code를 아래와 같이 작성합니다.
function populateHeader(jsonObj) { 
  var myH1 = document.createElement('h1'); 
  myH1.textContent = jsonObj['squadName']; 
  header.appendChild(myH1); 
  var myPara = document.createElement('p'); 
  myPara.textContent = 'Hometown: ' + jsonObj['homeTown'] + ' // Formed: ' + jsonObj['formed']; 
  header.appendChild(myPara); 
}
  • 위의showHeroes function의 Code를 아래와 같이 작성합니다.
function showHeroes(jsonObj) { 
  var heroes = jsonObj['members']; 
  for (var i = 0; i < heroes.length; i++) { 
    var myArticle = document.createElement('article'); 
    var myH2 = document.createElement('h2'); 
    var myPara1 = document.createElement('p'); 
    var myPara2 = document.createElement('p'); 
    var myPara3 = document.createElement('p'); 
    var myList = document.createElement('ul'); 
    myH2.textContent = heroes[i].name; 
    myPara1.textContent = 'Secret identity: ' + heroes[i].secretIdentity; 
    myPara2.textContent = 'Age: ' + heroes[i].age; 
    myPara3.textContent = 'Superpowers:'; 
    var superPowers = heroes[i].powers; 
    for (var j = 0; j < superPowers.length; j++) { 
      var listItem = document.createElement('li'); 
      listItem.textContent = superPowers[j]; 
      myList.appendChild(listItem); 
    } 
    myArticle.appendChild(myH2); 
    myArticle.appendChild(myPara1); 
    myArticle.appendChild(myPara2); 
    myArticle.appendChild(myPara3); 
    myArticle.appendChild(myList); 
    section.appendChild(myArticle); 
  } 
}
  • index.html의 최종 소스는 아래와 같습니다.
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Our superheroes</title>
    <link href="https://fonts.googleapis.com/css?family=Faster+One" rel="stylesheet">
    <link rel="stylesheet" href="style.css">
  </head>
  <body>
    <header>
    </header>
    <section>
    </section>

    <script>
      const header = document.querySelector('header');
      const section = document.querySelector('section');

      let requestURL = 'https://mdn.github.io/learning-area/javascript/oojs/json/superheroes.json';
      let request = new XMLHttpRequest();
      request.open('GET', requestURL);
      request.responseType = 'json';
      request.send();

      request.onload = function() {
        const superHeroes = request.response;
        populateHeader(superHeroes);
        showHeroes(superHeroes);
      }

      function populateHeader(obj) {
        const myH1 = document.createElement('h1');
        myH1.textContent = obj['squadName'];
        header.appendChild(myH1);

        const myPara = document.createElement('p');
        myPara.textContent = 'Hometown: ' + obj['homeTown'] + ' // Formed: ' + obj['formed'];
        header.appendChild(myPara);
      }

      function showHeroes(obj) {
        const heroes = obj['members'];

        for(let i = 0; i < heroes.length; i++) {
          const myArticle = document.createElement('article');
          const myH2 = document.createElement('h2');
          const myPara1 = document.createElement('p');
          const myPara2 = document.createElement('p');
          const myPara3 = document.createElement('p');
          const myList = document.createElement('ul');

          myH2.textContent = heroes[i].name;
          myPara1.textContent = 'Secret identity: ' + heroes[i].secretIdentity;
          myPara2.textContent = 'Age: ' + heroes[i].age;
          myPara3.textContent = 'Superpowers:';

          const superPowers = heroes[i].powers;
          for(let j = 0; j < superPowers.length; j++) {
            const listItem = document.createElement('li');
            listItem.textContent = superPowers[j];
            myList.appendChild(listItem);
          }

          myArticle.appendChild(myH2);
          myArticle.appendChild(myPara1);
          myArticle.appendChild(myPara2);
          myArticle.appendChild(myPara3);
          myArticle.appendChild(myList);

          section.appendChild(myArticle);
        }
      }
    </script>
  </body>
</html>

 

최종 실행 화면

  • 문제 없이 실행 되었을 경우 아래와 같은 화면을 보실 수 있습니다.
최종 화면

 
이상으로 JSON에 대해서 알아보고 간단한 실습을 수행하여 보았습니다.
JSON은 어려운 문법이 아니고 많이 사용하고 있습니다.
사용법을 잘 익혀 두시면 프로그램 개발시 많은 도움이 될것입니다.

반응형

'자바스크립트' 카테고리의 다른 글

Javascript 기초 문법  (0) 2021.12.12

+ Recent posts