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๋ฅผ ํ๊ณ ํ๋ฐํธ์์ ํ์ฑํด์ ์ฐ๋ฉด ์ฉ๋์ ์ ๊ฒ ์ฌ์ฉํ ์ ์๋ค.