객체

학습 키워드

  • 객체

  • 생성자 함수

    • 프로토타입

    • Wrapper Object

  • Class

객체

  • 데이터를 하나로 관리해주는 데이터 형태

  • 배열과의 차이점이 있다면 객체는 key-value 존재한다.

객체 프로퍼티 (객체 속성)

  • key : value

  • value : 문자열, 숫자, boolean, 함수, 객체, 배열 타입 사용 가능

let objValue = {
  str: 'string', // 👈🏻 객체 프로퍼티 key : value
  num: 27,
  bol: true,
  obj: {},
  arr: [],
  func: function () {},
};

객체 프로퍼티를 다루는 방법

1. 특정 프로퍼티에 접근하는 방법

  • 점 표기법

  • 괄호 표기법 ['문자열']

    • '' 없으면 변수로 인식해서 Error

    • 동적으로 생성시 유용

2. 새로운 프로퍼티 추가하는 방법

3.프로퍼티를 삭제하는 방법 delete

객체 반복문

  • 객체 데이터를 하나씩 접근하기 위한 반복문 for-in

상수 객체

  • 상수로 키워드로 생성한 객체의 프로퍼티는 수정이 가능하다.

    • 실제로 객체의 값을 저장하는게 아니라 (메모리)주소를 저장하기 때문에

메서드

  • 객체의 value 값으로 사용되는 함수 → 다른 용어로 메서드(method)

생성자 함수

  • 객체를 생성하는 함수

  • 유사한 객체를 여러개 만들어야 할 때 경우 사용

    • 함수의 이름은 첫글자는 대문자로 시작

    • new 연사나를 붙여 함께 호출 인스턴스 객체 생성

    • 함수의 매개변수를 활용 할 수 있다는 특징

프로토타입(prototype)

  • 생성자 함수를 만들게 되면 1:1로 매칭되는 함수 멤버로 prototype 속성이 있다.

  • prototype 객체의 멤버인 constructor 속성은 함수를 참조하는 내부구조를 가진다.

Wrapper Object

  • 래퍼 객체란 이름처럼 원시 타입의 값을 감싸는 형태의 객체이다. number, string, boolean, symbol 데이터 타입에 각각 대응하는 Number, String, Boolean, Symbol이 제공된다.

🤔 해당 코드가 실행되는 원리는?

해당 코드를 실행하면 결과값은 5가 나온다. 여기서 이상한 점이 발견된다. str은 문자열인 원시타입이다. 객체의 프로퍼티를 접근가능하는 .length를 어떻게 사용할 수 있는 것일까?

자바스크립트의 문자열은 원시타입으로 존재한다. 우리가 문자열의 프로퍼티에 접근하려고 할 때, 자바스크립트는 new String을 호출한 것처럼 문자열 값을 객체로 변환한다. 이 객체를 래퍼객체 라고 한다. 래퍼 객체는 프로퍼티를 참조할 때 생성되며 프로퍼티 참조가 끝나면 사라진다.

Class

📖 Class 객체 지향 프로그래밍에서 특정 객체를 생성하기 위해 변수와 메소드를 정의하는 일종의 틀로, 객체를 정의 하기 위한 상태(멤버변수)와 메서드(함수)로 구성된다.

자바스크립트는 class 에 대한 개념이 있지 않았다. 따라서 생성자 함수를 사용해서 정의하곤 했다. ES6에서 class문법이 도입되면서 객체 지향 프로그맹에서 사용되는 다양한 기능을 자바스크립트에서도 사용할 수 있다.

기본문법

  • class 키워드를 사용

  • constructor() : 기본 상태를 설정해주는 생성자 메서드 new에 의해 자동으로 호출 된다.

상속

  • extends 키워드를 사용해서 상속 받을 수 있다.

  • 상속을 받는다면 constructor() 내부에 super() 함수가 존재해야 한다.

📖 메서드 오버라이딩 상속한 상위 클래스의 메서드를 수정하고 싶거나 더 확장하기 위해 상속 받은 class 내에서 메서드를 재정의하는 행위

get & set

  • set : 값을 설정하는 키워드

  • get : 값을 가져오는 키워드

private

  • 2020년 최신 문법

  • 순수 웹브라우저에서는 #private 속성은 get&set를 제어 할 수 없다. (컴파일러 사용 해야한다.)

  • 외부에서 값의 변경을 막고자 할 때 private 속성을 사용한다.

static

  • static으로 정의된 것들은 인스턴스화 되지 않는다.

🔗 참고

Last updated