JavaScript
- […] {…} 문법 / 비구조화 할당 (destructuring assignment)
배열이나 객체의 속성을 해체하여 그 값을 개별 변수에 담을 수 있게 하는 JS expression.
전개 연산자를 사용하여 배열, 객체의 깊은 복사를 할 수 있음. - 원시(Primitive) 타입, 참조(Reference) 타입
- primitive type
JS의 primitive type은 6종류이며, 이외의 모든 값은 ref타입.
Number, BigInt, Boolean, null, undefined, String, Symbol
primitive type 데이터는 변수에 할당될 때, stack 영역에 저장.
변수 선언, 초기화, 할당 시 값이 저장된 메모리 영역에 직접 접근.
값 자체를 복사하기 때문에, 원본 데이터의 값이 바뀌더라도 기존 데이터의 값을 유지. - reference type
reference type에는 객체(Object), 배열(Array), 함수(function) 가 있음.
크기가 정해져 있지 않고, 변수에 할당될 때 변수의 값이 저장된 Heap의 주소 값을 저장.
변수가 가지고 있는 메모리 주소를 이용해서 변수 값에 접근.
주소 값을 참조하기 때문에, 원본 데이터의 값이 바뀌면 복사한 데이터의 값도 변경됨.
- primitive type
- == vs ===
- == (Equal Operator)
두 값을 비교해서 같으면 true, 다르면 false 값을 리턴하나,
두 피연산자 값이 서로 타입이 다를 경우 자동으로 일부 피연산자의 타입을 변환한 후 값을 비교. - === (Strict Equal Operator)
두 피연산자 값의 타입이 서로 다르더라도 변환하지 않고 있는 그대로의 값을 엄격하게 비교.
NaN은 자기 자신을 포함하여 어떠한 값과도 일치하지 않음.
- == (Equal Operator)
- super
상위 객체의 함수를 호출할 때 사용.
constructor 에서 super 하나만 사용되거나, this 가 사용되기 전에 호출되어야 함.
CS
- 깊은(deep) 복사, 얕은(shallow) 복사
reference type 의 복사 방법은 shallow copy, deep copy로 나뉨.- Shallow copy
복사된 값이 같은 참조(=메모리 주소) 를 가리키는 것.
객체 안에 객체가 있을 경우, 한 개의 객체라도 원본 객체를 참조한다면 shallow라고 볼 수 있음.
copy 후 해당 변수를 수정하면, 원본 값도 변하게 됨. - Deep copy
복사된 객체가 다른 주소를 참조하며 내부의 값만 복사됨.
- Shallow copy
보안
- 클라이언트 코드 변조
변조 되어서는 안되는 중요한 데이터 파일이라면 암호화.
변조함으로서 어떤 이익을 얻을 수 있는 파일은, 클라이언트에 저장하지 말것.
검증을 위해서는 해쉬 함수 사용.
암호화 해야 한다면, 압축한 후 암호화 하기.
암호화 할 데이터의 처음에 랜덤 값을 추가 하기. - 패킷 변조
어쩔 수 없이 로컬에 저장해야 하는 경우엔, 암호화 하여 저장하고, 로드하기 전에 검증해야 함.
파일을 복호화 하기 위한 키는 서버에 저장하고, 서버에서 전달받아 파일을 복호화 한 뒤 바로 키를 삭제.
중요한 파일을 로드해서 사용하기 전에는 반드시 검증.