개발정리

javascript / Chapter3. 객체 본문

JS/javascript

javascript / Chapter3. 객체

성구님 2017. 1. 23. 22:02
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

들어가며

  • 자바스크립트에서 단순 데이터 타입
     {
        숫자,
        문자열, 
        불리언(true/false),
        null,
        undefined
     }
  • 이 외의 모든 값은 객체이다.
      숫자, 문자열, 불리언은 메소드가 있기 때문에 유사객체라고 할 수 있다.
      하지만, 값이 정해지면 변경 불가능 (immutable)
  • Class-free 클래스가 없어도 객체 생성 가능
  • 객체 in 객체 in 객체 ... 설계 가능
     그래프, 트리 같은 자료구조를 쉽게 표현할 수 있다.
  • 프로토 타입을 사용하면 객체 초기화 시간, 메모리를 줄일 수 있다.

 

1. 객체 리터럴

객체 생성 방법
var foo = {};
  
var bar = {
    name : 'seongtae',
    age : 28
}
  • 속성의 이름은 어떤 문자열이든 가능. 공백도
  • "," 는 "속성명 : 값"을 구분
  • 중첩 가능

 

2. 속성값 읽기

  • 객체의 속성값은 대괄호로 읽어 올 수 있다.
     var some[속성명]
  • if(속성명이 유효한 js 이름 && 속성이름이 예약어가 아닐 때)
     마침표 표기법 사용가능.
     some.속성명
  • 객체에 속성명이 존재하지 않는다면 undefined 반환
  • || 연산자를 사용하여 기본값 지정가능
     var some = stooge[속성명] || "none"
  • 존재하지 않는 속성을 참조하려하면 TypeError 예외. 이런 경우를 방지하기 위해 && 연산 사용
     var some = none.undefined && some.data

 

3. 속성 값의 갱신

  • 객체의 값은 할당에 의해 갱신.
  • 이미 할당된 속성명인 경우 속성 값 교체.
  • 없는 속성명일 경우 객체에 속성 추가.

 

4. 참조

  • 객체는 참조에 의해 전달.
  • 결코 복사되지 않는다.
  • 복사방법은 깊은 복사와 얕은 복사가 있다. 따로 찾아봐야함.

 

5. 프로토 타입

  • 모든 객체는 "속성을 상속하는 프로토타입" 객체에 연결.
  • 객체 리터럴로 생성되는 모든 객체는 자바스크립트 표준 객체인 object의 속성인 prototype(object.prototype)에 연결.
  • 객체를 생성 할 때 프로토타입이 될 객체를 선택 가능
     Object.create를 사용해 프로토타입이 될 객체 선택 가능하다.
  • 객체의 프로토 타입 연결은 값의 갱신에 영향 받지 않음.
     즉, 객체를 변경하더라도 프로토 타입에는 영향이 가지 않는다.
  • 객체의 없는 속성을 읽으려는 경우, 해당 속성을 프로토 타입에서 찾으려한다.
     이 과정을 프로토 타입 체인( prototype chain)이라고 한다.
     그 어느 값이 없다면 undefined
  • 이런 일련의 과정을 위임(delegation)이라 한다.

 

6. 리플렉션

  • 객체에 어떤 속성이 있는지?? 알아봐야함
  • 이 때 type of 연산자는 속성의 타입을 살펴보는데 유용
  • 그러나 프로토 타입의 속성 반환 할 수도 있다. 
     이것을 방지하기 위해 hasOwnProperty 메소드 사용. 프로토 타입은 바라보지 않음.

 

7. 열거

  • for in 구문으로 객체의 모든 속성명 열거 가능.
  • 프로토 타입 필터링 → type of 와 hasOwnProperty 사용

    열거 typeof + hasOwnProperty
    var name;
      
    for(name in another){
        if(type of another[name] !== 'function'){
            //처리
        }
    }
  • 만약 순서 / 이름 순으로 뽑고 싶다면

    열거 이름순
    var i;
      
    var properties = [
        name,
        age
    ]   //원하는 순서
      
    for(i = 0 ; i < properties.length ; i++){
        document.writeIn(properties[i] + " : " + another[properties[i]]);
    }
  • 이 방법은 프로토 타입을 바라보지 않는다.

 

8. 삭제

  • delete 연산자
  • 프로토 타입은 접근하지 않는다.

    delete
    another.nickname // joe
    delete another.nickname
    another.nickname // 프로토 타입에 있던 데이터
  • 삭제한 속성명이 프로토 타입에 존재한다면 프로토 타입 속성값이 나타남.

 

9. 최소한의 전역 변수

  • JS는 전역변수 사용이 아주 쉽다.
  • 전역변수는 프로그램의 유연성을 약화 시킨다.
  • 전역 변수 사용을 최소화하는 방법은 한 가지 전역 변수만 사용하는 것.
  • 이 전역 변수를 다른 전역 변수의 컨테이너로 사용.
     장점
     1) 다른 어플리케이션이나 라이브러리 연동 시 발생하는 문제점을 줄일 수 있다
     2) 가독성이 좋아진다. 
  • Closure를 사용해 전역변수를 효과적으로 줄일 수 있다.

 

 

참고문헌

1. 더글라스 크락포드, 김명신  자바스크립트 핵심가이드 javascript The good parts』, 한빛미디어, p39


'JS > javascript' 카테고리의 다른 글

javascript / Chapter4. 함수 2  (0) 2017.02.08
javascript / Chapter4. 함수 1  (0) 2017.01.31
javascript / Chapter2.자바스크립트의 좋은 문법들 - 요약  (0) 2017.01.23
javascript 객체 참조(2)  (0) 2017.01.10
javascript 참조  (0) 2017.01.09
Comments