Thumbnail
개발 · 프로그래밍 프로그래밍 언어

생활코딩 - JavaScript Immutability 대시보드

(4.9)
89개의 수강평 ∙  2,587명의 수강생

무료

지식공유자: Egoing Lee
총 12개 수업 (1시간)
수강기한: 
무제한
수료증: 미발급
난이도: 
입문
-
초급
-
중급이상
지식공유자 답변: 미제공
폴더에 추가 공유

초급자를 위해 준비한
[웹 개발, 프로그래밍 언어] 강의입니다.

생활코딩에서 제공하는 자바스크립트 관련 강의로, 자바스크립트에서 데이터를 불변하게 다루는 방법에 대한 수업입니다.

✍️
이런 걸
배워요!
자바스크립트에서 데이터를 불변하게 다루는 방법
원시 데이터 타입과 객체의 동작방법 간의 차이
객체를 복제하는 방법
원본 객체를 수정하지 않고 복제본을 수정하는 방법

1. 강의 소개

생활코딩의 JavaScript Immutability 수업은 자바스크립트에서 데이터를 불변하게 다루는 방법에 대한 강의입니다. JavaScript 기본 문법을 알고 있는 학습자를 대상으로 데이터를 불변하게 하여 원본이 훼손되는 것을 막는 방법을 살펴봅니다.

이 강의는 아래와 같은 내용을 다루고 있습니다. 

  • 원시 데이터 타입과 객체의 동작방법 간의 차이
  • 객체를 복제하는 방법
  • 원본 객체를 수정하지 않고 복제본을 수정하는 방법

아래 내용은 다루고 있지 않습니다. 

  • 불변 라이브러리

2. 강의 대상

데이터를 불변하게 다루면 데이터들간의 간섭으로 인한 버그의 가능성을 획기적으로 낮출 수 있습니다. 또 데이터가 변경 되었는지 여부를 매우 쉽게 체크할 수 있습니다. 그 외에 Hot module reloading, time travel과 같은 고급 기법을 구현하는데 기초가 되기도 합니다. 

아래 코드의 결과를 모두 예상할 수 있다면 이 수업은 듣지 않아도 됩니다.

var n1 = 1;
var n2 = 1;
console.log(n1 === n2);
=> true입니다. 당연합니다.

var o1 = {name:'kim'}
var o2 = {name:'kim'}
console.log(o1 === o2);
=> false 입니다. 조금 애매하죠. JavaScript는 값이 바뀌지 않는 원시 데이터 타입과 값이 바뀔 수 있는 객체를 다르게 취급합니다.

var o1 = {name:'kim'}
var o2 = o1;
o2.name = 'lee';
console.log(o1.name);
=> lee 입니다. o1은 영문도 모르고 자신이 가르키고 있는 name의 값이 바뀌어 버렸습니다.

var o1 = {name:'kim'}
var o2 = Object.assign({}, o1); // 빈 객체에 o1을 복사합니다.
o2.name = 'lee';
console.log(o1.name);
=> kim입니다. o2를 변경해도 o1이 영향을 받지 않습니다. o2에 대해서 o1은 불변한 상태를 유지할 수 있게 됩니다.

var o1 = {score:[1,2]}
var o2 = Object.assign({}, o1);
o2.score.push(3);
console.log(o1.score)
=> [1,2,3] 입니다. 영문도 모르고 o1이 또 바뀌었습니다. score는 객체의 일종인 배열이기 때문입니다.

var o1 = {score:[1,2]}
var o2 = Object.assign({}, o1);
o2.score = o2.score.concat(); // 배열을 복사합니다.
o2.score.push(3);
console.log(o1.score)
=> [1,2] 입니다.

다른 방법도 있습니다. 몽땅 다 복사를 하는 것입니다.
var o1 = {score:[1,2]}
var o2 = JSON.parse(JSON.stringify(o1));
o2.score.push(3);
console.log(o1.score)
=> [1,2] 입니다.

원본이 바뀌지 않게 조심하는 것도 좋지만, 원본이 아예 안 바뀌게 하는 것도 가능합니다.
var o1 = {name:'kim'}
Object.freeze(o1);
o1.name = 'lee';
console.log(o1.name);
=> 'kim' 입니다.

하지만 객체는 이게 안됩니다.
var o1 = {score:[1,2]}
Object.freeze(o1);
o1.score.push(3);
console.log(o1.score);
// [1,2,3] 입니다.

방어적으로 냉동을 해야 합니다.
var o1 = {score:[1,2]}
Object.freeze(o1);
Object.freeze(o1.score);
o1.score.push(3);
console.log(o1.score);
// 변경이 안됩니다. 심지어 항의성 에러를 발생시켜버립니다.

3. 강의 참여 조건

이 강의를 듣기 위해서는 아래와 같은 선행 지식이 필요합니다.
(둘 중에 하나를 공부하시면 됩니다.)

4. 전체 재생시간

총 12개의 영상으로 이루어진 1시간 분량의 수업입니다. 

5. 수업 저작권

이 강의는 CC 라이센스를 따르고 있으며, 아래 링크에서도 볼 수 있습니다.
https://opentutorials.org/module/4075 좋은 지식을 공유해주시는 생활코딩에 감사의 말씀을 전합니다.

이런 분들께 추천드려요!

🎓
학습 대상은
누구일까요?
데이터를 불변하게 다뤄 버그의 가능성을 낮추고 싶은 분
고급 JS 기법을 구현하는 기초를 쌓고 싶은 분
📚
선수 지식,
필요할까요?
JavaScript
NodeJS(선택)

안녕하세요
Egoing Lee 입니다.
Egoing Lee의 썸네일
커리큘럼 총 12 개 ˙ 1시간의 수업
이 강의는 영상이 제공됩니다. 미리보기를 통해 콘텐츠를 확인해보세요.
섹션 0. JavaScript Immutability
수업 소개 미리보기 05:11
이름에 대한 불변함: const vs. var 07:03
변수 할당 방식 비교 02:26
초기 값의 비교 05:46
객체의 가변성 04:07
객체의 복사 04:14
중첩된 개체의 복사 07:04
불변의 함수 만들기 04:38
가변과 불변 API 비교 04:56
Object freeze로 객체를 불면하게 만들기 04:09
const vs. object freeze 03:19
수업을 마치며 07:17
강의 게시일 : 2020년 02월 16일 (마지막 업데이트일 : 2020년 02월 18일)
수강평 총 89개
수강생분들이 직접 작성하신 수강평입니다.
4.9
89개의 수강평
5점
4점
3점
2점
1점
VIEW 추천 순 최신 순 높은 평점 순 낮은 평점 순 평점 순 높은 평점 순 낮은 평점 순
peace097 thumbnail
5
좋은 강의를 기부해주셔서 감사합니다~ 복받으세요!^^2
2023-09-27
똘똘이스머프 thumbnail
5
강의 감사합니다. 반복해서 들으면서 기능을 지속적으로 익혀야 할 것 같습니다.
2023-01-27
장병훈 thumbnail
5
이고잉 당신은...
2020-06-21
Eun thumbnail
5
초급자가 접근하기 쉬운 고퀄리티 강의
2022-11-28
해뱅 thumbnail
5
좋은강의입니다!
2023-01-04