ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바스크립트 객체와 배열 미리보기
    자바스크립트 2023. 3. 23. 14:33

    객체란?

    복합적인 정보를 프로퍼티 (property) 즉, (키 와 값의 조합)으로 저장하는 자료형을 말한다.

    객체는 원시타입이 아닌 참조 (reference) 타입이다.

    const objName = {
      key1: value1,
      key2: value2,
      ...
    }; //이런 형식을 가진다~
    
    const person1 = {
      name: '김철수',
      age: 25,
      married: false
    };
    
    console.log(typeof person1); //object
    console.log(person1);

    객체는 프로퍼티를 가지기 때문에 하나의 객체에 여러가지 데이터들을 넣을 수 있다.

    person1에는 name 정보, age 정보, married 정보가 다 들어있는 것을 볼 수 있다.

     

    1. 프로퍼티 접근

    프로퍼티에 접근하는 방법은 두 가지이다.

    console.log(
      person1.name,
      person1.age,
      person1.married
    ); //첫번째 방법이다
    
    console.log(
      person1['name'], // 속성명을 string으로
      person1['age'],
      person1['married'],
    ); //두번째 방법

    이렇게 객체명.프로퍼티 키 로 접근이 가능하다.

    아니면 []를 이용하여 프로퍼티에 접근이 가능하다.

     

    만약 객체에 없는 키로 접근을 하면?

    console.log(person1.birthdate);
    console.log(person1['job']);
    //모두 undefined를 반환한다

    undefined로 반환이 된다.

     

    (키) in (객체) 를 사용하여 특정 키 포함 여부를 확인 할 수 있다.

    console.log(
      'age' in person1, //true
      'job' in person1 //true
    );

     

    2. 프로퍼티 수정 및 추가

    // 특정 프로퍼티의 값 변경
    person1.age = 26;
    person1['married'] = true
    
    console.log(person1); //person1의 age와 married의 값이 각각 26, true로 변경됨
    
    // 새 프로퍼티 추가
    person1.job = 'developer';
    person1['bloodtype'] = 'AB'
    
    console.log(person1); //person1의 기존 프로퍼티 이외에 job, bloodtype의 프로퍼티가 추가됨

    주의해야 할 점은 person1을 const로 선언을 했음에도 그 내용을 수정할 수 있다는 것이다.

     

     

    배열

    객체와 같이 원시타입이 아닌 참조 (reference) 타입이다. 아래 예시를 보면서 이해하자.

    const winners = [12, 592, 7, 48];
    const weekdays = ['월', '화', '수', '목', '금', '토', '일'];
    
    // 자료형에 관계없이 한 배열에 넣을 수 있음
    const randoms = ['홍길동', -24, true, null, undefined];
    
    console.log(typeof winners); //object
    console.log(winners, weekdays, randoms);

    배열 하나에 다양한 자료형의 데이터들을 넣을 수 있음을 확인할 수 있다.

    그리고 typeof를 해보면 object가 반환되는 것을 볼 수 있는데 여기서 배열을 원래 객체다. 근데 여기서 어떤 특정 기능을 추가한 것이 배열이라는 것이다 (자바스크립트에서). 

    이것은 웹 콘솔에서 winners라는 배열을 출력했을때의 그림이다. 그림과 같이 배열도 객체이기 때문에 키와 값으로 구성되어 있음을 볼 수 있다.

    그 키란 0부터 시작하는 것에 유의하자. 

     

    배열의 값과 길이에 접근하는 방법

    // 특정 순서의 값에 접근하는 법 (0부터 시작)
    console.log(winners[0], weekdays[6], randoms[3]); //12 '일' null
    // 배열의 길이(요소의 갯수)를 얻는 법
    console.log(winners.length, weekdays.length, randoms.length);// 4 7 5
    // 마지막 요소 얻기
    console.log(winners[winners.length - 1]); //48

    마지막 요소 얻는 것만 살펴보면 배열의 length는 1부터 4까지 4개가 있어서 4인 것을 알 수 있다. 하지만 배열의 요소 즉, 특정 순서의 값에 접근할 때는 0부터 시작하는 것을 알 수 있다. 따라서 마지막 요소를 얻으려면 length -1 을 하는 것이다. 

     

    배열 수정 및 추가

    const numbers = [1, 2, 3];
    
    // 특정 위치의 값 수정
    numbers[2] = 5;
    
    console.log(numbers); //[1, 2 ,5]

    배열의 마지막 요소가 3에서 5로 수정됐다.

    // 맨 끝에 값 추가
    numbers.push(10);
    
    console.log(numbers); //[1, 2, 5, 10]

    배열의 마지막 요소에 10이라는 요소가 새롭게 추가 되었다.

     

    배열의 범주 너머로 접근하면 undefined 반환

    const winners = [12, 592, 7, 48];
    console.log(winners[winners.length]); //undefined

     

    중요한점은 배열과 객체는 중첩하용이 가능하다는 점이다. 

    const person2 = {
      name: '김달순',
      age: 23,
      languages: ['Korean', 'English', 'French'],
      education: {
        school: '한국대',
        major: ['컴퓨터공학', '전자공학'],
        graduated: true,
      }
    };
    
    console.log(person2.languages[2]); //French
    console.log(person2.education.graduated); //true
    
    const groups = [[1, 2], [3, 4, 5], [6, 7, 8, 9]];
    
    const weapons = [
      { name: '롱소드', damage: 30, design: ['화룡검', '뇌신검'] },
      { name: '활', damage: 12 },
      { name: '워해머', damage: 48 },
    ];
    
    console.log(groups[1][2]); //5
    console.log(weapons[2].damage); //48
    console.log(weapons[0].design[0]); //화룡검

    person2란 객체에 배열을 넣을수도 있고 education 이라는 프로퍼티가 있는데 이 프로퍼티에 또 객체가 들어 있음을 알 수 있다. 

    또한 groups란 배열에 배열이 포함될 수 있고 weapons란 배열에 객체가 포함된 것을 확인 가능하다.

     

    나중에 배열과 객체에 대해서 자세히 다룰 것이고 지금은 이정도만 알고 넘어가자.

Designed by Tistory.