본문 바로가기
국비 과정/JavaScript

국비 - 0928 ( JSON , CANVAS)

by 코딩호야 2022. 9. 28.

* JSON 객체

JSON(Javascript Object Notation) 객체는 클라이언트와 서버의 통신에서
데이터를 주고 받을 때 주로 이용 합니다. 프로그램 종류에 구애 받지 않고
가벼운 텍스트 형태로 만들어 졌다는 장접이 있어 개발자들이 많이 사용합니다.
JSON  은 lightweight(저중량) 데이터를 교환하는 형식으로 컴퓨터 시스템이 
파싱하고 생성하기 쉽게 만들어졌습니다.

. JSON 은 다음과 같은 특징을 갖고 있습니다.

JSON 은 Javascript 를 기반으로 만들어 졌으며 특정 언어에 종속 되지 않는 완벽한 
독립적인 텍스트 형식을 갖고 있습니다.

JSON 객체의 데이터는 이름 (key) / 값(value) 의 쌍으로 구성합니다.
{ 로 시작해서} 로 끝납니다. key  와 value 사이는 ; (콜론) 으로 구분합니다.
그리고 각각의 데이터와 데이터 사이에는  , (콤마) 로 구분합니다.

1.JSON 데이터는 이름과 값의 쌍으로 이루어 집니다.
2.JSON 데이터는 쉼표로 나열됩니다.
3.객체(object) 는 중괄호( { } ) 로 둘러쌓아 표현합니다.
4.배열(array) 은 대괄호 ( [ ] ) 로 둘러쌓아 표현합니다. 

    <title>JSON 객체</title>
    <script>
        function init(){
            var emp={"name":"민들레"
                    ,"age":"25",
                     "tel":"010-123-4567",
                     "address":"서울"};
        
        var msg="";
        msg += "이름: "+ emp.name + "<br>"
            + "나이 : "+emp.age + "<br>"
            + "전화 : "+emp.tel + "<br>"
            + "주소 1: "+emp.address + "<br>"
            + "주소 2: "+emp["address"] + "<br>"
            + "주소 3: "+emp['address'] + "<br>"

        document.getElementById("result").innerHTML=msg;
    }
    
            // JSON 데이터
            // JSON 데이터는 이름과 값의 쌍으로 구성됩니다.
            // 이러한 JSON 데이터는 이름 , 콜론 , 값의 순서로 구성됩니다.

            // 문법 => "데이터이름" : 값
            
            // 다음예제는 데이터의 이름이 "name" 이고  , 값은 "식빵"이라는 문자열을 갖는 JSON 데이터의 예제입니다.

            // 예제 = >  "name":"식빵"
            // 데이터의 이름도 문자열 이므로 , 항상 큰 따옴표 와 함께 입력해야합니다.
    </script>
</head>
<body onload="init()">
    <h2>JSON 표기법</h2>
    <div id="result"></div>
    
</body>

위코드 실행 결과이다. 

JSON 객체를 이런식으로 사용할수 있고 , 주소 1 , 2 , 3 은 각각 다른형태로 사용가능하다는 것을 보여준다.

 

 

JSON 을 이용한 LOGIN 화면

<title> JSON Login </title>
    <script>                    
        var emp = {
            "id" : "korea",
            "pw" : "1234",
            "tel":"010-1234-5678",
            "name" : "HOYA",
            "point" : "3750"};

            
        function login(){
            var a = document.getElementById("id").value;
            var b = document.getElementById("pw").value;
            var c = document.getElementById("tel").value;

            if(emp.id== a && emp.pw == b && emp.tel == c)
                document.getElementById("confirm").innerHTML
                        = "<span style='color:green'>"+emp["name"]
                            + "님 환영합니다.<br>현재 포인트는 " + emp['point']+ "점 입니다.</span>";
            else
                document.getElementById("confirm").innerHTML
                            = "<span style='color:red'> 아이디 또는 비밀번호가 틀립니다~~ . </spam>";
        }
    </script>
