[Front-end๐Ÿฆ] #37 JavaScript ์ตœ์ ํ™”

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

front-end

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

1. ์ตœ์ ํ™”

1. ์ตœ์ ํ™” ํ•˜๋Š” ์ด์œ 

  • ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ์ข‹์•„์ง„๋‹ค.

2. ์„ฑ๋Šฅ ์ธก์ •์˜ ์ฒ™๋„

  1. ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ  === ๋ฆฌ์†Œ์Šค (์ž์› ์†Œ๋ชจ๋ฅผ ์–ผ๋งˆ๋‚˜ ํ•˜๋Š”์ง€ - ๋ฉ”๋ชจ๋ฆฌ, ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ)
  2. ๋น ๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค === ์‹œ๊ฐ„

3. ์‹œ๊ฐ„ ์ธก์ •

1. ์ดˆ๊ธฐ ๊ตฌ๋™ ์‹œ๊ฐ„ : ์ดˆ๊ธฐ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋กœ๋“œ๋˜๋Š” ์‹œ๊ฐ„

  • ๋‹ค์šด๋กœ๋“œ ํ•ด์•ผ ํ•˜๋Š” ํŒŒ์ผ ๊ฐฏ์ˆ˜์™€ ์šฉ๋Ÿ‰์€ ์ž‘๊ฒŒ ์œ ์ง€ - ์ด๋ฏธ์ง€ ์Šคํ”„๋ผ์ดํŠธ ๊ธฐ๋ฒ•, ์ด๋ฏธ์ง€ ์šฉ๋Ÿ‰ ์ตœ์ ํ™”, ์ตœ์ ํ™”๋œ ํฐํŠธ ์‚ฌ์šฉ ...
  • ์ตœ์†Œํ™”ํ•œ CSS, JS ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ์šฉ๋Ÿ‰์„ ์ค„์ธ๋‹ค. - jquery Minified, JS & CSS Minifier ๋‹ค์šด๋กœ๋“œ
  • ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ํ•„์š”ํ•œ ๊ฒƒ๋งŒ ์‚ฌ์šฉ

iframe ์œผ๋กœ ๋ถˆ๋Ÿฌ์˜ค๋ฉด ๋ฆฌ์†Œ์Šค๋ฅผ ๋‘๋ฒˆ ๋ถˆ๋Ÿฌ์˜ค๊ฒŒ ๋œ๋‹ค.


2. ๊ณ„์‚ฐ์‹œ๊ฐ„ : ๋™์ผํ•œ ๊ณ„์‚ฐ์„ ์–ผ๋งˆ๋‚˜ ๋น ๋ฅด๊ฒŒ ์ˆ˜ํ–‰ํ•˜๋Š”๊ฐ€

์•Œ๊ณ ๋ฆฌ์ฆ˜ ์˜์—ญ!


3. ๋ฐ˜์‘ ์‹œ๊ฐ„ : ์‚ฌ์šฉ์ž์˜ ํ–‰๋™์— ์–ผ๋งˆ๋‚˜ ๋น ๋ฅด๊ฒŒ ๋ฐ˜์‘ํ•˜๋Š”๊ฐ€

