일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- K디지털기초역량훈련
- 이메일 코딩
- ENFJ
- object-oriented programming
- 내일배움카드
- redux
- 리액트
- 국비지원
- REACT강의
- nomadcoders
- JavaScript
- 무료리액트강의
- free react course
- bucket list
- 반응형 이메일
- react
- CSS
- 반응형
- 패스트캠퍼스
- 노마드코더
- 객체지향
- ENFJ포스팅
- HTML
- 자바스크립트
- React & Redux로 시작하는 웹 프로그래밍
- 코딩
- class
- 바이트디그리
- 버킷리스트
- Today
- Total
미미 공부/취미방
[패스트캠퍼스:5주차] React & Redux로 시작하는 웹 프로그래밍 : react 강의 4/5 본문
JS 데이터
객체 데이터
정적 메서드
(static method)
Object.메서드() 형식으로
객체 데이터 자체에 사용할 수 없다.
Object 전역 객체에 직접 사용한다.
.Object.assign()
대상 객체에, 한 개 이상의 다른 객체를 붙여 넣고 덮어 씌운다.
첫 번째 인수가 대상 객체
대상 객체는 원본이 수정된다.
참조형 데이터 / 원시형 데이터
참조형 데이터 : 메모리에 있는 특정 주소를 참고만 한다. 객체, 배열, 함수
원시형 데이터 : 불리언, 글자, 숫자 데이터
a와 b는 데이터 값이 동일하지만,
참조형 데이터로 서로 다른 주소를 참조하고 있어서
데이터가 같지 않다.
target과 userAge는 동일한 메모리 주소를 참조한다.
빈 객체를 대상 위치에 넣어서 새로운 객체를 생성했는데,
그 값이 같아 보이지만
다른 메모리 주소를 참조한다.
Object.keys()
객체의 key 값을 배열로 반환한다.
반환된 배열(keys)을 map의 콜백으로
객체 인덱싱(user[키])을 실행시켜서
각 키의 값을 새로운 배열로 반환한다.
구조 분해 할당 (Destructuring assignment) or 비구조화 할당
객체/배열 데이터의 구조를 분해해서 각각 변수로 만들어서 활용할 수 있다.
점표기법, 객체 인덱싱과 동일하다.
(예. user.name, user[name])
객체
const { 키, 키 } = 객체
작성 순서가 일반 객체를 뒤집은 모양이다.
객체의 키/프로퍼티로 값을 추출하고
변수명을 ':(콜론)'을 통해서 바꿀 수 있다.
(예. name: heropy)
기본값을 설정하면 해당 프로퍼티의 값이 없을 때 기본값이 반환된다.
(예. address = 'Korea')
배열
순서로 값을 추출하는 배열.
중간에 추출하고 싶지 않은 아이템은 빈칸으로 두고 ', (쉼표)'로 구분 짓는다.
(예. [a, , c])
전개 연산자 (Spread)
배열의 모든 아이템을 각각 문자 데이터로 반환한다.
toObject 함수에는 전개된 fruits 아이템이 각각 매개변수 a, b, c에 들어간다.
매개변수도 전개 연산자가 가능하다.
배열의 개수와 매개변수 개수가 일치하지 않은 경우
마지막 매개변수에 '...'을 붙여서 전개 연산자로 만들면
남아있는 모든 배열 아이템이 그 매개변수(나머지 매개변수. rest parameter)에
배열의 형태로 들어간다.
key, value 축약형
객체의 key와 value가 동일할 때, 축약형으로 만들어줄 수 있다.
데이터 불변성(Immutability)
원시형 데이터 : 원시적인/기본적인 데이터. String, Number, Boolean, undefined, null
참조형 데이터 : Object, Array, Function
원시형 데이터
사실 데이터가 같은지 비교하는 기준은 어떤 메모리 주소를 바라보는지이다.
데이터의 값은 항상 메모리 주소에 저장이 되는데,
원시형 데이터의 값은 메모리에 이미 존재하는 같은 값이 있으면
같은 메모리 주소를 바라본다.
따라서, 보이는 값이 같으면 같은 메모리 주소를 갖고 있는 똑같은 값이라고 생각하면 된다.
참조형 데이터
참조형 데이터는 변수에 값을 선언할 때마다 새로운 메모리 주소에 할당한다.
그래서 보기에는 똑같은 값이 다르다는 결괏값 false가 나온다.
산술 연산자 = 로 값을 할당하는 것은,
메모리 주소를 할당한다는 뜻이다. (예. b = a)
주소가 이전되었으니
같은 메모리를 바라보는 데이터 중 하나를 수정하면,
모든 변수의 값이 수정된다.
(예. a를 수정하면 b도 같이 수정된다)
-결국 같은 데이터를 수정하게 된다.-
**이것은 주의할 점**
얕은 복사(Shallow copy), 깊은 복사(Deep copy)
같이 변하는 걸 의도하지 않는 경우
데이터를 복사해서 새로운 변수에 할당해서 사용해야 한다.
얕은 복사(Shallow copy)
복사하는 방법 1
const copyUser = Object.assign({}, user);
Object.assign()을 통해서 복사가 가능하다.
복사를 하면 다른 메모리 주소를 바라본다.
이러면 user의 age는 22, copyUser의 age는 그대로 85가 된다.
복사하는 방법 2
const copyUser = {...user}
스프레드 연산자를 통해서 복사하기
깊은 복사(Deep copy)
(내가 이해하기로)
얕은 복사는, 객체 내부에 있는 다른 참조형 데이터는 복사하지 않는다.
그래서 또다시 문제가 생기는데,
그런데 user.emails 배열에 push로 새로운 이메일을 추가해 줬더니
둘 다 똑같다고 나온다.
그래서 깊은 복사로 이런 걸 싹 다 복사해야 한다.
(깊은 복사는 복잡해서 lodash 라이브러리를 사용한다.)
lodash를 npm으로 설치하고 불러와서
_.cloneDeep(복사할객체)
lodash가 제공하는 cloneDeep이라는 메서드로 아주 간편하게 복사한다.
그러면 이렇게 배열 데이터도 복사가 돼서,
같이 변화하지 않는 게 보인다!
🎉
참조 데이터 안에 또 다른 참조 데이터가 있다면 깊은 복사를,
그렇지 않으면 얕은 복사를 하면 된다.
'Programming' 카테고리의 다른 글
[패스트캠퍼스:6주차] React & Redux로 시작하는 웹 프로그래밍 : react 강의 1/4 (0) | 2022.07.26 |
---|---|
[패스트캠퍼스:5주차] React & Redux로 시작하는 웹 프로그래밍 : react 강의 5/5 (0) | 2022.07.26 |
[패스트캠퍼스:5주차] React & Redux로 시작하는 웹 프로그래밍 : react 강의 3/5 (0) | 2022.07.26 |
[패스트캠퍼스:5주차] React & Redux로 시작하는 웹 프로그래밍 : react 강의 2/5 (0) | 2022.07.25 |
[패스트캠퍼스:5주차] React & Redux로 시작하는 웹 프로그래밍 : react 강의 1/5 (0) | 2022.07.19 |