[Front-end๐Ÿฆ] #27 JavaScript JSON / 18์žฅ

๋˜์ƒยท2021๋…„ 12์›” 6์ผ
0

front-end

๋ชฉ๋ก ๋ณด๊ธฐ
41/58
post-thumbnail

1. ๋ฉ‹์‚ฌ ์ˆ˜์—…

์ด๋ ฅ์„œ์™€ ๊นƒํ—™ ์ด์•ผ๊ธฐ.. ๋ฅผ ๋จผ์ € ๋“ค์—ˆ๋‹ค.
๊ฐ€์žฅ ์ค‘์š”ํ•˜๊ฒŒ ๋ฐฐ์›Œ์•ผ ํ•  ๊ฒƒ์€ ํŽ˜์ด์ง€ ๊ตฌํ˜„.

1. Array, String, Math method ๋ณต์Šต

string.repeat(10)
Array.from('a'.repeat(10)) // ์ด๋Ÿฐ์‹์œผ๋กœ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.
Array(10) // ์™„์ „ํžˆ ์•„๋ฌด๊ฒƒ๋„ ๋“ค์–ด์žˆ์ง€ ์•Š์€ undefined๋„ ์•ˆ๋“ค์–ด๊ฐ„ Array ์ƒ์„ฑ.
Array(10).fill(0) // 10๊ฐœ์— ์ „๋ถ€ 0 ์ฑ„์›€.
Array(10).fill(0).map((value, index) => value + index)
// reduce ๋Š” ๋งŽ์ด ์•ˆ์”€.
arr.reduce((sum, current) => sum + current)
let s = 0
[1, 2, 3, 4, 5].forEach(i => s+i)
[1, 2, 3, 4, [1, 2, [1, 2, 3]]].flat() // ํ•œ๋‹จ๊ณ„ ํŽผ์ณ์คŒ
[1, 2, 3, 4, [1, 2, [1, 2, 3]]].flat().flat() // ๋‘๋‹จ๊ณ„
[1, 2, 3, 4, [1, 2, [1, 2, 3]]].flat(2) // ๋‘๋‹จ๊ณ„
[1, 2, 3, 4, [1, 2, [1, 2, 3]]].flat(Infinity) // ์‚ญ ๋‹ค ํŽผ์ณ์คŒ
2 ** 3 ** 2 // ์šฐ๊ฒฐํ•ฉ์ด๋ฏ€๋กœ ์ฃผ์˜ํ•˜์ž.
s.split(' ') // ' ' ๊ธฐ์ค€์œผ๋กœ ์ž˜๋ผ์„œ array๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.
// map ์€ ๋ฐ˜ํ™˜๊ฐ’์ด ์žˆ๊ณ , forEach ๋Š” ๋ฐ˜ํ™˜๊ฐ’ ์—†์ด ํ•จ์ˆ˜๋งŒ ์‹คํ–‰ํ•ด์คŒ.
const arr = '12345'.split('').forEach(x => parseInt(x))
let today = new Date()
today.toISOString()
Math.max([1, 2, 10, 6, 7]) // NaN
Math.max(...[1, 2, 10, 6, 7]) // 10 ํŽผ์ณ์•ผ ์•Œ๋ ค์คŒ.
Math.max.apply(null, [1, 2, 10, 6, 7]) // ... ๋“ฑ์žฅ ์ „์—” ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ–ˆ๋‹ค.
Math.PI
Math.SQRT2 // root 2
Number.MAX_SAFE_INTEGER
Number.MIN_SAFE_INTEGER
Number.EPSILON // javascript์—์„œ ๋‚  ์ˆ˜ ์žˆ๋Š” ์˜ค์ฐจ ๋ฒ”์œ„.

2. strict mode

  • ์›๋ž˜ js๋Š” ์ตœ๋Œ€ํ•œ ์˜ค๋ฅ˜๋ฅผ ๋‚ด์ง€ ์•Š๊ฒŒ ์„ค๊ณ„๋˜์–ด ์žˆ๋Š”๋ฐ ํ•ด๋‹น ๋ถ€๋ถ„๋“ค์„ ์—„๊ฒฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์œผ๋ฉด, 'use strict' ๋ฅผ ์ด์šฉํ•ด์„œ ์—„๊ฒฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  • js ๋‹ค๋ฅธ ํŒŒ์ผ์˜ ๋ณ€์ˆ˜๋„ ์ฐธ์กฐ ๊ฐ€๋Šฅํ•˜๋‹ค.


3. this