๋ฐ˜์‘ ์‹œ๊ฐ„์„ ์ค„์ด๋ ค๋ฉด ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ๋ฐฉ์‹์„ ์ดํ•ดํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค. reflow, repaint

  1. JS ๋ณด๋‹ค๋Š” CSS ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ํ™œ์šฉํ•˜์ž.
    • JS๋กœ ์Šคํƒ€์ผ์„ ์ˆ˜์ •ํ•ด๋„ ๊ฒฐ๊ตญ CSS ์†์„ฑ์œผ๋กœ ์—…๋ฐ์ดํŠธ ๋ฉ๋‹ˆ๋‹ค.
  2. Transform ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์ž. - GPU๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ!
  3. repaint, reflow ๋ฅผ ์œ ๋ฐœํ•˜๋Š” ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์ง€ ๋ง์ž. - https://csstriggers.com - CSS ์†์„ฑ์˜ reflow, repaint ์ •๋ณด!
  4. requestAnimationFrame ์‚ฌ์šฉ. - ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ตœ์ ํ™”ํ•˜๊ฒŒ ํ•˜๊ณ , ๋น„ ํ™œ์„ฑ ํƒญ์—์„œ๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ๋™์ž‘ํ•˜์ง€ ์•Š๊ฒŒ ํ•ด์คŒ.
  5. DOM ์ ‘๊ทผ๊ณผ ์—…๋ฐ์ดํŠธ๋Š” ๊ฐ€๋Šฅํ•œ ์ ๊ฒŒ
    • DOM ์ ‘๊ทผ์€ ๊ฐ€๋Šฅํ•œ ์ข์€ ๋ฒ”์œ„์—์„œ ์ ๊ฒŒ ์‚ฌ์šฉ. -> ๋งค๋ฒˆ document.querySelector ํ•˜์ง€ ๋ง๊ณ  ์ƒ์œ„ ์š”์†Œ๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•˜์ž.
    • DocumentFragment ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ•œ๋ฒˆ์— DOM์„ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.
    • DocumentFragment ๋Š” html ๋ฌธ์„œ์— js๋กœ element๋ฅผ ๋งŒ๋“ค์–ด์„œ ์—ฌ๋Ÿฌ๊ฐœ ๋ถ™์—ฌ์•ผํ•  ๋•Œ, ๊ณ„์†ํ•ด์„œ ๋”์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์€ ๋น„ํšจ์œจ์ ์ด๋ฏ€๋กœ frag์— ์Œ“์•„๋‘๊ณ  ๋งˆ์ง€๋ง‰์— DOM์— ์ ‘๊ทผํ•ด์„œ ์—…๋ฐ์ดํŠธ ํ•˜๊ณ , frag๋Š” ์‚ฌ๋ผ์ง„๋‹ค.

4. ๋ฉ”๋ชจ๋ฆฌ

MDN JavaScript ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ

1. ๋ฉ”๋ชจ๋ฆฌ์˜ ์ƒ๋ช… ์ฃผ๊ธฐ

  1. ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น : ํ”„๋กœ๊ทธ๋žจ์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์šด์˜์ฒด์ œ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•œ๋‹ค.
  2. ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ : ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”๋“œ ์ƒ์—์„œ ํ• ๋‹น๋œ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์ฝ๊ธฐ, ์“ฐ๊ธฐ ์ž‘์—…์„ ํ•œ๋‹ค.
  3. ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ : ํ”„๋กœ๊ทธ๋žจ์—์„œ ํ•„์š”ํ•˜์ง€ ์•Š์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋Œ๋ ค์ฃผ์–ด ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค.

2. Garbage Collection

ํ•ด์ œ๊ฐ€ ๊ฐ€์žฅ ์–ด๋ ค์šด ๋ถ€๋ถ„์ด๋‹ค.

  • C์—์„œ๋Š” free ๋กœ ์ง์ ‘ ํ•ด์ œ (์ €์ˆ˜์ค€ ์–ธ์–ด)
  • JavaScript์—์„œ๋Š” ์—”์ง„์ด ์ถ”์ •ํ•ด์„œ ํ•ด์ œํ•ด์คŒ (๊ณ ์ˆ˜์ค€ ์–ธ์–ด)

reference counting ๋ฐฉ์‹์„ ํ†ตํ•ด์„œ ์ถ”์ •ํ•จ. ์–ด๋–ค ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ณ€์ˆ˜๊ฐ€ ํ•˜๋‚˜๋„ ์—†์œผ๋ฉด ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ.

var me = { age: 30 }; // ์ฐธ์กฐ ์นด์šดํŒ… 1๊ฐœ
var you = me;         // 2๊ฐœ
me = null;            // 1๊ฐœ
you = null;           // 0๊ฐœ - ํ•ด์ œ ๋œ๋‹ค.
// ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ : ์‚ฌ์šฉํ•˜์ง€ ์•Š์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ..
var x = {
  y: {
    z: 1
  }
};
// x ์ฐธ์กฐ ๊ฐ์ฒด๋ฅผ object1, y ์ฐธ์กฐ ๊ฐ์ฒด๋ฅผ object2

var a = x; // object1 ๊ฐ์ฒด์˜ ์ฐธ์กฐ ์นด์šดํŠธ : 2 ( x, a )
x = 1;     // object1 ๊ฐ์ฒด์˜ ์ฐธ์กฐ ์นด์šดํŠธ : 1 ( a )

var b = a.y; // object2 ๊ฐ์ฒด์˜ ์ฐธ์กฐ ์นด์šดํŠธ : 2 ( y, b )
a = 2;       // object1 ๊ฐ์ฒด์˜ ์ฐธ์กฐ ์นด์šดํŠธ : 0

