STUDY_JAVASCRIPT

객체 리터럴, 원시값과 객체의 비교, 함수

zayn 2024. 10. 21. 18:37

[ 객체 리터럴 ]

 

1-1. 객체란?

자바스크립트는 객체기반의 스크립트 언어이며 자바스크립트를 이루고 있는 거의 “모든 것”이 객체이다. 원시 타입을 제외한 나머지 값들(함수, 배열, 정규표현식 등)은 모두 객체

자바스크립트의 객체는 키과 값으로 구성된 프로퍼티들의 집합이다. 프로퍼티의 값으로 자바스크립트에서 사용할 수 있는 모든 값을 사용할 수 있다. 자바스크립트의 함수는 일급 객체이므로 값으로 취급할 수 있다. 따라서 프로퍼티 값으로 함수를 사용할 수도 있으며 프로퍼티 값이 함수일 경우, 일반 함수와 구분하기 위해 메소드라 부른다.

객체는 데이터를 의미하는 프로퍼티와 데이터를 참조하고 조작할 수 있는 동작을 의미하는 메소드로 구성된 집합이다. 객체는 데이터(프로퍼티)와 그 데이터에 관련되는 동작(메소드)을 모두 포함할 수 있기 때문에 데이터와 동작을 하나의 단위로 구조화할 수 있어 유용

자바스크립트의 객체는 객체지향의 상속을 구현하기 위해 “프로토타입”이라고 불리는 객체의 프로퍼티와 메소드를 상속받을 수 있다. 이 프로토타입은 타 언어와 구별되는 중요한 개념

 

1- 2. 객체 리터럴에 의한 객체 생성

 

C++이나 자바같은 클래스 기반 객체 지향 언어는 클래스를 사전에 정의

필요한 시점에 new연산자와 함께 생성자를 호출하여 인스턴스를 생성하는 방식으로 객체 생성

 

자바 스크립트는 프로토타입 기반 객체지향 언어로서 클래스기반 객체지향 언어와는 달리 다양한 객체 생성방법 지원

  1. 객체 리터럴
  2. Object 생성자 함수
  3. 생성자 함수
  4. Object.create 메서드
  5. 클래스

1- 3. 프로퍼티

 

객체는 프로퍼티의 집합이며, 프로퍼티는 키와 값으로 구성

프로퍼티를 나열할 때는 쉼표(,)로 구분. 일반적으로 마지막 프로퍼티 뒤에는 쉼표를 사용하지 않으나 사용해도 좋다.

 

  • 프로퍼티 키 : 빈 문자열을 포함하는 모든 문자열 또는 심벌 값
  • 프로퍼티 값 : 자바스크립트에서 사용 할 수 있는 모든 값

프로퍼티 키는 프로퍼티 값에 접근 할 수 있는 이름으로서 식별자 역할을 한다. 

심벌값도 프로퍼티 키로 사용할 수 있지만 주로 문자열 사용

식별자 네이밍 규칙을 따르지 않는 이름에는 반드시 따옴표 사용.

 

1- 4 메서드

 

자바 스크립트에서 사용할 수 있는 모든 값은 프로퍼티 값으로 사용할 수 있다고 햇다.

함수는 값으로 취급 할 수 있기 때문에 프로퍼티 값으로 사용가능.

프로퍼티 값이 함수 일 경우 일반 함수와 구분하기 위해 메서드라 부른다

-> 메서드는 객체에 묶여 있는 함수를 의미.

 

1-5. 프로퍼티 접근

  1. 마침표 프로퍼티 접근 연산자를 사용하는 마침표 표기법
  2. 대괄호 프로퍼티 접근 연산자 를 사용하는 대괄호 표기법

- 대괄호 표기법을 사용하는 경우 대괄호 프로퍼티 접근 연산자 내부에 지정하는 프로퍼티 키는 반드시 따옴표로 감싼 문자열.

- 따옴표를 안쓰면 식별자로 이해

- 객체에 존재하지 않는 프로퍼티에 접근하면 undefined를 반환한다.

 

1-6 프로퍼티 값 갱신

 

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

 

1-7 프로퍼티 동적 생성

 

- 존재하지 않는 프로퍼티에 값을 항당하면 프로퍼티가 동적으로 생성되어 추가되고 프로퍼티 값이 할당된다.

 

1-8 프로퍼티 삭제

 

- delete 연산자는 객체의 프로퍼티를 삭제한다. 

- delete 연산자의 피연산자는 프로퍼티 값에 접근할 수 있는 표현식이어야 한다.

- 만약 존재하지 않는 프로퍼티를 삭제하면 아무런 에러없이 무시된다.


2. 원시 값과 객체의 비교

 

자바스크립트가 제공하는 7가지 데이터 타입

  1. 숫자
  2. 문자열
  3. 불리언
  4. null
  5. underfined
  6. 심벌
  7. 객체타입

