๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“ฐ ์–ธ์–ด/JS - ๋น„๊ธฐ๋„ˆ ํŽธ

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

MDN_์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์ž๋ฃŒํ˜• > 

object ์ฐธ๊ณ ํ•œ ๊ฒŒ์‹œ๋ฌผ >

 

1. Primitive Type

  • ๋” ์ด์ƒ ๋‚˜๋ˆ ์งˆ ์ˆ˜ ์—†๋Š” single item (string, number, bigint, boolean, null, undefined, ES6 ๋ถ€ํ„ฐ ์ถ”๊ฐ€๋œ symbol) 
  • ์›์‹œ ํƒ€์ž…์€ ๋ณ€์ˆ˜์— ํ• ๋‹น๋  ๋•Œ, ๋ฉ”๋ชจ๋ฆฌ์˜ ๊ณ ์ • ํฌ๊ธฐ๋กœ ์›์‹œ ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ํ•ด๋‹น ์ €์žฅ๋œ ๊ฐ’์„ ๋ณ€์ˆ˜๊ฐ€ ์ง์ ‘์ ์œผ๋กœ ๊ฐ€๋ฆฌํ‚ค๋Š” ํ˜•ํƒœ๋ฅผ ๋ˆ๋‹ค.
  • Object๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๊ฐ’์€ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฐ’(immutable value)์ด๋‹ค. ์žฌํ• ๋‹น ์‹œ ๊ธฐ์กด ๊ฐ’์ด ๋ณ€ํ•˜๋Š”๊ฒƒ ์ฒ˜๋Ÿผ ๋ณด์ผ์ง€ ๋ชฐ๋ผ๋„ ์‚ฌ์‹ค ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ์— ์žฌํ• ๋‹นํ•œ ๊ฐ’์ด ์ €์žฅ๋˜๊ณ  ๋ณ€์ˆ˜๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋‹ฌ๋ผ์กŒ์„ ๋ฟ์ด๋‹ค.

 


2. Object

single item๋“ค์„ ๋ฌถ์–ด์„œ ํ•œ ๋‹จ์œ„๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์œผ๋กœ key/value pair๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ์ด๋‹ค.

 

2-1) ๊ฐ์ฒด์˜ ํŠน์ง•

  • ๊ฐ์ฒด๋Š” ๋ณ€์ˆ˜์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ฐ์ฒด์—๋Š” ๋งŽ์€ ๊ฐ’์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ๋‹ค. (์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ๋‹จ์ผ ๊ฐ’์„ ํฌํ•จ ํ•  ์ˆ˜ ์žˆ๋‹ค.)
  • Object๋Š” ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ์™€ ํ•จ์ˆ˜์˜ ์ง‘ํ•ฉ์ด๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ์™€ ํ•จ์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง€๋Š”๋ฐ, ๊ฐ์ฒด ์•ˆ์— ์žˆ์„ ๋•Œ๋Š” ๋ณดํ†ต property์™€ method๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
  • ๊ฐ์ฒด๋Š” ์ค‘๊ด„ํ˜ธ{ } ํ‘œ๊ธฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
  • ๊ฐ์ฒด๋Š” ๊ฐ๊ฐ์˜ key/value์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‚˜์—ดํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Key๋Š” ๋ฌธ์ž์—ด ๋˜๋Š” ๊ธฐํ˜ธ์—ฌ์•ผ ํ•œ๋‹ค.
  • Value๋Š” JS์—์„œ ์ง€์›ํ•˜๋Š” ๋ชจ๋“  ์œ ํ˜•์ด ๋  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ฐ์ฒด ๋ณ€์ˆ˜๋ฅผ ๋ณต์‚ฌํ•˜๋ฉด ๊ฐ์ฒด๊ฐ€ ๋ณต์ œ๋˜์ง€ ์•Š๊ณ  ์ฐธ์กฐ๊ฐ€ ๋ณต์‚ฌ๋œ๋‹ค.

 

2-2) Property

ํ”„๋กœํผํ‹ฐ๋Š” ๊ฐ์ฒด์˜ ์†์„ฑ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์ด๋ฆ„๊ณผ ํ™œ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฐ’์„ ๊ฐ€์ง€๋Š” ํŠน๋ณ„ํ•œ ํ˜•ํƒœ์ด๋‹ค. ํŠน์ •๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ •๋ณด๋ฅผ ํ’ˆ๊ณ  ์žˆ์–ด ๊ทธ ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง„ ์ •๋ณด์— ์ง์ ‘์ ์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

 