// y ๋•Œ๋ฌธ์— x๋Š” ๋ฐ”๋ผ๋ณด๋Š” ๋…€์„์ด ์—†์Œ์—๋„ ๋ฉ”๋ชจ๋ฆฌ์— ๋‚จ์•„์žˆ๊ฒŒ ๋œ๋‹ค.
// ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ ์ „๊นŒ์ง€ ๊ณ„์† ๋ฉ”๋ชจ๋ฆฌ์— ๋‚จ์•„์žˆ๊ฒŒ ๋˜๋ฏ€๋กœ, ์ตœ๋Œ€ํ•œ ์‚ฌ์šฉํ•˜์ง€ ๋ง์ž.

5. tips:sparkles:

  1. ๋ฐฐ์—ด์ด๋‚˜ ๊ฐ์ฒด๋Š” ๋ถˆ๋ณ€ํ•˜๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ ๋‹ค๋ฃจ๊ธฐ.

  2. ์—„๊ฒฉ ๋ชจ๋“œ(strict mode)๋กœ ์‚ฌ์šฉํ•˜๊ธฐ.

  3. ์ผ์น˜ ์—ฐ์‚ฐ์ž == ๋Œ€์‹  ===๋กœ ์‚ฌ์šฉํ•˜๊ธฐ.




2. ๋ชจ์˜ ๋ฉด์ ‘ 2

1. pixel ratio

CSS ์—์„œ ๋งํ•˜๋Š” 1px ์— ์‹ค ๊ธฐ๊ธฐ์—๋Š” ๋ช‡ ๊ฐœ์˜ pixel์ด ๋“ค์–ด๊ฐ€์žˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ธ ๋น„์œจ. ๋ ˆํ‹ฐ๋‚˜ ๋””์Šคํ”Œ๋ ˆ์ด์— ์‚ฌ์ง„์„ ๋„ฃ์œผ๋ฉด ์ž‘์•„์ง€๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐ€๋กœ ์„ธ๋กœ ๊ฐ 2๋ฐฐ ์‚ฌ์ด์ฆˆ์˜ ์ด๋ฏธ์ง€๋ฅผ ๋„ฃ์–ด์„œ ๋Œ€์‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


2. ๋‹ค์Œ ์ด๋ฏธ์ง€ ํฌ๋งท์— ๋Œ€ํ•ด ๊ฐ ํŠน์ง•์— ๋Œ€ํ•ด ์„ค๋ช… ํ•ด ์ฃผ์„ธ์š”. (JPG, GIF, PNG, SVG)

JPG : ๊ฐ€์žฅ ์šฉ๋Ÿ‰์ด ์ž‘์ง€๋งŒ ํ™”์งˆ๋„ ์ข‹์•„์„œ ๋งŽ์ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ์น˜๋งŒ ํˆฌ๋ช…ํ™”๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•œ ํฌ๋งท์ž…๋‹ˆ๋‹ค.
GIF : ์›€์ง์ด๋Š” ์ด๋ฏธ์ง€๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๊ณ , ํˆฌ๋ช…๋„ ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ์น˜๋งŒ ํ™”์งˆ์ด ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
PNG : ์šฉ๋Ÿ‰์ด ๋น„๊ต์  ํฐ ํŽธ์ด์ง€๋งŒ ํˆฌ๋ช… ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
SVG : ๋ฒกํ„ฐ ์ด๋ฏธ์ง€๋กœ ๊นจ์ง€์ง€ ์•Š๋Š”๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.


3. margin collapsing

margin ๊ฒน์นฉ ํ˜„์ƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ํ˜•์ œ ์š”์†Œ์˜ margin-bottom๊ณผ margin-top์ด ๊ฒน์ณ์„œ ๋” ํฐ ์ชฝ๋งŒ ๋‚จ๊ฑฐ๋‚˜, window ๋งจ ์œ„์— ์žˆ๋Š” ์š”์†Œ์— margin-top ์ด ์ ์šฉ๋˜์ง€ ์•Š๋Š” ํ˜„์ƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ๋ถ€๋ชจ ์ž์‹๊ฐ„์—๋„ margin ๊ฒน์นจ์ด ์ผ์–ด๋‚˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ์ž์‹์— display: inline-block์„ ๋„ฃ๊ฑฐ๋‚˜, ๋ถ€๋ชจ์— overflow:hidden ์†์„ฑ์„ ์ฃผ๋Š” ๋“ฑ์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


4. event delegation

