01_230504

Namiยท2023๋…„ 5์›” 4์ผ
0

๐Ÿ“š ์ฝ”์–ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ, ์ •์žฌ๋‚จ
๋ฐ์ดํ„ฐ ํƒ€์ž…

์ฝ”์–ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ

1. ๋ฐ์ดํ„ฐ ํƒ€์ž… Data Type

๋ฐ์ดํ„ฐ ํƒ€์ž…์˜ ์ข…๋ฅ˜

  • ๊ธฐ๋ณธํ˜•(์›์‹œํ˜•) Primitive Type
    ์ˆซ์ž Number, ๋ฌธ์ž์—ด String, ๋ถˆ๋ฆฌ์–ธ boolean, NULL, Undefined
    ES6) ์‹ฌ๋ณผ Symbol
  • ์ฐธ์กฐํ˜• Reference Type
    ๊ฐ์ฒด Object, ๋ฐฐ์—ด Array, ํ•จ์ˆ˜ Function, ๋‚ ์งœ Date, ์ •๊ทœํ‘œํ˜„์‹ RegExp
    ES6) Map, WeakMap, Set, WeakSet ๋“ฑ

๊ธฐ๋ณธํ˜•์€ ๊ฐ’์ด ๋‹ด๊ธด ์ฃผ์†Ÿ๊ฐ’์„ ๋ฐ”๋กœ ๋ณต์ œ, ์ฐธ์กฐํ˜•์€ ๊ฐ’์ด ๋‹ด๊ธด ์ฃผ์†Ÿ๊ฐ’๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌถ์Œ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฃผ์†Ÿ๊ฐ’์„ ๋ณต์ œ.

๋ฐ์ดํ„ฐ ํƒ€์ž…์— ๊ด€ํ•œ ๋ฐฐ๊ฒฝ์ง€์‹

  • ํ•˜๋‚˜์˜ ๋ฉ”๋ชจ๋ฆฌ ์กฐ๊ฐ ๋น„ํŠธ bit, ๊ฐ ๋น„ํŠธ๋Š” ๊ณ ์œ ํ•œ ์‹๋ณ„์ž Unique identifier๋ฅผ ํ†ตํ•ด ์œ„์น˜ ํ™•์ธ ๊ฐ€๋Šฅ
  • ๋น„ํŠธ๋ฅผ ๋ฌถ์–ด ํ•˜๋‚˜์˜ ๋‹จ์œ„๋กœ ์—ฌ๊ฒจ ๋ฐ”์ดํŠธ byte๊ฐ€ ํƒ„์ƒ. 1byte = 8bit
  • C/C++, Java ๋“ฑ ์ •์  ํƒ€์ž…์˜ ์–ธ์–ด๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…๋ณ„๋กœ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ 2, 4byte๋กœ ๋‚˜๋ˆ„์–ด ์ •ํ•จ
  • Javascript์˜ ๊ฒฝ์šฐ ์ˆซ์ž๋Š” ์ •์ˆ˜ํ˜•, ๋ถ€๋™์†Œ์ˆ˜ํ˜• ๊ตฌ๋ถ„์—†์ด 64bit, 8byte๋ฅผ ํ™•๋ณด
  • ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” byte ๋‹จ์œ„์˜ ์‹๋ณ„์ž, ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Ÿ๊ฐ’ Memory Address๋ฅผ ํ†ตํ•ด ์„œ๋กœ ๊ตฌ๋ถ„, ์—ฐ๊ฒฐ ๊ฐ€๋Šฅ
  • ๋ณ€์ˆ˜ Variable : ๋ณ€ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ
  • ์‹๋ณ„์ž identifier : ๋ณ€์ˆ˜๋ช…

๋ณ€์ˆ˜ ์„ ์–ธ๊ณผ ๋ฐ์ดํ„ฐ ํ• ๋‹น

// ๋ณ€์ˆ˜ ์„ ์–ธ
var a;
// var๋Š” ์•ˆ์“ฐ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. let์„ ๊ถŒ์žฅํ•œ๋‹ค. ์ถ”ํ›„์— ์—…๋ฐ์ดํŠธ ์˜ˆ์ •
// ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ด๊ธธ ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„ ๋˜๋Š” ๊ทธ๋ฆ‡

