살구잼의 여정
article thumbnail

2023.03.07

 

알아야 할 이전 내용

  • 참조형 데이터의 ‘가변’은 참조형 데이터 자체를 변경할 경우가 아니라 그 내부의 프로퍼티를 변경할 때만 성립한다.
  • 데이터 자체를 변경하고자 하면(새로운 데이터를 할당하고자 하면) 기본형 데이터와 마찬가지로 기존 데이터는 변하지 않는다
  • 객체(object) : 이름(name)과 값(value)으로 구성된 프로퍼티(property)의 정렬되지 않은 집합
  • 프로퍼티(property) : 객체 안에 선언된 이름과 값으로 이루어진 한쌍을 의미.
  • 프로퍼티 값으로 함수(function)가 올수도 있음(⇒메소드).
<객체 프로퍼티 문법>

객체이름.프로퍼티이름
또는
객체이름[”프로퍼티이름”]
객체이름.메소드이름()

 

불변객체 (immutable object) <-> 가변객체 (mutable object)

  • 불변객체란? : 객체의 생성 이후 객체의 상태를 바꿀 수 없는 객체.
const student = {  //객체

	id : "st2023123"
	name : "홍길동"
	age : 18
	phonenumber : 010-1234-5678  //객체 상태정보
}; 

//객체는 student
//name은 프로퍼티(이름), "홍길동"은 프로퍼티(값)
//age는 프로퍼티(나이), 18은 프로퍼티(값)

student.name  //홍길동
student["age"]   //18
  • 어떤 상황에서 필요한가?
  • : 값으로 전달받은 객체에 변경을 가하더라도 원본 객체는 변하지 않아야하는 경우.
  • 장점 : 안정적인 개발 가능

 

얕은 복사(shallow copy)와 깊은 복사(deep copy)

원본이 바뀌면 참조 타입은 복사본도 같이 변경되지만, 기본 타입은 변경되지 않는다

 

- 얕은 복사

: 바로 아래 단계의 값만 복사하는 방법.

: 중첩된 객체에서 참조형 데이터가 저장된 프로퍼티를 복사할 때 그 주솟값만 복사한다는 의미.

// 참조 타입의 얕은 복사
let a = {name:'원본 데이터'};
let b = a;

a.name = '수정 데이터';

console.log(a); // '수정 데이터'
console.log(b); // '수정 데이터'
//

 

- 깊은 복사

: 내부의 모든 값들을 하나하나 찾아서 전부 복사하는 방법.

// 기본 타입의 깊은 복사
let a = '원본 데이터';
let b = a;

a = '수정 데이터';

console.log(a); // '수정 데이터'
console.log(b); // '원본 데이터'
//기본타입은 복사 시 값 자체를 담은 독립적인 메모리를 생성하기 때문에 a가 재할당 되더라도 b에는 아무런 영향을 미치지 않는다.

 

 

 

 

'없음'을 나타내는 undefined와 null

null

- 이 값이 없다! 를 선언할때 사용

- 사용자가 명시적으로 ‘없음’을 표현하기 위해 대입한 값.

 

const friend = null;
//참고 : 밸로퍼트의 모던 자바스크립트

 

 

 

 

undefined

- 아직 값이 설정되지 않았을때 사용.

- 비어있음을 의미하지만 하나의 값으로 동작한다. 순회 대상임.

- 값을 대입하지 않은 변수, 즉 데이터 영역의 메모리 주소를 지정하지 않은 식별자에 접근할 때는 자바스크립트가 직접 undefined를 할당함.

없음을 표현할 시, 혼동을 피하기 위해 사용자가 직접 undefined 값을 할당하지 않도록 하고
‘자바스크립트 엔진이 반환해주는 값’의 경우로만 사용할 것.
empty
비어있는요소. 그 어떤 값도, undefined 조차도 할당돼 있지 않음을 의미함.
순회와 관련된 많은 배열 매서드들(foreEach, map, filter, reduce 등)의 순회 대상에서 제외되어 어떠한 처리도 하지 않고 건너뛰게된다.

 

 

 

profile

살구잼의 여정

@드림살구잼

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!