ํ”„๋กœํผํ‹ฐ์˜ ํ˜•ํƒœ

{name : value}
//name : ๋นˆ ๋ฌธ์ž์—ด์„ ํฌํ•จํ•œ ๋ชจ๋“  ๋ฌธ์ž์—ด ๋˜๋Š” symbol ๊ฐ’
//value : ๋ชจ๋“  ๊ฐ’(JS์—์„œ ์ง€์›ํ•˜๋Š” ํƒ€์ž… ์ž‘์„ฑ)

ex)
var book = {
    title : "์ฑ…",
    point : {
        ten : 10,
        bonus : 200
    }
}

ํ”„๋กœํผํ‹ฐ ์ž‘์„ฑ ๋ฐฉ๋ฒ•

#1. ์ (.)๊ณผ ํ”„๋กœํผํ‹ฐ ์ด๋ฆ„ ์‚ฌ์šฉ
var book = {};
book.title = "JS์ฑ…";

#2. ๋Œ€๊ด„ํ˜ธ ์‚ฌ์šฉ : obj["abc"]
var book = {};
book[title] = "JS์ฑ…";

#1. abc ๋ณ€์ˆ˜ ์ด๋ฆ„ ์ž‘์„ฑ : obj[abc]
var book = {title : "JS์ฑ…"};
var varName = "title";
book[varName] = "HTML";

 

2-3) Method

  • ๋ฉ”์†Œ๋“œ๋ž€ ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋™์ž‘์ด๋ฉฐ ๊ฐ์ฒด ๋‚ด์˜ ํ•จ์ˆ˜๋ฅผ ๋ฉ”์†Œ๋“œ๋ผ ์นญํ•œ๋‹ค.
  • ๋ฉ”์†Œ๋“œ์™€ ํ•จ์ˆ˜์˜ ์ฐจ์ด์  : ๋ฉ”์†Œ๋“œ๋Š” ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋™์ž‘์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์†Œ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด์„œ ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋ฉฐ ๊ทธ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฃผ์ฒด๋Š” ๊ฐ์ฒด์ด๋‹ค.

 

2-4) ๊ฐ์ฒด ๊ตฌ์„ฑ

  • JavaScript ๋‚ด์žฅ ๊ฐ์ฒด ( built-in object) : MDN_ํ‘œ์ค€ ๋‚ด์žฅ ๊ฐ์ฒด > 
  • ๋ธŒ๋ผ์šฐ์ € ๋‚ด์žฅ ๊ฐ์ฒด ( native object )
  • ์‚ฌ์šฉ์ž ์ •์˜ ๊ฐ์ฒด ( host object )

 


3. Function

  • ํŠน์ • ๊ธฐ๋Šฅ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ ๋ฌถ์Œ
  • first-class function : ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” function๋„ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ฒ˜๋Ÿผ ๋ณ€์ˆ˜์— ํ• ๋‹น์ด ๊ฐ€๋Šฅํ•˜๊ณ , ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌ์ด ๋˜๊ณ , ํ•จ์ˆ˜์˜ returnํƒ€์ž…์œผ๋กœ function์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ํ•จ์ˆ˜ ํ˜•ํƒœ

  • ํ•จ์ˆ˜๋Š” (function ํ‚ค์›Œ๋“œ, ํ•จ์ˆ˜ ์ด๋ฆ„, parameter, ํ•จ์ˆ˜ body)๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.
  • ํ•จ์ˆ˜์˜ ์ด๋ฆ„์€ ์‹œ๋งจํ‹ฑ์„ ๋ถ€์—ฌํ•˜์—ฌ ์ž‘๋ช…ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๊ณ , ์ด๋ฆ„์— ๋‘ ๊ฐœ ์ด์ƒ์˜ ๋‹จ์–ด๋ฅผ ์‚ฌ์šฉํ•  ๋• CamelCaseํ˜•ํƒœ๋กœ ์ž‘๋ช…ํ•œ๋‹ค.
#1
function book(){
    //code
}

#2
var point = function(one, two){
    //code
}

ํ•จ์ˆ˜ ์ƒ์„ฑ

๋‹ค๋ฅธ ๋ชจ๋“  object๋“ค์ฒ˜๋Ÿผ new์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ function ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

var adder = new Function('a', 'b', 'return a+b');

adder(2, 6); //8