Javascript Patterns(2011)
2017-10-31
์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋ฉ ๊ธฐ๋ฒ๊ณผ ํต์ฌ ํจํด(2011) ์ฑ ์ ์ฝ๊ณ ์ ๋ฆฌํ ๊ธ์ ๋๋ค.
// Bad
a = new Object()
// Good
a = {}
Object
, Array
๊ฐ์ ์์ฑ์๋ฅผ ์ฌ์ฉํ๊ธฐ ๋ณด๋ค๋ ๋ฆฌํฐ๋ด์ ํตํด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์ข๋ค.Object.prototype
์ ํ๋กํผํฐ์ ๋ฉ์๋๋ฅผ ๊ฐ์ง๋ค.a = {}
a.name = 'Benji' // ํ๋กํผํฐ ์ถ๊ฐ
a.getName = function() { // ๋ฉ์๋ ์ถ๊ฐ
return a.name
}
a.name = 'Fido' // ํ๋กํผํฐ ์์
delete a.name // ํ๋กํผํฐ ์ญ์
let Person = function(name) {
this.name = name
this.say = function() {
return "I am " + this.name
}
}
let person = new Person('adam')
Person
์ ์ฌ์ค ํจ์์ด์, ๊ฐ์ฒด์ด๋ค.new
๋ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ์ฐ์ฐ์์ด๋ค.
new
๋ this
ํฌ์ธํฐ๋ฅผ ๋ง๋ค๊ณ ์ด๋ ์๋ก ๋ง๋ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋๋ค.let person = Person('adam')
๊ณผ ๊ฐ์ด ๊ทธ๋ฅ ํจ์๋ง ํธ์ถํ๋ค๋ฉด ํจ์๊ฐ ์คํ๋๊ธฐ๋ง ํ ๋ฟ, this
ํฌ์ธํฐ๊ฐ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค์ง ๋ชปํ๋ค. ๊ทธ๋์ Person
ํจ์์ this.name = name
์ด ๋ถ๋ถ์ this
๋ ์ ์ญ์ ๊ฐ๋ฆฌํค๊ฒ ๋๊ณ name
๊ณผ say()
๋ ์ ์ญ ๋ณ์, ์ ์ญ ๋ฉ์๋๋ก ์ธํ
์ด ๋๋ค. ๋งค์ฐ ์ํํ ์ํฉ์ด ๋๋ ์
์ด๋ค.new
๋ฅผ ์ฐ๋ฉด ์์ ์ฝ๋์ ์ด๋ฉด์ ์งํ๋๋ ๊ฒ์ ์๋ ์ฃผ์๊ณผ ๊ฐ๋ค.let Person = function(name) {
// let this = {}
this.name = name
this.say = function() {
return "I am " + this.name
}
// return this
}
let person = new Person('adam')
์์ ๋ฐฉ๋ฒ์ผ๋ก ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ๋ ์์ง๋ง, ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋๋ง๋ค say() ๋ผ๋ ํจ์๋ฅผ ๊ณ์ ๋ง๋ค๊ฒ๋๋ค. ์ฆ, n๊ฐ์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๋ฉด n๊ฐ์ say()๊ฐ ๋ง๋ค์ด์ง๋ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๊ธฐ๋ณด๋ค Person์ ํ๋กํ ํ์ ์ say() ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๋ฉด ํ๋ฒ๋ง ์ ์ํ๊ณ ๋ ๋ชจ๋ ๊ฐ์ฒด๊ฐ ์ฐธ์กฐํ ์ ์๋ค.
Person.prototype.say = function() {
return "I am " + this.name
}
new Waffle()
๋ก ์๋ก์ด Waffle๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ฒ์ด๋ค.function Waffle() {
if (!(this isinstanceof Waffle)) {
return new Waffle()
}
this.tastes = "yummy!"
}
Waffle.prototype.wantAnother = true
๋ฐฐ์ด๋ ๊ฐ์ฒด์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ด์ฅ ์์ฑ์ Array()๋ฅผ ์ฌ์ฉํ๊ธฐ๋ณด๋ค let a = []
์ ๊ฐ์ด ์์ฑํด์ฃผ๋ ๊ฒ์ด ์ข๋ค. ์๋ ๋๊ฐ์ ์ฝ๋๋ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ์๋ํ๋ค.
let a = [3]
// a.length = 1
// a[0] = 3
let a = new Array(3)
// a.length = 3
// typeof a[0] = "undefined"
์์ ์ฝ๋๋ 3์ด๋ผ๋ ํ๋์ ์ซ์๋ฅผ ๊ฐ์ง ๋ฐฐ์ด์ด ๋๊ณ , ์๋๋ 3๊ฐ์ ์๋ฆฌ๋ฅผ ๊ฐ์ง ๋น ๋ฐฐ์ด์ ๋ง๋ค๊ฒ ๋๋ค.
๋ฐฐ์ด์ isArray()
๋ก ํ๋ณํ๋ค. ๋ฐฐ์ด๋ ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ typeof
๋ก ํ๋ณํ ๊ฒฝ์ฐ, object
๊ฐ ๋์ค๊ธฐ ๋๋ฌธ์ด๋ค.
JSON(JavaScript Object Notation)์ ๊ฐ์ฒด ๋ฆฌํฐ๋ด ํ๊ธฐ๋ฒ์ผ๋ก ์ฐ์ฌ์ง ๋ฐ์ดํฐ ์ ์ก ํ์์ด๋ค.
JSON.stringify(x)
- JSON์ ํ๋กํผํฐ๋ช
์ด ํญ์ ๋ฌธ์์ด์ด์ด์ผ ํ๋ค. ๊ทธ๋์ stringify๋ก ๋ชจ๋ ํค๊ฐ์ ๋ฌธ์์ด๋ก serializeํ๋ ๊ฒ ์์ ํ๋ค.JSON.parse(x)
- JSON ๋ฐ์ดํฐ๋ฅผ ์๋ฒ์์ ๋์ ธ์ค ๋ ์๋ฒ์์ stringify๋ฅผ ํ๊ณ ํ๋ฐํธ์์ ํ์ฑํด์ ์ฐ๋ฉด ์ฉ๋์ ์ ๊ฒ ์ฌ์ฉํ ์ ์๋ค.