은 크게 원시타입과 객체 타입으로 구분할 수 있다.

 

  • 원시타입의 값, 즉 원시 값은 변경 불가능한 값 -> 객체 타입의 값, 즉 객체는 변경 가능한 값
  • 원시 값을 변수에 할당하면 변수에는 실제 값이 저장된다. -> 객체를 변수에 할당하면 변수에는 참조 값이 저장
  • 원시 값을 갖는 변수를 다른 변수에 할당하면 원본의 원시 값이 복사되어 전달 -> 값에 의한 전달
  • 객체를 가리키는 변수를 다른 변수에 할당하면 원본의 참조 값이 복사되어 전달 -> 참조에 의한 전달

 

2-1 원시 값

 

- 원시 타입의 값 : 원시값은 변경 불가능한 값이다. 

- 한번 생성된 원시 값은 읽기전용 값으로서 변경할 수 없다.

- 변경 불가능하다는 값은 변수가 아니라 값에 대한 진술이다.

- 원시 값은 변경 불가능한 값이기 때문에 값을 직접 변경할 수 없다. 따라서 변수 값을 변경하기 위해 원시 값을 재할당하면 새로운 메모리 공간을 확보하고 재할당한 값을 저장한 후 변수가 참조하던 메모리 공간의 주소를 변경한다 -> 불변성

- 불변성을 갖는 원시 값을 할당한 변수는 재할당 이외에 변수 값을 변경할 수있는 방법이 없다.

- 변수에 원시 값을 갖는 변수를 할당하면 할당받는 변수에는 할당되는 변수의 원시 값이 복사되어 전달 -> 값에 의한 전달

- 값에 의한 전달 : 변수에는 값이 전달되는 것이 아니라 메모리 주소가 전달되기 때문. 변수와 같은 식별자는 값이 아니라 메모리주소를 기억하고 있기 때문.

- 전달된 메모리 주소를 통해 메모리 공간에 접근하면 값을 참조 할 수있다.

 

2-2 객체 

객체는 프로퍼티의 개수가 정해져 있지않으며 동적으로 추가 되고 삭제 할 수 있다.

객체는 원시 값과 같이 확보해야할 메모리 공간의 크기를 사전에 정해 둘 수 없다.

 

객체 타입의 값 : 객체는 변경가능한 값

 

원시값은 변경불가능한 값이므로 원시값을 갖는 변수의 값을 변경하려면 재할당외에는 방법이 없다. 하지만 객체는 변경 가능한 값이다. 따라서 객체를 할당한 변수는 재할당 없이 객체를 직접 변경할 수 있다. 즉 재할당없이 프로퍼티를 동적으로 추가 할 수도 있고 프로퍼티 값을 갱신할 수도 있으며 프로퍼티 자체를 삭제 할 수 도  있다.

 

객체의 단점 : 원시 값과는 다르게 여러개의 식별자가 하나의 객체를 공유할 수 있다는것.

 

값에 의한 전달과 참조에 의한 전달은 식별자가 기억하는 메모리 공간에 저장되어 있는 값을 복사해서 전달한다는 면에서 동일

 

-> 자바스크립트에는 참조에 의한 전달은 존재하지 않고 값에 의한 전달만이 존재.


 

3-1 함수란? 

 

함수는 자바스크립트에서 가장 중요한 핵심개념이다. 

프로그래밍 언어의 함수는 일련의 과정을 문으로 구현하고 코드 블록으로 감싸서 하나의 실행단위로 정의한것.

 

입력을 전달받는 변수 : 매게 변수

입력 : 인수

출력 : 반환값

 

함수는 값이며 여러 개 존재 할 수 있으므로 특정 함수를 구별하기 위해 식별자인 함수이름을 사용할 수 이싿.

함수는 함수 정의를 통해 생성

 

3-2 함수를 사용하는 이유

 

함수는 필요할 때 여러분 호출가능.

함수는 몇 번이든 호출 할 수 있으므로 코드의 재사용이라는 측명에서 유용하다.

재사용성을 높이는 함수는 유지보수의 편의성을 높이고 실수를 줄여 코드의 신회성을 높이는 효과가 있다.

적절한 함수 이름은 코드를 이해하지 않아도 역할을 이해할 수 있게 돕는다.이는 코드이 가독성을 향상시킨다.

 

3-3 함수 리터럴

 

자바스크립트의 함수는 객체 타입의 값이다.

함수 리터럴은 function 키워드,함수이름,매게변수목록, 함수 몸체로 구성된다.

 

3-4 함수 정의

  1. 함수 선언문
  2. 함수 표현식
  3. function 생성자 함수
  4. 화살표 함수

함수 선언문은 함수 이름을 생략 할 수 없다.

 

함수 선언문은 표현식이 아닌 문이다.

 

자바스크립트의 함수는 값처럼 변수에 할당 할 수도 있고 프로퍼티 값이 될 수도 있으며 배열의 요소가 될 수도 있다. 이처럼 값의 성질을 갖는 객체를 일급객체라 한다. 자바스크립트의 함수는 일급 객체다.

 

3 - 5 함수호출

 

함수는 함수를 가리키는 식별자와 한 쌍의 소괄호인 함수 호출 연산자로 호출한다.