안녕하세요. 송기석입니다.

 

원래 이 글은 저번 주에 올라가야 하는 글입니다. 핑계 없는 무덤이 없듯이 일에 밀려 여유를 가지지 못해서 그만 글을 밀리고 말았습니다. 세상에 바쁜 사람이 저만 있겠습니까? 반성하는 의미로 이번 글을 올리고 다음날 하나의 글을 더 올릴 예정입니다. 추운 겨울 감기 조심하세요.

 


객체의 기초

 

자바스크립트에서 단순한 데이터 타입으로 숫자, 문자열, 불리언(true, false), null, undefined가 있습니다. 이들을 제외한 다른 값들은 모두 객체입니다. 자바스크립트의 객체는 변형 가능한 속성들의 집합이라고 할 수 있습니다. 자바스크립트에서는 배열, 함수, 정규 표현식 등과 객체 모두가 객체입니다.

객체는 이름과 값이 있는 속성들을 포함하는 컨테이너라고 할 수 있습니다. 속성의 이름은 문자열이면 모두 가능합니다. 여기에는 빈 문자열도 포함합니다. 속성의 값은 undefined를 제외한 자바스크립트의 모든 값이 사용될 수 있습니다.

자바스크립트의 객체는 클래스가 필요 없습니다. 새로운 속성의 이름이나 값에 어떠한 제약 사항이 없습니다. 객체는 데이터를 한 곳에 모으고 구조화 하는데 유용합니다. 객체 하는 다른 객체를 포함할 수 있기 때문에, 그래프나 트리 같은 자료구조를 쉽게 표현할 수 있습니다.

자바스크립트에는 객체 하나에 있는 속성들을 다른 객체에 상속하게 해주는 프로토타입(prototype) 연결 특성이 있습니다. 이 특성을 잘 활용하면, 객체를 초기화 하는 시간과 메모리 사용을 줄일 수 있습니다.


 

01 객체 리터럴

 

객체 리터럴은 새로운 개체를 생성할 때 매우 편리한 표기법을 제공합니다. 이 표기법은 아무 것도 없거나 하나 이상의 이름/값 쌍들을 둘러싸는 중괄호이며, 표현식이 있을 수 있는 곳이라면 어디라도 위치할 수 있습니다.

 

var empty_object = {};

 

var stooge = { “first-name”: “Jerome”

                   ,“last-name”: “Howard”

          }

 

속성의 이름은 어떤 문자열이라도 가능합니다. 빈 문자열도 가능합니다. 속성 이름에 사용하는 “”는 자바스크립트에서 사용할 수 있는 유효한 이름이고 예약어가 아니면 생략 가능합니다. 쉼표는 이름/값 쌍들을 구분할 때 사용합니다.

속성의 값은 어떠한 표현식도 가능합니다. 중첩된 객체도 가능합니다.

 


02. 속성값 읽기

 

객체에 속한 속성의 값은 두가지 방법으로 읽을 수 있습니다. 대괄호([])를 사용하는 방법과 마침표(.)를 이용하는 방법이 있습니다.

 

stooge[“first-name”]   // “Jerome”

stooge.last-name         // “Howard”

 

객체에 존재하지 않는 속성을 읽으려고 하면 undefined를 반환합니다.

 

stooge[“temp”]         //undefined

stooge.temp              //undefined

 

|| 연산자를 사용하여 기본 값을 지정할 수 있습니다.

 

var middle = stooge["middle-name"] || "(none)";

 

여기서 기본 값이라는 것은 가리키는 곳에 값이 undefined인 경우 대신 사용하는 값을 말합니다.

  

존재 하지 않는 속성, undefined의 속성을 참조하려 할 때 TypeError 예외가 발생하는 것을 방지 하기 위해 && 연산자를 사용합니다.

 

stooge.env                            // undefined

stooge.env.model                      // throw “TypeError”

stooge.env && stooge.env.model          // undefined

 

초기값과 마찬가지로 TypeError 예외가 발생하는 대신 undefined를 대신 나오도록 합니다.

 


03 속성값 갱신

 

객체의 값은 할당에 의해 갱신합니다. 속성 이름이 이미 존재하면 객체 안에 존재하는 속성값만 교체합니다.

 

stooge[‘first-name’] = ‘Tam’;     // Jerome -> Tam 

 

이와 다르게 속성이 객체 내에 존재하지 않는 경우에는 해당 속성을 객체에 추가 합니다. 보통 속성에 값을 넣으면 값이 들어 가는 것은 일반적이라 특별한 것이 없습니다. 속성이 존재 하지 않는데 값을 넣으면 속성이 없다고 에러가 나는 것이 보통인데 자바스크립트에서는 없으면 바로 속성을 추가하는 것이 편리합니다.

 


04 참조

 

객체는 참조 방식으로 전달 됩니다. 결코 복사되지 않습니다.

 

var x = stooge;

x.nickname = ‘Curly’;

var nic = stooge.nickname;

     // xstooge가 모두 같은 객체를 참조하기 때문에,

     // 변수 nick의 값은 ‘Curly’.

 

var a = {}, b = {}, c = {};    // a, b, c는 각각 다른 빈 객체를 참조

 

  a = b = c = {};                 // a, b, c는 모두 같은 빈 객체를 참조

 

내일 자바스크립트를 잡아라.-05을 계속 쓰겠습니다.