Index

3. Type

3.2 객체타입 (Object Types)

객체타입의 특징은

  1. 객체는 프로퍼티로 값과 메서드를 가지며, 이 둘은 각각 객체의 상태와 동작을 나타냅니다.

  2. 값을 변수에 저장할 때 값 자체가 아닌 값의 위치가 저장된다는 점입니다. 때문에 객체 값을 다른 변수에 할당 할때는 값 자체가 복사되어 저장되는 것이 아닌 **값의 참조(위치)**가 저장됩니다.

  3. 다만 다른 책이나 강의에서 call by reference, call by value라고 언급이 되어 있는 경우도 있는데 이렇게 말하는 것은 적당치 않습니다. JavaScript는 call by value만 존재하기 때문입니다. (추후 언급할 내용입니다. 잘 이해가 안되시면 뒤에서 다시 언급하니 넘어가셔도 괜찮습니다. 잘 정리된 글이 있어 블로그 링크를 하단에 첨부합니다.)

    [JS] 📚 Call by Value & Call by Reference (+ Call by Sharing)

let arr1 = [1, 2, 3];
let arr2 = arr1;
console.log(arr2);

arr1[0] = 10;
// arr1 = [10, 20];
console.log(arr2);

// 비교해보세요.
let value1 = 10;
let value2 = value1;
console.log(value2);

value1 = 20;
console.log(value2);

<aside> 💡 원시타입도 메서드가 존재했던것 같은 느낌적인 느낌이 있습니다! 맞습니다. 원시타입도 프로퍼티와 메서드를 사용했었죠? 자바스크립트는 원시타입도 마치 객체타입처럼 사용할 수 있게 autoboxing 이라는 과정을 거치게 됩니다.

이런 과정을 거치는 이유는 원시타입도 객체타입처럼 사용할 수 있게 함으로써 일관적인 사용 경험을 사용자에게 제공하기 위해서입니다.

let val = 'hello!';
console.log(val.toUpperCase());

// 위의 코드가 내부적으로는 아래처럼 실행됩니다. 이것이 바로 autoboxing 입니다.

let val = 'hello!';
let temp = new String('hello!');
console.log(temp.toUpperCase());
temp = null;

</aside>

1. 배열 (Array)

배열(Array)은 데이터를 순서대로 저장하는 객체입니다. 하나의 데이터를 표현하는 원시타입과 달리 여러개의 데이터를 한 변수에 저장할 수 있기 때문에 데이터를 추가하거나, 제거, 정렬, 검색 등 다양한 작업을 수행할 수 있도록 여러가지 메소드를 제공합니다.

배열의 특징

  1. 배열은 빈 배열로 생성하거나 요소가 포함된 배열로 생성할 수 있습니다.

    const arr = [];
    const arr = [1, 2, 3];
    const arr2 = new Array(4, 5, 6);
    const arr2 = new Array(3);
    
  2. 배열은 숫자를 사용하여 값에 접근할 수 있습니다. 이때 숫자는 값의 순서를 의미하며, 이 순서를 인덱스(index), 그리고 배열안에 존재하는 값을 원소(elements)라고 부릅니다. 심지어 존재하지 않는 원소에도 접근이 가능합니다.

    const arr = [1, 2, 3];
    // 배열 안의 원소에 접근하기 위해서는 인덱스 번호를 이용합니다. 
    console.log(arr[0]); // 1
    console.log(arr[1]); // 2
    console.log(arr[2]); // 3
    console.log(arr[3]); // ??
    
  3. 배열은 가지고 있는 원소의 길이를 나타내는 length 프로퍼티를 가지고 있습니다. (문자열에서도 사용했었죠?)

    const myArray = [1, 2, 3, 4, 5];
    console.log(myArray.length); // 5