function sayName() {
  console.log(this.name)
}
let peter = {
  name: 'Peter Parker',
  sayName: sayName
  sayName2: function (name1, name2) {
    console.log(this.name + ' is' + name1 + ' or ' + name2);
  }
}
let bruce = {
  name: 'Bruce Wayne',
  sayName: sayName
}
sayName() // this == window
peter.sayName() // this == peter
let peter2 = {
  name: 'Peter Parker',
  // bind : this๊ฐ€ ๊ณ ์ •๋œ ํ•จ์ˆ˜๋ฅผ ๊ฐ€์ ธ์™€๋ฒ„๋ฆผ.
  sayName: sayName.bind(bruce)
}
// call: ๋‹ค๋ฅธ object์˜ ํ•จ์ˆ˜๋ฅผ ๊ฐ€์ ธ์˜ค๋Š”๋ฐ ์žฌ์ •์˜ ํ•˜์ง€ ์•Š๊ณ  ๊ฐ€์ ธ์˜ด.
peter.sayName.call(bruce) // peter ํ•จ์ˆ˜์ธ๋ฐ this == bruce
// apply: ํ•จ์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ  ์˜ค๋Š”๋ฐ, ์ธ์ž๋ฅผ ์ „๋‹ฌ.
peter.sayName2.apply(bruce, ['batman', 'richman']) // peter ํ•จ์ˆ˜์ธ๋ฐ this == bruce

4. closure

์ •๋ณด ์€๋‹‰์„ ์œ„ํ•ด ์‚ฌ์šฉ.

function ์ œ๊ณฑ(x) {
  function ์Šน์ˆ˜(y) {
    return y ** x 
  }
  // ํ•จ์ˆ˜๋ฅผ return
  return ์Šน์ˆ˜
}
์ œ๊ณฑ(2)(10) //100

5. ์ƒ์„ฑ์ž ํ•จ์ˆ˜

์ผ๋ฐ˜ ํ•จ์ˆ˜์™€ ์ฐจ์ด ์—†์Œ. ์ฒซ ๊ธ€์ž๋ฅผ ๊ผญ ๋Œ€๋ฌธ์ž๋กœ ์“ฐ์ž.


6. JSON (JavaScript Object Notation)

JavaScript์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ ํ˜•์‹. JS์—์„œ ์‚ฌ์šฉํ•ด์„œ JSON ์ด์—ˆ๋‹ค๋‹ˆ..
๊ทธ ์ „์—๋Š” xml ํ˜•์‹์„ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ–ˆ๋‹ค.

// key ๊ฐ’๋„ ์Œ๋”ฐ์˜ดํ‘œ๋ผ๋Š” ๊ฒƒ์— ์œ ์˜ํ•˜์ž.
{
  "squadName": "์Šˆํผํžˆ์–ด๋กœ",
  "members": [
    {
      "name": "์•„์ด์–ธ๋งจ",
      "age": 29,
      "๋ณธ๋ช…": "ํ† ๋‹ˆ ์Šคํƒ€ํฌ"
    },
    {
      "name": "ํ—ํฌ",
      "age": 39,
      "๋ณธ๋ช…": "๋ถ€๋ฅด์Šค ๋ฐฐ๋„ˆ"
    }
  ]
}
JSON.stringify(user, null, 4); // ๊ณต๋ฐฑ ๋ฌธ์ž 4๊ฐœ๋ฅผ ์จ์„œ ๋“ค์—ฌ์“ฐ๊ธฐ ํ•œ ํ˜•ํƒœ๋กœ ๋งŒ๋“ค์–ด์คŒ.
var arr = [1, 2, 3, 4]
var arrString = JSON.stringify(arr)
JSON.parse(arrString)

JSON ๋ฐ›์•„์™€์„œ ์ฒ˜๋ฆฌํ•˜๊ธฐ

function sortTable(key) {
    if (click) {
        click = false;
        data.sort((a, b) => (a[key] > b[key] ? -1 : (a[key] < b[key]) ? 1 : 0));
    } else {
        click = true;
        data.sort((a, b) => (a[key] < b[key] ? -1 : (a[key] > b[key]) ? 1 : 0));
    }
    renderTable(data);
}
//
function renderTable(data) {
    let tbodyData = [];
    for (const iterator of data) {
        // console.log(iterator);
        tbodyData.push(`
            <tr>
                <th>${iterator.index}</th>
                <th>${iterator.picture}</th>
		<th>${iterator.name}</th>
				// ... ์ƒ๋žต.
            </tr>
        `)
        const tbody = document.querySelector('tbody');
        tbody.innerHTML = tbodyData.join('');
    }
}

HTML ์— ์“ฐ์ง€ ๋ง์ž. js๋กœ ์“ฐ์ž.




3. Deep Dive

  1. ํ•จ์ˆ˜์™€ ์ผ๊ธ‰ ๊ฐ์ฒด ๋งํฌ

์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ–ˆ๋‹ค.




4. ๊ฐ‘์ž๊ธฐ ์ง„ํ–‰๋œ ์กฐ์€๋‹˜์˜ ๋ฆฌ์•กํŠธ ํŠน๊ฐ•