var a; // ๋ณ€์ˆ˜ a ์„ ์–ธ
a = 'abc'; // ๋ณ€์ˆ˜ a์— ๋ฐ์ดํ„ฐ ํ• ๋‹น

var a = 'abc'; // ๋ณ€์ˆ˜ ์„ ์–ธ๊ณผ ํ• ๋‹น์„ ํ•œ ๋ฌธ์žฅ์œผ๋กœ ํ‘œํ˜„

๋ณ€์ˆ˜ a์— 'abc'๋ฅผ ํ• ๋‹นํ•˜๋ฉด, ๋ณ€์ˆ˜์˜ ๊ฐ’์—๋Š” ๋ฐ์ดํ„ฐ ์˜์—ญ์— ์ €์žฅ๋œ 'abc'์˜ ์ฃผ์†Ÿ๊ฐ’์ด ์ €์žฅ๋œ๋‹ค.
Why? ๊ฐ€๋ณ€์ ์ด๊ธฐ์—. ํšจ์œจ์ ์œผ๋กœ ๋ฌธ์ž์—ด ๋ฐ์ดํ„ฐ์˜ ๋ณ€ํ™˜์„ ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด ๋ณ€์ˆ˜์™€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ„๋„์˜ ๊ณต๊ฐ„์— ๋‚˜๋ˆ„์–ด ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ์ตœ์ .
If a์— 'abc'๊ฐ€ ์•„๋‹Œ 'abcdef'๋ฅผ ์ƒˆ๋กœ ํ• ๋‹นํ•  ๊ฒฝ์šฐ, 'abc'๊ฐ€ ์ˆ˜์ •๋˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ, 'abcdef'๊ฐ€ ์ƒˆ๋กœ ๋ณ„๋„์˜ ๊ณต๊ฐ„์— ์ €์žฅ๋˜์–ด ์ด ์ฃผ์†Ÿ๊ฐ’์ด ์ €์žฅ๋œ๋‹ค.
Example 500๊ฐœ์˜ ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ชจ๋“  ๋ณ€์ˆ˜์— ์ˆซ์ž 5๋ฅผ ํ• ๋‹นํ•˜๋Š” ์ƒํ™ฉ์„ ์ƒ๊ฐํ•ด๋ณด์ž. ์ฃผ์†Ÿ๊ฐ’ ์ฐธ์กฐ๊ฐ€ ์•„๋‹Œ, ๋ณ€์ˆ˜ ๊ณต๊ฐ„๋งˆ๋‹ค 5๊ฐ€ ๋Œ€์ž…๋  ๊ฒฝ์šฐ ์ˆซ์žํ˜•์€ 8byte๊ฐ€ ํ•„์š”ํ•˜๊ธฐ์— ์ด 4000(5008)byte๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ํ•˜์ง€๋งŒ 5๊ฐ€ ์ €์žฅ๋œ ์ฃผ์†Œ๋ฅผ ์ฐธ์กฐํ•  ๊ฒฝ์šฐ 1008(5002+8)byte๋งŒ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. (์ฃผ์†Ÿ๊ฐ’์„ 2byte๋กœ ๊ณ„์‚ฐ)

  • ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋Š” ์ž์‹ ์˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ณ€์ˆ˜๊ฐ€ ํ•˜๋‚˜๋„ ์—†๊ฒŒ ๋˜๋ฉด ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ(Garbage Collector)์˜ ์ˆ˜๊ฑฐ ๋Œ€์ƒ์ด ๋œ๋‹ค

๊ธฐ๋ณธํ˜• ๋ฐ์ดํ„ฐ์™€ ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ

๋ถˆ๋ณ€๊ฐ’

  • ๋ณ€์ˆ˜ variable์™€ ์ƒ์ˆ˜ constant๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ์„ฑ์งˆ์€ '๋ณ€๊ฒฝ๊ฐ€๋Šฅ์„ฑ', ๊ทธ๊ฒƒ์˜ ๋Œ€์ƒ์€ ๋ณ€์ˆ˜ ์˜์—ญ์˜ ๋ฉ”๋ชจ๋ฆฌ์ด๋‹ค. ํ•œ ๋ฒˆ ๋ฐ์ดํ„ฐ ํ• ๋‹น์ด ์ด๋ค„์ง„ ๋ณ€์ˆ˜ ๊ณต๊ฐ„์— ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฅผ ์žฌํ• ๋‹น์„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๊ฐ€ ๊ด€๊ฑด.
  • ๋ถˆ๋ณ€์„ฑ ์—ฌ๋ถ€๋ฅผ ๊ตฌ๋ถ„ํ•  ๋•Œ์˜ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ์„ฑ์˜ ๋Œ€์ƒ์€ ๋ฐ์ดํ„ฐ ์˜์—ญ ๋ฉ”๋ชจ๋ฆฌ์ด๋‹ค.
