2015년 2월 17일 화요일

[JavaScript] 자바스크립트 Object(객체)

자바스크립트의 Object 데이터 타입

자바스크립트(ECMAScript)의 Object 데이터 타입은 다른 프로그래밍 언어의 Object 와 같이 여러개의 자료(Data)들과 함수(Function)들의 집합이다(자바스크립트도 객체지향프로그래밍언어(Object Oriented Programming language)이다). 주로 객체라 불리며 자바스크립트의 유일한 Composite/Reference Data Type 이다(다른 reference data type은 모두 object 타입의 하위 타입).

참고로 자바스크립트에서 Primitive Data Type들을 제외한 모든것들이 다, 심지어는 함수까지 모든게 Object 타입이다. 또한 Primitive Data Type 마져 접근될시에는 자바스크립트 VM에의해서 Object 타입으로 변환되어 사용된다. 즉 모든게 Object 타입이라 할 수는 없지만 모든게 Object 타입처럼 작동한다고 할 수 있다.
이러한 이유로 Object(객체) 자료형은 모든 자료형의 최상위 타입이라고 할 수 있다. 객체 자료형을 포함 하위 타입의 자료형들은 총 7개의 함수들과 속성들을 가진다.

자바스크립트(ECMAScript)의 Object 타입은 모든 다른 객체들이 파생된 Base Type 이다. Object 타입은 기본적으로 총 7개의 프로퍼티(Property)들과 메소드(Method)들을 가진다.
  • constructor
    • Object를 생성하는 생성자
  • hasOwnProperty(속성이름)
    • 객체에 주어진 속성이 있는지를 확인하는 메소드
  • isPrototypeof(Object)
    • 객체가 파라미터로 주어진 Object 의 Prototype 인지를 확인하는 메소드
  • propertyIsEnumerable( 속성이름)
    • 객체의 속성들이 for-in 구문으로 Enumerated(열거) 될 수 있는지
  • toLocaleString()
    • 객체를 실행 환경에 알맞은 형태의 String으로 표현한다
  • toString()
    • 객체를 String으로 표현한다
  • valueOf()
    • object 의 primitive value(원시 값)을 반환한다. 
    • 즉 객체에 가장 알맞는 표현을 string, number, boolean 값 중 1개로 반환한다.

    자바스크립트(ECMAScript)에서의 Object(객체)는 자바처럼 new 연산자를 이용해서 선언거나 Object Literal Notation을 이용해서 선언 될 수 있다. 그리고 개발자들은 새로운 객체를 선언하면서 또는 선언한 후, 속성과 기능(메소드)들을 추가함으로써 자신만의 객체를 만들 수가 있다.

    
    //New 연산자를 사용해서 선언
    var objectVariable = new Object();//이게 표준
    var improperObjectDeclaration = new Object;//괄호가 없어도 되지만 되도록이면 괄호를 붙이도록 하자.
    var demoObject1 = new Object();
    demoObject1.name = "Demo Object 1";//속성(Property) 부여
    demoObject1.message = "This is Demo Object";//속성(Property) 부여
    
    //Object Literal Notation을 이용해서 선언
    var demoObject2 = {
     name : "Demo Object 2",
     message : "This is Demo Object 2"
    };
    
    var demoObject3 = {
     "name" : "Demo Object 2",
     "message" : "This is Demo Object 3",
     3 : "Three", //숫자를 속성 이름에 사용할 수도 있다. 이 경우에는 이름이 자동으로 String 형으로 변환된 후 저장된다
            "This is" : 7798 //속성 이름에 스페이스가 들어갈 수도 있다.
    };
    
    var demoObject4 = {}; // new Object() 와 같다
    demoObject4.name = "Demo Object 4";
    demoObject4.message = "This is Demo Object 4";
    

    위와 같이 선언된 객체의 속성들은 Dot Notation 을 통하거나 Bracket Notation을 이용해서 접근이 가능하다
    단 Dot Notation을 이용할 경우에는 숫자로 이름 지어진 속성이나 이름에 스페이스가 들어가는 속성에는 접근이 불가능하다. 이는 JavaScript의 문법(Syntax)적 한계이니, 이러한 경우에는 Bracket Notation을 이용하면 된다

    
    // Dot Notation
    console.log(demoObject3.name);
    console.log(demoObject3.message);
    console.log(demoObject3.3); // Syntax 에러
    console.log(demoObject3.This is); // Syntax 에러
    demoObject3.message = "New Message";
    
    // Bracket Notation
    console.log(demoObject3["name"]);
    console.log(demoObject3["message"]);
    console.log(demoObject3["3"]);
    console.log(demoObject3["This is"]); 
    // Bracket Notation의 경우에는 이런식의 접근도 가능하다
    var propertyName = "name";
    console.log(demoObject3[propertyName]);
    demoObject3[propertyName] = "new Demo Object";
    


    댓글 없음:

    댓글 쓰기