본문 바로가기

카테고리 없음

[강의리뷰] 생활코딩 immutability

반응형

인프런 - 생활코딩 - JavaScript Immutability (inflearn.com)

 

생활코딩 - JavaScript Immutability - 인프런

생활코딩에서 제공하는 자바스크립트 관련 강의로, 자바스크립트에서 데이터를 불변하게 다루는 방법에 대한 수업입니다. 초급 웹 개발 프로그래밍 언어 JavaScript 온라인 강의 자바스크립트 중,

www.inflearn.com

자바스크립트 객체를 불변하게 만드는 방법에 대해 설명하는 강좌이다.

완전 자세하진 않고 immer와 같은 라이브러리 활용법은 설명해주지 않는다.

 

역시 생활코딩 답게 도식화를 통한 명확한 개념 설명은 훌륭하지만, 난 이 강의를 그냥 세 문장으로 요약하겠다.

 

  1. 불변성을 위해선 새로운 객체를 만들어라.
  2. 새로운 객체를 만들면 레퍼런스가 변경되어 상태 변화를 알리기 쉽다. (for 리액트) 
  3. 내부 레퍼런스도 완전히 새로운 값으로 만들어 진다면, 레퍼런스 주소값 비교를 통해 비교 할 수 있으므로 내부값을 다비교하는 로직이 필요없다!
    • 이는 객체지향 원리 : "모든 원시타입을 포장해라, 일급컬렉션을 사용하라"와 관련있다

 

 

 

이 뒤에 나오는 이야기는 객체를 복사해서 새로운 객체를 만들기 위함이다.

 

강의요약

 

1. 수정과 삭제에 의한 사고를 막기 위해 `불변함`의 필요성 증가

 

정보기술 데이터 조작 기본

2. 원자 데이터 타입과 연관 정보 정돈을 위한 타입

자바스크립트 데이터 타입

3. 1을 9로 바꿀 순 없다 (1!==9) 오브젝트 안의 프로퍼티는 원자값을 참조하므로 참조를 변경 가능하다.

4. 데이터가 같은 오브젝트여도 주소 레퍼런스가 다르기 때문에 같지 않다.

5. o3=o1하면 주소 레퍼런스가 같아서 같은 객체가 나온다 o3===o1 (주소값으로 비교한다)

6. 객체의 불변성은 객체를 새로 만들어서 유지한다. 그런데 프로퍼티만 복붙되지 내부 객체 참조는 똑같이 주소로 옮긴다.

레퍼런스는 복붙이 안된다.
concat 같은 함수로 배열을 복사해줘야 함 concat, slice, arrayFrom 등이 있음....

7. 함수 만들 때 함수의 목적을 고려해야함. 원본 수정이냐? 복사냐?

함수를 만들 때 목적을 세워야 한다.

 8. freeze로 객체 수정 막기]

- 프리즈도 마찬가지로 내부는 안얼린다. 내부는 또 따로 얼려줘야함.

 

1번은 4번을 막아주고 2번은 5번을 막아준다.
const는 에러를 뱉는다.
freeze하면 수정 시도해도 값이 그대로다. 런타임 중에 취소할 수 있는 방법은 없다.

 

반응형