// ๋ถˆ๋ณ€์„ฑ
var a = 'abc';
a = a + 'def';

var b = 5;
var c = 5;
b = 7;

// 5๊ฐ€ ์‚ฌ๋ผ์ง€๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ์ˆซ์ž 7์˜ ์ฃผ์†Ÿ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๊ฒƒ.
// ์ˆซ์ž, ๋ฌธ์ž์—ด, Boolean, Null, Undefined, Symbol : ๋ถˆ๋ณ€๊ฐ’
// ํ•œ ๋ฒˆ ๋งŒ๋“ค์–ด์ง„ ๊ฐ’์€ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํŒ…์„ ๋‹นํ•˜์ง€ ์•Š๋Š” ํ•œ ์˜์›ํžˆ ๋ณ€ํ•˜์ง€ ์•Š์Œ.

๊ฐ€๋ณ€๊ฐ’

  • ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ์˜ ๊ธฐ๋ณธ์ ์ธ ์„ฑ์งˆ์€ ๊ฐ€๋ณ€๊ฐ’์ธ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์ง€๋งŒ *์„ค์ •์— ๋”ฐ๋ผ ๋ถˆ๊ฐ€ํ•œ ๊ฒฝ์šฐ๋„ ์žˆ๊ณ , ์•„์˜ˆ ๋ถˆ๋ณ€๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Œ
  • *Object.defineProperty, Object.freeze ๋“ฑ
// ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ์˜ ํ• ๋‹น
var obj1 = {
	a: 1,
    b: 'bbb'
};
obj1.a = 2;

// ๊ธฐ๋ณธํ˜• ๋ฐ์ดํ„ฐ์™€์˜ ์ฐจ์ด๋Š” '๊ฐ์ฒด์˜ ๋ณ€์ˆ˜(ํ”„๋กœํผํ‹ฐ) ์˜์—ญ'์ด ๋ณ„๋„๋กœ ์กด์žฌ.
// ๊ฐ์ฒด๊ฐ€ ๋ณ„๋„ ํ• ์• ํ•œ ์˜์—ญ์€ ๋ณ€์ˆ˜ ์˜์—ญ, '๋ฐ์ดํ„ฐ ์˜์—ญ'์€ ๊ธฐ์กด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ๊ทธ๋Œ€๋กœ ํ™œ์šฉ.
// ๋ฐ์ดํ„ฐ ์˜์—ญ์— ์ €์žฅ๋œ ๊ฐ’์€ ๋ชจ๋‘ ๋ถˆ๋ณ€๊ฐ’, ๋ณ€์ˆ˜ ์˜์—ญ์€ ๊ธฐ์กด ๊ฐ์ฒด ๋‚ด๋ถ€ ๊ฐ’๋งŒ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ.

์ค‘์ฒฉ ๊ฐ์ฒด Nested Object

// ์ค‘์ฒฉ๋œ ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ(๊ฐ์ฒด)์˜ ํ”„๋กœํผํ‹ฐ ํ• ๋‹น
var obj = {
	x: 3,
    arr: [3,4,5]
};
obj.arr = 'str';
// ๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ ๋ณ€์ˆ˜ ๊ณต๊ฐ„ ํ™•๋ณด & ๊ฐ๊ฐ ์ธ๋ฑ์Šค๋ฅผ ๋ถ€์—ฌ
  • ์–ด๋–ค ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์ž์‹ ์˜ ์ฃผ์†Œ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋ณ€์ˆ˜์˜ ๊ฐœ์ˆ˜ : ์ฐธ์กฐ์นด์šดํŠธ
  • ์ฐธ์กฐ ์นด์šดํŠธ๊ฐ€ 0์ธ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋Š” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ์˜ ์ˆ˜๊ฑฐ ๋Œ€์ƒ์ด ๋จ

๋ณ€์ˆ˜ ๋ณต์‚ฌ ๋น„๊ต

// ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ ๋ณ€๊ฒฝ ์‹œ
var a = "10"
var b = a;