</head>
<body>
    <label for="input">[로그인 화면]</label><br><br>
    <input type = "text" id="id"><span>아이디를 입력하시오</span><br>
    <input type = "text" id="pw"><span>비밀번호를 입력하시오</span><br>
    <input type = "text" id="tel"><span>전화번호를 입력하시오</span><br>
    <button id = "log" onclick="login()">Login</button><br><br>
    <span id="confirm"></span>

</body>

위에 로그인 성공 화면 과 실패 화면을 나타낸다. 

코드를 활용해서 로그인 화면을 구현하는데 활용 가능하다.

 

* HTML5 와 Canvas

웹 페이지 그래픽의 전통적인 방법
    1. 사진이나 그림 <img> 태그 이용
    2. 그래픽은 자바 애플릿이나 플래시 등 플러그인 사용

    => 문제점이 많다.

    . 캔버스 도입

    - 플러그인의 도움 없이 자바스크립트 코드로 
        웹 페이지에서 자유롭게 그래픽을 수행할수 있는 캔버스 기능을 도입.
    
    - 캔버스 기능은 새로 도입된 <canvas> 태그로 브라우저 화면상에 할당된 공간에서 이루어진다.

    - 캔버스의 그래픽 그리기는 자바스크립트 코드로만 가능하다.

    <canvas> 태그 형식

            <canvas id = "캔버스 객체 id"
                    style = "CSS3 스타일 시트"
                    width= "캔버스 영역의 너비"
                    height="캔버스 영역의 높이">

                    이 태그를 지원하지 않는 브라우저가 출력할 HTML 텍스트
                    </canvas>
            
            : width,height : 캔버스가 만들어지는 영역의 크기(픽셀단위)로 생략가능 , 각각 디폴트 300 , 150 픽셀

    - 브라우저는 <canvas> 태그가 만들어진 영역에 사각형의 빈 캔버스 공간을 할당하며 , 
    하나의 웹 페이지에 여러개의 캔버스를 만들 수 있다.


    . 캔버스 그리기의 2가지 유형

    - 첫번째 방법은 beginPath()를 호출하여 빈 경로를 만들고 , 경로(Path)에 먼저 선,원,사각형 등의 도형을 모아 놓고 한 번에 
    캔버스에 그림을 그리는 방법이다.

    - 두번째 방법은 경로에 담지 않고 바로 캔버스에 그리는 방법이다.


    . 컨텍스트 객체의 메소드

    . beginPath()   // 이전 경로를 모두 지우고 새로 시작한다 . (경로와 관련)
    . closePath()   // 경로의 끝과 시작점을 연결하는 선을 추가하고 경로를 닫는다. (경로와 관련)
    . moveTO()      // 경로에 새 점을 만든다. (경로와 관련)
    . lineTo()      // 경로의 끝 점과 연결하는 선을 추가한다.(경로와 관련)
    . rect()        // 경로에 사각형을 추가한다. (경로와 관련)
    . arc()         // 경로에 원호를 추가한다. (경로와 관련)

    . fill()        // 경로에 만들어진 모든 도형(사각형과 원호)을 외곽선없이 내부만 색으로 채워 캔버스를 그린다. (경로에 있는 도형 캔버스 그리기) 
    . stroke()      // 경로에 담겨 있는 모든 도형을 외곽선만 캔버스에 그린다.(경로에 있는 도형 캔버스 그리기) 
    
    . clearRect()   // 캔버스에서 사각형 영역을 채운다 (캔버스에 바로그리기) 
    . fillRect()    // 캔버스에 외곽선 없이 사각형 영역을 색으로 바로 칠한다.  (캔버스에 바로그리기)
    . storkeText()  //  텍스트 (문자열) 를 캔버스에 바로 그린다. (캔버스에 바로그리기)
    . storkeRect()  // 사각형을 경로에 추가하지 않고 캔버스에 바로 그린다.(캔버스에 바로그리기)
    . drawImage()   // 이미지를 캔버스에 바로 그린다 .(캔버스에 바로그리기)

 

    <title>캔버스 그리기</title>