์ด๋ฒคํŠธ ์œ„์ž„์€ ๋ถ€๋ชจ ์š”์†Œ์— ์ค€ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋ถ™์˜€์„ ๋•Œ, ์ž์‹ ์š”์†Œ์— ๋”ฐ๋กœ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋ถ™์ด์ง€ ์•Š์•„๋„ ๋ฒ„๋ธ”๋ง์— ์˜ํ•ด ์ด๋ฒคํŠธ๊ฐ€ ์ „ํŒŒ๋˜์–ด ์ž์‹ ์š”์†Œ์— ์ด๋ฒคํŠธ๊ฐ€ ์ผ์–ด๋‚ฌ์„ ๋•Œ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ event handler ํ•จ์ˆ˜์— event.target ์˜ classList๋ฅผ ๊ฒ€์‚ฌํ•˜์—ฌ ์ด๋ฒคํŠธ๊ฐ€ ์ผ์–ด๋‚œ ์š”์†Œ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๋™์ž‘์ด ์ผ์–ด๋‚˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ €๋Š” ์ด๋ฒคํŠธ๊ฐ€ ์ผ์–ด๋‚ฌ์„ ๋•Œ, ์ด๋ฒคํŠธ์˜ ์ง„์›์ง€๋ฅผ ์ฐพ์•„ ์บก์ณ๋ง, ๋ฒ„๋ธ”๋ง์˜ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์น˜๋ฉด์„œ ์ด๋ฒคํŠธ๋ฅผ ์ „ํŒŒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํ•ด๋‹น ํŠน์„ฑ์„ ์ด์šฉํ•˜์—ฌ ๋ถ€๋ชจ ์š”์†Œ์— ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋ถ™์—ฌ์„œ ์ž์‹ ์š”์†Œ์˜ ์ด๋ฒคํŠธ๋ฅผ ์ปจํŠธ๋กคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋งŒ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ด€๋ฆฌ๊ฐ€ ๊ฐ„ํŽธํ•˜๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.


5. ํด๋กœ์ ธ(Closure)๋Š” ๋ฌด์—‡์ด๋ฉฐ, ์–ด๋–ป๊ฒŒ/์™œ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

ํด๋กœ์ ธ๋Š” ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋Š” ํ•จ์ˆ˜ ๋‚ด๋ถ€์˜ ๊ณต๊ฐ„์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ๋ณ€์ˆ˜๋ฅผ ์บก์Šํ™”, ์€๋‹‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉฐ, ์€๋‹‰ํ•œ ํ•ด๋‹น ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” getter ํ•จ์ˆ˜๋ฅผ ํ•จ์ˆ˜์˜ return ๊ฐ’์œผ๋กœ ์ฃผ์–ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ•„์š”์— ๋”ฐ๋ผ ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์„ค์ •ํ•˜๋Š” setter ํ•จ์ˆ˜๋„ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ „์—ญ ๊ณต๊ฐ„์— ํ•จ์ˆ˜๊ฐ€ ๊ณ„์† ์กด์žฌํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋ผ์„œ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์ด ์ข‹๋‹ค๊ณ  ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ ์ตœ์ ํ™” ์ธก๋ฉด์—์„œ๋Š” ์ข‹์ง€ ์•Š๋‹ค.


6. ๋‹ค์Œ ์ฝ”๋“œ ์ค‘ 1๋ฒˆ๊ณผ 2๋ฒˆ์˜ ์ฐจ์ด์ ์„ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

function Car(){};
1. var car  = Car();
2. var car = new Car();

1 ๋ฒˆ์€ Car ํ•จ์ˆ˜๊ฐ€ ์ผ๋ฐ˜ ํ•จ์ˆ˜๋กœ ์‹คํ–‰๋˜์–ด ์‹คํ–‰๋œ ๋’ค์˜ Return ๊ฐ’์ด car ๋ณ€์ˆ˜์— ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค. 2๋ฒˆ์€ Car ๊ฐ€ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋กœ ์‹คํ–‰๋˜์–ด ํ•จ์ˆ˜ ๋‚ด์— ๋”ฐ๋กœ return ๋ฌธ์ด ์—†๊ฑฐ๋‚˜ ์›์‹œ๊ฐ’์„ return ํ•œ๋‹ค๋ฉด instance๊ฐ€ ์ƒ์„ฑ๋˜์–ด car์— ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค. object ๋ฅผ return ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ํ•ด๋‹น object๊ฐ€ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.




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

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