var obj1 = {c: 10, d: 'ddd'};
var obj2 = obj1;
  • ๋ณ€์ˆ˜๋ฅผ ๋ณต์‚ฌํ•˜๋Š”๊ณผ์ •์€ ๊ธฐ๋ณธํ˜• ๋ฐ์ดํ„ฐ์™€ ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ ๋ชจ๋‘ ๊ฐ™์€ ์ฃผ์†Œ๋ฅผ ๋ฐ”๋ผ๋ณด๊ฒŒ ๋˜๋Š” ์ ์—์„œ ๋™์ผ
  • ๋ณต์‚ฌ ๊ณผ์ •์€ ๋™์ผํ•˜์ง€๋งŒ ๋ฐ์ดํ„ฐ ํ• ๋‹น ๊ณผ์ •์—์„œ ์ฐจ์ด๊ฐ€ ์žˆ์Œ. ๋ณ€์ˆ˜ ๋ณต์‚ฌ ์ดํ›„ ๋™์ž‘์—์„œ ํฐ ์ฐจ์ด.
// ์œ„ ์ฝ”๋“œ ์‹คํ–‰ ์ดํ›„ ์ ์šฉ 
b = 15;
obj.c = 20;

// ์ด ๊ฒฝ์šฐ, ์•„๋ž˜์™€ ๊ฐ™์ด ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. 

a !== b
obj1 === obj2
  • ์—„๋ฐ€ํžˆ ๋งํ•˜๋ฉด ๋ชจ๋“  ๋ฐ์ดํ„ฐ ํƒ€์ž…์€ ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ์ผ ์ˆ˜ ๋ฐ–์— ์—†๋‹ค. ๋‹ค๋งŒ, ๊ธฐ๋ณธํ˜•์€ ์ฃผ์†Ÿ๊ฐ’์„ ๋ณต์‚ฌํ•˜๋Š” ๊ณผ์ •์ด ํ•œ ๋ฒˆ๋งŒ ์ด๋ค„์ง€๊ณ , ์ฐธ์กฐํ˜•์€ ํ•œ ๋‹จ๊ณ„๋ฅผ ๋” ๊ฑฐ์น˜๊ฒŒ ๋œ๋‹ค๋Š” ์ฐจ์ด๊ฐ€ ์žˆ์Œ.
// ๊ฐ์ฒด ์ž์ฒด๋ฅผ ๋ณ€๊ฒฝํ–ˆ์„ ๋•Œ

var a = 10;
var b = a;
var obj1 = {c: 10, d: 'ddd'};
var obj2 = obj1;

b = 15;
obj2 = {c: 20, d: 'ddd'};
// ์ด ๊ฒฝ์šฐ b์™€ ๊ฐ™์ด obj2๋„ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๊ฐ€ ํ• ๋‹น๋˜์–ด ์ฃผ์†Ÿ๊ฐ’์ด ๋ณ€๊ฒฝ๋จ.
  • ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ๊ฐ€ '๊ฐ€๋ณ€๊ฐ’'์ด๋ผ๊ณ  ์„ค๋ช…ํ•  ๋•Œ์˜ '๊ฐ€๋ณ€'์€ ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ ์ž์ฒด๋ฅผ ๋ณ€๊ฒฝํ•  ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ผ ๊ทธ ๋‚ด๋ถ€์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ๋งŒ ์„ฑ๋ฆฝ

๋ถˆ๋ณ€ ๊ฐ์ฒด Immutable Object

  • ๋‚ด๋ถ€ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์žˆ์„ ๋•Œ๋งˆ๋‹ค ๋งค๋ฒˆ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ์žฌํ• ๋‹นํ•˜๊ธฐ๋กœ ๊ทœ์น™์„ ์ •ํ•˜๊ฑฐ๋‚˜, ์ž๋™์œผ๋กœ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” *๋„๊ตฌ๋ฅผ ํ™œ์šฉ
  • *immutable.js, immer.js, immutability-helper ๋“ฑ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ES6์˜ spread operator,Object.assign ๋ฉ”์„œ๋“œ ๋“ฑ๋„ ๊ฐ™์€ ๋ชฉ์ ์œผ๋กœ ํ™œ์šฉ
var user = {
	name: 'Jaenam',
    gender: 'male'
};

var changeName = func

0๊ฐœ์˜ ๋Œ“๊ธ€