자바스크립트 객체
        자바스크립트의 객체는 {}내에 K:V(map형식)가 모여있는 형태로 작성된다.
        
        {k:v, k:v, k:V} // 자바스크립트 객체
        (참고) 자바스크립트 객체 모양의 문자열
        == JSON(Javascript Object Notation, 자바스크립트 객체 표기법)
        => "{K:V, K:V, K:V}"
        - 자바스크립트에서 객체를 생성하는 방법
        1. {} : 객체 리터럴 표기법을 이용한 생성
        2. 생성자 + new 생성자() 를 이용한 생성
    
<button id="btn1">객체 생성1</button>
<div class="area" id="div1"></div>
<hr>
<button id="btn2">객체 생성2</button>
<div class="area" id="div2"></div>
<h1>JSON(Javascript Object Notation, 자바스크립트 객체 표기법)</h1>
<pre>
    JS 객체 : {"memberID":"user01","memberPw":"pass01","age":20}
    JSON 문자열 : '{""}'
    - 간단한 포멧
    괄호{} 내에 key:value 쌍으로 구성"key":value}
    key : 반드시 문자열 사용 ( "" 표기 필수)
    value : String, Number, Boolean, Array, Object, Null 데이터 저장 가능
    
    - 객체{} 또는 배열[] 데이터를 효율적으로 표시가 가능하다.
    - 경량데이터 교환 방식
    - 순수 TEXT기반
    구조화 된 TEXT형식
    대부분 프로그래밍 언어에서 JSON 포멧 데이터를 핸들링 할 수 있는 라이브러리 제공
    시스템간 객체 교환에 용이하다.
<h2>JavaScript Json 내장 객체</h2>
<pre>
    JSON 포멧의 데이터를 간편하게 다룰 수 있는 내장된 객체
    JSON.stringify(JS객체) : JS객체 >> JSON문자열로 반환
    JSON.parse(JSON문자열) : JSON문자열을 다시 JS객체로 변환
</pre>
<button id="btn3">객체 생성2</button>
// 객채생성1
SCRIPT
document.getElementById("btn1").addEventListener("click", function () {
    // {} 객채 생성 및 다루기
    // **중요 **
    // JS객체 Key는 무조건 String (묵시적)
    // -> key 작성시 "", '' 를 작성안해도 String으로 인식한다.
    const brand = "스타벅스";
    const product = {
        "pName": "텀블러",
        brand: "투썸플레이스", //키값은 "brand"이기때문에 key밸류이지 전역변수가아님.
        color: ["red", "black", "silver"],
        price: 30000,
        'information': function () { // product 객체의 기능
            const brand = "메가커피"
            console.log(brand);
            // 객체 내부 함수에서 변수명을 작성 시
            // 해당 객체의 변수가 아닌 전역변수가 선택된다.
            // 같은 객체의 변수(key)를 선택하는 방법이 별도로 존재한다.
            // **객체 내부에서 this == 현재객체 선택
            console.log(this.pName);
            console.log(this.brand);
            console.log(this.color);
            console.log(this.price);
        }
    };
    console.log(product);
    //객체 기능 호출하기
    product.information();
    // 객체가 가지고 있는 값 출력하기
    const div1 = document.getElementById("div1");
    div1.innerHTML = "";
    // 객체의 값을 얻어오거나 대입하는 방법
    // 1) 얻어오기 : 객체명.key
    //              객체명['key']
    // 2) 대입하기 : 객체명.key = 값;
    //              객체명['key'] = 값;
    div1.innerHTML += "product.pName :" + product.pName + "
"
    div1.innerHTML += "product.brand :" + product.brand + "
"
    div1.innerHTML += "product.color :" + product.color + "
"
    div1.innerHTML += "product.price :" + product.price + "
"
    div1.innerHTML += "
"
    // product.price값 변경
    product.price = 25000;
    div1.innerHTML += "product.price :" + product.price + "
"
    div1.innerHTML += "
"
    // JS에 없는 key에 값 대입하기
    // -> 객체에 추가된다.
    product.capacity = "550ml";
    console.log(product);
    div1.innerHTML += "product.capacity :" + product.capacity + "
"
    div1.innerHTML += "
"
    // 객체의 key 제거 방법
    // delete 객체변수명.key
    // delete product.color;
    // console.log(product);
    // 객체명['key']방법으로 객체가 가지고 있는 모든 값 출력하기
    // -> for in 구문 ( 객체 전용 for문 )    
    div1.innerHTML += "product['capacity'] :" + product['capacity'] + "
"
    div1.innerHTML += "
"
    // for(let key in 객체명) : 매 바퀴마다 객체의 k를 하나씩 얻어와서 key 변수에 저장
    for (let key in product) {
        // 객체의 k는 모두 String == 'pName', 'price'
        div1.innerHTML += product[key] + "
"
    }
})
//생성자함수
document.getElementById("btn2").addEventListener("click", function () {
    const div2 = document.getElementById("div2");
    const stdList = [];
    //2. 생성자 함수 호출 : new 생성자함수명(매개변수)
    stdList.push(new Student(1, 2, "홍길동"));
    stdList.push(new Student(3, 10, "김길동"));
    stdList.push(new Student(2, 5, "임형주"));
    stdList.push(new Student(4, 7, "정서윤"));
    div2.innerHTML = "";
    // for of : 배열 컬렉션 요소 반복접근용 for문
    for (let std of stdList) {
        // console.log['std::' + std]
        // for in : 객체의 키 반복 접근용 for문
        for (let key in std) {
            // console.log['key::' + key]
            //std[kye]의 자료형이 function이면 실행 후 출력
            if (typeof std[key] == 'function') {
                div2.innerHTML += " introduce : " + std[key]() +
"
            } else {
                div2.innerHTML += ":" + std[key] + "
"
            }
        }
        div2.innerHTML += "
";
    }
})
//1. 생성자함수정의 : 생성자 함수의 시작은 반드시 대문자!
function Student(grade, ban, name) {
    // JS함수의 매개변수는 let, const var를 적지않는다.
    // 안적어도 해당 함수의 지역변수로 취급
    // 생성자 함수에서의 this는 무엇인가?
    // == new 연산자를 통해서 만들어지는 객체(앞으로 만들어질 객체)
    // 속성
    this.grade = grade;
    this.ban = ban;
    this.name = name;
    this.introduce = function () {
        return this.grade + "학년" + this.ban + "반" + this.name;
    }
}
document.getElementById("btn3").addEventListener("click", function () {
    const std = new Student(5, 7, "김영희");
    console.log(std); // 객체
    console.log(JSON.stringify(std)); // 객체에서 JSON문자열로 변환됨
    //** JSON 변환 시 객체의 기능은 포함하지 않는다!!! **/
    // JSON은 데이터 전달에 특화 된 형태
    const member = '{"memberID" : "user01", "membeerPw" : "pass01" , "age": 20}';
    console.log(member); // JSON 문자열
    console.log(JSON.parse(member)); // JSON >> 객체
})
 DOM