๐ค JavaScript ๊ฐ์ฒด์ ๋ถ๋ณ์ฑ์ด๋ ?
๊ธฐ๋ณธํ ๋ฐ์ดํฐ์ ์ฐธ์กฐํ ๋ฐ์ดํฐ
๊ธฐ๋ณธํ(์์ํ) ๋ฐ์ดํฐ(Primative Type)
๊ฐ์ฒด๊ฐ ์๋ ๋ฐ์ดํฐ ์ ํ 6๊ฐ์ง
- Number
- String
- Boolean
- null
- undefined
- Symbol(ES6์ ์ถ๊ฐ, ๊ฐ์ฒด ์์์ ๋ง๋๋ ๋ฐ์ดํฐ ํ์ )
๊ธฐ๋ณธํ ๋ฐ์ดํฐ๋ ๊ฐ์ ๊ทธ๋๋ก ํ ๋นํจ
๋ฉ๋ชจ๋ฆฌ์์ ๊ณ ์ ๋ ํฌ๊ธฐ๋ก ์ ์ฅ๋๋ฉฐ, ์์๋ฐ์ดํฐ ๊ฐ ์์ฒด๋ฅผ ๋ณด๊ดํ๋ฏ๋ก, ๋ถ๋ณ์ ์
๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ์ ๋ฐ์ดํฐ๋ ํ๋์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํจ(์ฌ์ฌ์ฉ)
var a;
a = 10;
var b = 'abc';
b = false;
var c = b;
// b === c
c = 20;
// b !== c
์ฐธ์กฐํ ๋ฐ์ดํฐ(Reference Type)
๋ณ์์ ํ ๋นํ ๋ ๊ฐ์ด ์๋ ๋ฐ์ดํฐ์ ์ฃผ์๋ฅผ ์ ์ฅํจ
์ฐธ์กฐํ์ ๊ธฐ๋ณธํ ๋ฐ์ดํฐ์ ์งํฉ
์ฐธ์กฐํ ๋ฐ์ดํฐ๋ ๊ฐ์ด ์ง์ ๋ ์ฃผ์๊ฐ์ ํ ๋นํจ
์ฐธ์กฐํ ๋ฐ์ดํฐ์ ๋ํ : object
ํ์
- Array
const๋ก ์ ์ธ๋ ๋ณ์ ๋ฐฐ์ด์ array.push()๋ฅผ ํ ์ ์๋ ์ด์ ๋ ๋ฐฐ์ด์ ์ฐธ์กฐ ํ์ ์ด๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ์ ์ฃผ์๋ฅผ ๋์ ํ ์ ์๊ธฐ ๋๋ฌธ
- function
- RegExp(์ ๊ท์)
๋ฌธ์์ด์ ๋ํ๋๋ ํน์ ๋ฌธ์์กฐํฉ๊ณผ ๋์์ํค๊ธฐ ์ํด ์ฌ์ฉ๋๋ ํจํด
- map
var obj = {
a : 1,
b : 'b'
};
var obj2 = obj;
obj2.a = 10;
console.log(obj2.a); // 10
console.log(obj.a); // 10
obj2 ๊ฐ์ฒด๊ฐ obj ๊ฐ์ฒด์ ๋ค๋ฅธ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ง๋ ๊ฒ์ด ์๋๋ผ ๋ณธ๋ obj์ด ๋ฐ๋ผ๋ณด๋ ๊ฐ์ฒด๋ฅผ ํจ๊ป ๋ฐ๋ผ ๋ด
obj === obj2 ๋ ์๋ฒฝํ ๋์ผํ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐ ํจ
๊ฐ์ฒด์ ์ ์ธ
๊ฐ์ด ์ ์ฅ๋ ์ฃผ์๊ฐ์ ํ ๋น
๋น์ด์๋ ๋ฐ์ดํฐ ๊ณต๊ฐ์ ํ๋ณดํ๊ณ , ๊ฐ์ฒด ์ ํ๋กํผํฐ์ ๋ํ ๊ณต๊ฐ์ ๋ค์ ํ๋ณด
๊ฐ์ฒด์ ํ๋กํผํฐ ๋ช ๊ณผ ์ฃผ์๋ฅผ ๋งค์นญํ๊ณ ํ๋ณดํ๋ ๋ ๋ฒ์งธ ์ฃผ์์ ๋ฐ์ดํฐ๋ฅผ ํ ๋น
๊ธฐ๋ณธํ๊ณผ ์ฐธ์กฐํ์ ์ฐจ์ด
๊ธฐ๋ณธํ : ๋ฐ๋ก ๊ฐ์ ๊ทธ๋๋ก ํ ๋นํจ
์ฐธ์กฐํ: ๊ฐ์ด ์ ์ฅ๋ ์ฃผ์ ๊ฐ์ ํ ๋น(์ฐธ์กฐ)ํจ
๋ณ์๋ฅผ ์ ์ธํ๋ฉด ๋ฐ์ดํฐ๊ฐ ๋ด๊ธธ ๊ณต๊ฐ์ ํ๋ณดํ๊ณ , ํ๋ณด๋ ๋ฐ์ดํฐ์ ์ฃผ์๊ฐ์ ๊ฐ์ง๊ณ ๋ณ์๋ฉด๊ณผ ๋งค์นญ์ํค๋ ์ ์ธ๊ณผ์ ๊น์ง ๋์ผํ๋, ํ ๋น ๊ณผ์ ์ ์ฐจ์ด๊ฐ ์์
https://webclub.tistory.com/638
๋ถ๋ณ ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ
๋ถ๋ณ๊ฐ์ฒด๋
๋ณํ์ง ์๋ ๊ฐ์ฒด, ์ด๋ฏธ ํ ๋น๋ ๊ฐ์ฒด๊ฐ ๋ณํ์ง ์๋๋ค๋ ๋ป
์ด๊ฒ ๋ถ๋ณ์ธ๊ฐ?
const
๋ณ์๋ฅผ ์์๋ก ์ ์ธ ํจ(์ผ๋ฐ์ ์ผ๋ก ์์๋ก ์ ์ธ๋ ๋ณ์๋ ๊ฐ์ ๋ฐ๊พธ์ง ๋ชปํจ)
๊ฐ์ฒด ์ฌํ ๋น์ ๋ถ๊ฐ๋ฅํ์ง๋ง ๊ฐ์ฒด์ ์์ฑ์ ๋ณ๊ฒฝ ๊ฐ๋ฅ
const test = {};
test.name = "mingyo";
console.log(test); // {"mingyo"}
์ฌํ ๋น์ด ๋ถ๊ฐ๋ฅ ํ ์ด์ ๋ ๋ณ์์ ๊ฐ(๊ฐ์ฒด) ์ฌ์ด์ ๋ฐ์ธ๋ฉ ์์ฒด๊ฐ ๋ณ๊ฒฝ์ด ๋๊ธฐ ๋๋ฌธ์ ์์์ธ test๋ณ์๋ ์ฌํ ๋น์ด ๋ถ๊ฐ๋ฅ ํ์ง๋ง,
๊ฐ์ฒด์ ์์ฑ์ด ๋ณ๊ฒฝ๊ฐ๋ฅ ํ ์ด์ ๋ ์ค์ ๊ฐ์ฒด๊ฐ ๋ณ๊ฒฝ์ ๋์ง๋ง ( {} -> name : "mingyo" ) ๊ฐ์ฒด์ ๋ณ์(test)์ฌ์ด์ ๋ฐ์ธ๋ฉ์ ๋ณ๊ฒฝ์ด ๋์ง ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด์ ์์ฑ์ ๋ณ๊ฒฝ๊ฐ๋ฅํจ
Object.freeze()
๊ฐ์ฒด๋ฅผ ๋๊ฒฐํ๊ธฐ ์ํ ๋ฉ์๋
๊ฐ์ฒด๋ ๊ฐ์ฒด์ ์์ฑ์ ๋ณ๊ฒฝํ๋ ์๋๋ ๋ถ๊ฐ๋ฅ ๊ทธ๋ฌ๋ ๋๊ฒฐ๋ ๊ฐ์ฒด๋ฅผ ๋ฐํํ์ง๋ง ๊ฐ์ฒด์ ์ฌํ ๋น์ ๊ฐ๋ฅ
let test = {
name : 'kim'
}
Object.freeze(test);
test.name = 'Jung';
console.log(test) // {name: 'kim'}
test = {
age : 15
};
console.log(test); // {age: 15}
๊ทธ๋ผ ๋ถ๋ณ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๋ฒ์?
const์ Object.freeze()๋ฅผ ์กฐํฉ ํ์ฌ ๋ง๋ฌ
const์ ์ฌํ ๋น๋ถ๊ฐ + Object.freeze()์ ๊ฐ์ฒด์์ฑ ๋ณ๊ฒฝ๋ถ๊ฐ
const test = {
'name' : 'jung'
};
Object.freeze(test);
https://spiderwebcoding.tistory.com/8
์์ ๋ณต์ฌ์ ๊น์ ๋ณต์ฌ
๊ธฐ๋ณธํ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ฉด ๋ฐ์ดํฐ๋ ๋ณํ์ง ์์,
์ฐธ์กฐํ ๋ฐ์ดํฐ๋ ๋ฐ์ดํฐ ์์ฒด๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ ํ๋ฉด ์ฆ, ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ํ ๋นํ๋ค๋ฉด ๊ธฐ๋ณธํ ๋ฐ์ดํฐ์ ๊ฐ์ด ๊ธฐ์กด ๋ฐ์ดํฐ๋ ๋ณ๊ฒฝ๋์ง ์์
BUT
์ฐธ์กฐํ ๋ฐ์ดํฐ์ธ ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํด์ ๊ทธ ๊ฐ์ฒด์์ ๋ด๋ถ ํ๋กํผํฐ๋ฅผ ๋ณ๊ฒฝ ํ๋ค๋ฉด?
์ฐธ์กฐํ ๋ฐ์ดํฐ์ธ ๋ด๋ถ ํ๋กํผํฐ๋ฅผ ์์ ํ์ ๋๋ ๊ฐ๋ณ์ฑ์ด๋ผ๋ ์ฑ์ง๋ก ์ธํ์ฌ ๊ธฐ์กด์ ๊ฐ์ฒด๋ ๋ณํ๊ฒ ๋จ
ํด๊ฒฐ๋ฐฉ๋ฒ
๊ธฐ์กด ๊ฐ์ฒด์ ์ ๋ณด๋ฅผ ๋ณต์ฌํด์ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ฐํ ํ๊ธฐ
var student = {
name : "coder_h",
ban : 3,
gender : 'male'
}
var copyObject = function(target){ // (1)
var result = {};
for(var prop in target){
result[prop] = target[prop];
}
return result;
}
var student2 = copyObject(student);
student2.name = "kim";
console.log(student === student2); // false
console.log(student.name, student2.name); // coder_h kim
for in ๋ฌธ๋ฒ์ ์ด์ฉํด์ target ํ๋ผ๋ฏธํฐ์ ๋ด๊ธฐ๋ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ฅผ ๋ณต์ฌํด์ ์๋ก์ด result๋ผ๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ๋ฐํ
์ด๊ฑฐ๋ ๋ฌธ์ ๊ฐ ์์ง๋ง,
๊ฐ์ฒด์์ ํ๋กํผํฐ๋ก ๋ ๊ฐ์ฒด๊ฐ ์๋ ์ค์ฒฉ๊ฐ์ฒด์ ๊ฒฝ์ฐ
var student = {
name : "coder_h",
ban : 3,
gender : 'male',
friend : { // ์๋ก ์ถ๊ฐํ ํ๋กํผํฐ (1)
name : "hello"
}
}
var copyObject = function(target){
var result = {};
for(var prop in target){
result[prop] = target[prop];
}
return result;
}
var student2 = copyObject(student);
student2.name = "kim";
student2.friend.name = "Bye"; // student2์ ์น๊ตฌ์ด๋ฆ์ ๋ณ๊ฒฝ (2)
console.log(student === student2); // false
console.log(student.name, student2.name);// coder_h kim
console.log(student.friend.name, student2.friend.name); // Bye Bye (3)
๊ธฐ์กด ๊ฐ์ฒด์ ๋ด๋ถํ๋กํผํฐ๋๊น์ง ๋ณ๊ฒฝ๋จ
์ค์ฒฉ๋ ๊ฐ์ฒด์์ ์ฐธ์กฐํ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ ํ๋กํผํฐ๋ฅผ ๋ณต์ฌํ ๋ ๊ทธ ์ฃผ์๊ฐ๋ง ๋ณต์ฌํจ
์ฆ, ๋ณต์ฌํ ๊ฐ์ฒด์์ ํด๋น ํ๋กํผํฐ์ ๋ํด ๊ฐ์ ์ฃผ์๊ฐ์ ๊ฐ์ง๊ณ ์๋ค๋ ์๋ฏธ์ด๊ธฐ ๋๋ฌธ์ ๋ณต์ฌ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ฅผ ๋ณ๊ฒฝํ๋ฉด ์๋ณต๊ฐ์ฒด๊น์ง ์ํฅ์ ๋ผ์น๊ฒ ๋จ
์ด๊ฒ์ด ์์ ๋ณต์ฌ์ ํ๊ณ...
์์ ๋ณต์ฌ : ๋ฐ๋ก ์๋ ๋จ๊ณ์ ๊ฐ๋ง ๋ณต์ฌํจ.
๊น์ ๋ณต์ฌ : ๋ด๋ถ์ ๋ชจ๋ ๊ฐ๋ค์ ํ๋ํ๋ ์ฐพ์์ ์ ๋ถ ๋ณต์ฌํจ
var student = {
name : "coder_h",
ban : 3,
gender : 'male',
friend : {
name : "hello"
}
}
// ๊น์๋ณต์ฌ (1)
var copyObjectDeep = function(target){
var result = {};
if(typeof target === 'object' && target !== null){
for(var prop in target){
result[prop] = copyObjectDeep(target[prop]);
}
} else {
result = target;
}
return result;
}
var student2 = copyObjectDeep(student);
student2.name = "kim";
student2.friend.name = "Bye"; // (2)
console.log(student === student2);
console.log(student.name, student2.name);
console.log(student.friend.name, student2.friend.name); // hello Bye (3)
๊ธฐ๋ณธํ ๋ฐ์ดํฐ์ธ ๊ฒฝ์ฐ์๋ ๊ทธ๋๋ก ๋ณต์ฌํ๋ฉด ๋์ง๋ง ์ฐธ์กฐํ ๋ฐ์ดํฐ๋ ๋ค์ ๊ทธ ๋ด๋ถ์ ํ๋กํผํฐ๋ค์ ๋ณต์ฌํด์ผ ํจ
์ฆ, ์ฐธ์กฐํ ๋ฐ์ดํฐ๊ฐ ์์๋ ๋ง๋ค ์ฌ๊ท์ ์ผ๋ก ์ํํด์ผ๋ง ๋น๋ก์ ๊น์ ๋ณต์ฌ๊ฐ ๋๋ ํํ๊ฐ ๋จ
target์ด ๊ฐ์ฒด๋ผ๋ฉด ๋ด๋ถ ํ๋กํผํฐ๋ฅผ ์ํํ๋ฉด์ ํจ์๋ฅผ ์ฌ๊ท์ ์ผ๋ก ํธ์ถํ๊ณ **, ๊ฐ์ฒด๊ฐ ์๋ ๊ฒฝ์ฐ์๋ target์ ๊ทธ๋๋ก result์ ํ ๋น ์์ผ ๋ฐํ
์ค์ฒฉ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํ๋๋ผ๋ ์๋ณธ๊ณผ ๋ณต์ฌํ ๊ฐ์ฒด๋ ์๋ก ์์ ํ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๊ฒ ๋๋ฏ๋ก ์์ ๋ณต์ฌ์ผ๋์ ๊ฐ์ ์ํฉ์ด ๋ฒ์ด์ง์ง ์์
https://velog.io/@hazzang/JS-%EC%8B%9C%EB%A6%AC%EC%A6%88-%EB%B6%88%EB%B3%80-%EA%B0%9D%EC%B2%B4
'ํญํด99' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Javascript ๊ฐ๋ ์ ๋ฆฌ(3) - ํธ์ด์คํ ๊ณผ TDZ (0) | 2022.07.16 |
---|---|
Javascript ๊ฐ๋ ์ ๋ฆฌ(1) ์๋ฃํ๊ณผ ๋์ ์ธ์ด (0) | 2022.07.16 |
[Chapter 1] e๋ฐ 10์กฐ S.A(Starting Assignment) (0) | 2022.07.11 |