객체

GunYong·2023년 7월 5일
0

객체

자바스크립트를 배우면서 객체지향 언어라는 소리를 한번쯤은 들어봤을 것이다. 많이 들어본거에 비해 정확히 객체 지향 언어가 무엇인지 생각해본 적이 없는거 같다. 앞서 객체가 무엇인지부터 알아보자.

객체는 프로퍼티와 메서드로 구성된 집합체이다. 프로퍼티? 메서드?

프로퍼티 : 객체의 상태를 나타내는 data / 프로퍼티의 집합이 객체가 되며 key : value 로 나타난다.

메서드 : 프로퍼티를 참조하고 조작할 수 있는 동작

C++나 자바와 같이 클래스 기반 객체지향 언어는 클래스를 사전에 정의하고 필요할때 new연산자를 이용하여 생성자를 호출하고 인스턴스를 생성하며 객체를 생성한다.

인스턴트 : 클래스에 의해 생성되고 메모리에 저장된 실제 값

자바스크립트는 객체지향 언어로서 클래스 기반 객체지향 언어와는 다르게 다양하게 객체를 생성할 수 있다.

  • 객체 리터럴
  • Object 생성자 함수
  • 생성자 함수
  • Object.create 메서드
  • 클래스

흔한 방법은 객체 리터럴을 사용하는 것이다. 객체 리터럴은 중괄호 안에 0개 이상의 프로퍼티를 정의한다.

let profile = {
  name : 'gunyong',
  age : 25,
  sayHello() {
    console.log(`Hello im ${this.name}`);
  }
}

프로퍼티에 접근하는 방법으론 2가지가 있다. 위 객체를 활용해보면 아래와 같이 나타난다.

console.log(profile.name);
console.log(profile['name']);

이미 존재하는 프로퍼티에 값을 재할당하면 값이 갱신된다.

let profile = {
  name : 'gunyong',
  age : 25,
  sayHello() {
    console.log(`Hello im ${this.name}`);
  }
}
profile.name = 'gunyong11';
console.log(profile.name); // gunyong11

값에 의한 전달

예를 들어보겠다.

let score = 80;
let copy = score;

console.log(score); // 80
console.log(copy); // 80

score = 100;

console.log(score) // 100;
console.log(copy)l // 80;

이때 처음에는 score과 copy가 모두 80의 값을 가진다는 점에선 동일하다. 하지만 score과 copy의 80 값은 서로 다른 메모리 공간에 저장된 별개의 값이다.

따라서 score을 100으로 재할당 시켜줬을때 score의 값은 100으로 변경되고 copy는 전에 score이 80인 상태에서 복사한 상태인 80의 값을 가진다.

결국 두 변수의 원시 값은 서로 다른 메모리 공간에 저장된 별개의 값이기 때문에 한쪽을 재할당을 통해 값이 변경되도 서로 간섭할 수 없다는 점이다.

0개의 댓글