์ฝ”๋“œ๋ฅผ ์™„๋ฒฝ ์ดํ•ดํ•˜๋ ค๊ณ  ํ•˜์ง€๋Š” ์•Š๊ณ  ์ฐ๋จนํ•˜๋Š” ๋Š๋‚Œ์œผ๋กœ ๋“ค์–ด๋ดค๋‹ค. ๊ทธ๋ƒฅ JavaScript ๋“ค์„ ๋•Œ๋„ (์ตœ์‹ ์— ์ƒ๊ฒผ๋‹ค๊ณ  ํ•˜๋Š” ๋ฌธ๋ฒ•๋“ค์ด) Swift์— ์žˆ๋Š” ๋ฌธ๋ฒ•์ด ๋งŽ์•„์„œ ์˜ํ–ฅ์„ ๋งŽ์ด ๋ฐ›์•˜๊ตฌ๋‚˜ ์‹ถ์—ˆ๋Š”๋ฐ, ๋ฆฌ์•กํŠธ์˜ ์ตœ์‹  ๋ฌธ๋ฒ•๋“ค๊นŒ์ง€๋„ Swift์—์„œ ๋ณด์ด๋Š” ๊ตฌ์กฐ์˜ ๋ฌธ๋ฒ•์ด๋ผ๋Š”๊ฒŒ ์‹ ๊ธฐํ–ˆ๋‹ค. Swift5... ์ตœ์‹  ์–ธ์–ด๊ฐ€ ๋งž๊ตฌ๋‚˜..

  • ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ์ปดํฌ๋„ŒํŠธ ์„ ์–ธ (์ตœ์‹  ๋ฌธ๋ฒ•)
  • class๋ฅผ ์‚ฌ์šฉํ•œ ์ปดํฌ๋„ŒํŠธ ์„ ์–ธ
  • ์ปดํฌ๋„ŒํŠธ๋Š” export ํ‚ค์›Œ๋“œ๋ฅผ ์จ์„œ ๋‹ค๋ฅธ ํŒŒ์ผ์—์„œ import ํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค
  • '๋ฐ”๋€Œ๋Š” ๊ฐ’'์„ ๋‚˜ํƒ€๋‚ผ ๋•Œ State ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ปดํฌ๋„ŒํŠธ๋กœ ์ชผ๊ฐœ์„œ ์‚ฌ์šฉ์„ ํ•œ๋‹ค..

์ •๋„๊ฐ€ ๊ธฐ์–ต์— ๋‚จ๋Š”๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐ”๋‹๋ผ๋กœ ์งœ๋ฉด 10์ค„๋กœ ์งค ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ๊ตฌ์กฐ๋กœ 3์ค„ ์ด๋ ‡๊ฒŒ ์งค ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ์ธ์ƒ์ ์ด์—ˆ๋‹ค.




5. ๋Š๋‚€์ 

  • ๋ฌผ๋ก  502 ๋ง‰ ์ด๋Ÿฐ๊ฑฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ ๊ฑด ์•„๋‹ˆ์ง€๋งŒ, JSON ์ฒ˜๋ฆฌ๋ฅผ JSON์˜ ์›์กฐ์ธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ํ•ด๋ณด๋‹ˆ๊นŒ, ์™œ json์ด ๊ทธ๋Ÿฐ ํ˜•ํƒœ์ด๊ณ  ๋ฐ›์•„์˜ค๋Š” ๋ถ€๋ถ„๋„ iOS์—์„œ ํ•  ๋•Œ๋ณด๋‹ค ์ดํ•ด๊ฐ€ ์ž˜ ๊ฐ„๋‹ค. json object ๊ฐ€ ๊ทธ๋Ÿฐ ํ˜•ํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์ด์ง€...
  • ๋ฉด์ ‘ ์ค€๋น„์— ์ •์‹ ์„ ๋ชป์ฐจ๋ฆฌ๊ฒ ๋‹ค... ํƒœ์Šคํฌ ํฌ์ปค์Šค๋ฅผ ์ž˜ ๋งž์ถฐ์„œ ํ‰์†Œ์— ํ•˜๋˜ ๊ฒƒ์ด ๋ฌด๋„ˆ์ง€๋ฉด ์•ˆ๋˜๋Š”๋ฐ ๋ฉด์ ‘ ์ค€๋น„ํ•˜๋‹ˆ๊นŒ ํ‰์†Œ์— ํ•˜๋˜๊ฒŒ ๋ฌด๋„ˆ์ง€๋Š” ๊ฒƒ์ด.. ๋‘๋ ต๋‹ค.... ๋”ฅ๋‹ค์ด๋ธŒ ์–ธ์ œ ๋‹ค ์ฝ์–ด...ใ… ใ… 




profile
0๋…„์ฐจ iOS ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค.

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