</head>
<body>
    <h3>캔버스 그리기</h3>
    <hr>
    <canvas id="myCanvas" style="background-color:aliceblue"
            width="250" height="150"></canvas>
    <script>
        var canvas = document.getElementById("myCanvas");
        var context = canvas.getContext("2d");

        // getContext("2d")가 리턴한 객체는 2차원 그래픽에 사용되는
        // 프로퍼티와 메서드를 가진 CanvasRenderingContext2D 타입
        // 객체이다. 이것을 context 객체라고 부르기도 한다.
        // 캔버스 객체는 2차원과 3차원을 모두 지원한다
        // 2차원은 canvas.getContext("2d") 를
        // 3차원은 canvas.getContext("webgl") 를 호출하면 된다.
        // webgl => Web Graphics Library 는 플러그인 도움없이
        //         브라우저를 막론하고 2D / 3D 차원의 그래픽을 지원하는 자바스크립트 API 이다.
        // getContext() = > 컨버스에 그림을 그리는 컨텍스트 객체 리턴

        // 파란선으로 사각형 그리기

        context.beginPath();        // 빈경로 만들기
        context.strokeStyle = "blue";   // 선 색 설정
        context.rect(30,30,50,50);  //  (30,30)에서 50x50 크기 사각형을 경로에 삽입
        context.stroke();           // 경로에 있는 모든 도형의 외곽선 그리기

        // violet 색으로 채운 사각형 그리기
        context.beginPath();        // 빈 경로 만들기
        context.fillStyle = "violet";   // 채우기 색
        context.rect(60,60,50,50);  // (60,60) 에서 50x50 크기 사각형을 경로에 삽입
        context.fill();             // 경로에 있는 모든 도형의 내부만 채워 그리기

        // green 색으로 텍스트 만들기
        context.font = "20px Gothic";
        context.fillStyle = "green";                // 채우기 색
        context.fillText("Text in Canvas",100,50);  // 텍스트를 경로에 넣지않고 바로 그리기
                
    </script>
    
</body>

캔버스 그리기 실행 화면이다 .  캔버스 활용 예를 보여주고있다.

 

    <title>선의 색과 굵기</title>
</head>
<body>
    <h3>선의 색과 굵기</h3>
    <hr>
    <canvas id="myCanvas" style="background-color:aliceblue"
        width="180" height="300"></canvas>
    <script>
        var canvas = document.getElementById("myCanvas");
        var context = canvas.getContext("2d");

        // 1픽셀의 blue 직선 그리기
        context.beginPath();
        context.moveTo(20,20);
        context.lineTo(150,50);
        context.strokeStyle = "blue";
        context.stroke();           // 1 픽셀의 blue 직선 그리기

        context.beginPath();
        context.moveTo(150,20);
        context.lineTo(20,50);
        context.strokeStyle = "red";
        context.stroke();           // 1 픽셀의 red 직선 그리기

        // 10 픽셀 yellowgreen 사각형 그리기
        context.beginPath();
        context.rect(20,80,120,50);
        context.lineWidth = 10;     // 선 굵기 10 픽셀
        context.strokeStyle = "yellowgreen";    // 선 색
        context.stroke();

        // 20 픽셀 violet 색 원호 그리기
        context.beginPath();
        context.arc(80,220,50,0.5*Math.PI , 0 , false)      // 0.8 * Math.PI /2 => 90 각도 ,  0 => 3시 방향 

        context.lineWidth = 20 ;            // 선굵기 20 픽셀
        context.strokeStyle = "violet";     // 선 색
        context.stroke();
    </script>
    
</body>

위와 같이 canvas 로  다양한 도형을 만들어 낼수 있음을 보여준다.