참고
- https://poiemaweb.com/js-object
- https://soeunlee.medium.com/javascript%EC%97%90%EC%84%9C-%EC%99%9C-%ED%95%A8%EC%88%98%EA%B0%80-1%EA%B8%89-%EA%B0%9D%EC%B2%B4%EC%9D%BC%EA%B9%8C%EC%9A%94-cc6bd2a9ecac
- https://velog.io/@reveloper-1311/%EC%9D%BC%EA%B8%89-%EA%B0%9D%EC%B2%B4First-Class-Object%EB%9E%80

객체

- 키(key)값(value)으로 구성된 프로퍼티(property)들의 집합

- 자바스크립트의 함수는 일급 객체이므로 값으로 취급할 수 있다.

- 즉 프로퍼티 값으로 함수를 사용할 수 있고 프로퍼티 값이 함수일 경우 일반 함수와 구분하기 위해 메소드라고 부른다.

- 객체는 데이터를 의미하는 프로퍼티(property)와 데이터를 참조하고 조작할 수 있는 동작을 의미하는 메소드(method)로 구성된 집합이다.

 

일급 객체

다른 객체에서 연산(인자로 전달, 결과값으로 리턴, 변수에 할당)을 할수 있도록 지원하는 객체 

 

(조건)

1) 다른 객체에서 인자로 전달할 수 있다.

    var a = function(num) {
        return num
    }
    
    function add(number) {
        var sum = number+number;
        console.log(sum); // 6
    }
    
    add(a(3)) // a(num)함수를 add(number)함수의 인자로 사용

2. 변수에 할당할 수 있다.

    var a = function(num) {
        console.log(num)
    }

3. 다른 함수의 결과로 리턴될 수 있다.

    function add(numA) {
        return function (numB) {
            return numA + numB;
        }
    }
    console.log(add(2)(3)); // 5

 

객체 생성 방법

1. 객체 리터럴

- 중괄호({})를 사용하여 {}내에 프로퍼티를 추가해서 객체를 생성할 수 있고 {}내에 아무것도 기술하지 않으면 빈 객체가 생성된다. 

    var me = {
        name : 'Kim',
        age : 25,
        introduce : function() {
            console.log("my name is " + this.name);
        }
    }
    
    me.introduce() // my name is Kim

2. 생성자 함수

- 프로퍼티가 동일한 객체를 여러개 쉽게 생성할 수 있다.

- 생성자 함수 이름은 보통 대문자로 시작한다.(생성자 함수임을 표현하기 위해)

- 프로퍼티 or 메소드명 앞에 기술한 this는 생성자 함수가 만들 인스턴스(instance)를 가리킨다.

- this에 연결(바인딩)되어 있는 프로퍼티 및 메소드는 public(외부에서 참조 가능)하다.

- 생성자 함수 내에서 선언한 변수는 private(외부에서 참조 불가능)하다.(즉 생성자 함수 내부에서는 접근이 가능하나 외부에서는 접근 불가능)

    function student(name, age) {
        var check = true;
        this.name = name;
        this.age = age;
        console.log(check); // true
    }
    
    var a = new student('Kim', 25);
    console.log(a) // { name: 'Kim', age: 25 }
    console.log(a.check) // undefined

 

객체 프로퍼티 접근

1. 프로퍼티 키

- 프로퍼티 키는 문자열로 지정한다.

- 문자열 타입의 값으로 수렴하는 표현식도 가능하다.(단 따옴표('' or "")를 사용해야함)

- 자바스크립트에서 사용 가능한 이름인 경우 따옴표를 생략할 수 있지만 유효하지 않을 경우 반드시 따옴표를 사용해야한다.

    var like = {
        food-name : 'ramen', // 불가능  이유:SyntaxError: Unexpected token '-'
        'food-name' : 'ramen', // 가능
        
        food_name : 'rice', // 가능
    }

2. 프로퍼티 값 읽기

- 객체의 프로퍼티 값 접근 방법은 마침표(.) 표기법 과 대괄호[] 표기법이 있다.

- 프로퍼티 키가 유효한 자바스크립트 이름이고 예약어가 아닌 경우 (마침표, 대괄호)표기법 모두 사용 가능하다.

- 프로퍼티 키가 유효하지 않은 자바스크립트 이름이거나 예약어인 경우 대괄호 표기법으로 읽어야 하고

대괄호 내에 들어가는 프로퍼티 이름은 반드시 문자열이어야 한다.

var person = {
  'first-name': 'Ung-mo',
  'last-name': 'Lee',
  gender: 'male',
  1: 10
};

console.log(person);

console.log(person.first-name);    // NaN: undefined-undefined
console.log(person[first-name]);   // ReferenceError: first is not defined
console.log(person['first-name']); // 'Ung-mo'

console.log(person.gender);    // 'male'
console.log(person[gender]);   // ReferenceError: gender is not defined
console.log(person['gender']); // 'male'

console.log(person['1']); // 10
console.log(person[1]);   // 10 : person[1] -> person['1']
console.log(person.1);    // SyntaxError

3. 프로퍼티 삭제

- delete 연산자를 사용하면 객체의 프로퍼티를 삭제할 수 있다.(피연산자는 프로퍼티 키)

    var me = {
        name : 'Kim',
        age : 25,
    }
    
    console.log(me.age) // 25
    delete me.age;
    console.log(me.age) // undefined

4. for-in 문

- 객체에 포함된 모든 프로퍼티에 대해 루프를 수행할 수 있다.

- 단 for-in문은 배열에는 사용하지 않는 것이 좋다

  • 배열은 순서를 보장하는 데이터 구조이지만 for-in문은 순서를 보장하지 않기 때문
  • 배열 요소만을 순회하지 않는다.
var array = ['one', 'two'];
array.name = 'my array';

for (var index in array) {
  console.log(index + ': ' + array[index]);
}

/*
0: one
1: two
name: my array
*/

'Javascript' 카테고리의 다른 글

[Javascript] 함수(function)  (0) 2021.06.30
[Javascript] 객체와 변경불가성(Immutability)  (0) 2021.06.22
[Javascript] 데이터 타입  (0) 2021.06.18
자잘한 용어 정리  (0) 2021.06.09
[Javascript] var, let, const 차이점  (0) 2021.02.15

+ Recent posts