ํฐ์คํ ๋ฆฌ ๋ทฐ
2.1 classes ์ด์ prototype
๋๋์ด๋ฐ๐พ 2018. 12. 3. 17:45๊ฐ์ฒด์งํฅ์ธ์ด๋ฅผ ๋ฐฐ์ธ ๋ ํญ์ ๋์ค๋ ํค์๋ ์ค ํ๋๊ฐ class ์ ๋๋ค. ์ ๋ Java์ C++์ ๋ฐฐ์ธ ๋ ์ ํ๊ฒ ๋์๋๋ฐ ES6์์ class์ ์ฌ์ฉ์ด ๊ฐ๋ฅํด์ก์ต๋๋ค. ํ์ง๋ง ์ฌ๊ธฐ์ ์ง๊ณ ๋์ด๊ฐ์ผํ ๊ฒ์ด ์์ต๋๋ค. ํ๋กํ ํ์ ์ ๊ดํ ๊ฐ๋ ์ธ๋ฐ์
MDN์ Class์ ๊ดํ ๊ธ์ ์ด๋ฐ ๋ง์ด ๋์ต๋๋ค.
JavaScript class๋ ECMAScript 6์ ํตํด ์๊ฐ๋์์ผ๋ฉฐ, ๊ธฐ์กด prototype ๊ธฐ๋ฐ์ ์์ ๋ณด๋ค ๋ช ๋ฃํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค. Class ๋ฌธ๋ฒ์ ์๋ก์ด ๊ฐ์ฒด์งํฅ ์์ ๋ชจ๋ธ์ ์ ๊ณตํ๋ ๊ฒ์ ์๋๋๋ค. JavaScript class๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์์์ ๋ค๋ฃจ๋๋ฐ ์์ด ํจ์ฌ ๋ ๋จ์ํ๊ณ ๋ช ํํ ๋ฌธ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
javascript ๋ ํํ ๋กํ์ ๊ธฐ๋ฐ์ ์ธ์ด์ด๋ค.
es6์์ ์ง์ํ๋ class๋ ๊ธฐ๋ณธ ๊ฐ๋ ์ ํ๋กํ ํ์ ์ ๋ฐ๋ผ๊ฐ๋ class ํค์๋๋ฅผ ์ง์ํ์ฌ ๋ง์น class ๊ธฐ๋ฐ์ ๊ฐ์ฒด์งํฅ ์ธ์ด์ธ ๊ฒ์ฒ๋ผ ๋ณด์ฌ์ง๋ ๊ฒ์ด์ฃ . ์๋ฌด๋๋ ์ด ๋ฐฉ๋ฒ์ด ๋ ๊ฐ๋ ์ฑ๋ ์ข๊ณ ๋ค๋ฅธ ๊ฐ์ฒด์งํฅ ์ธ์ด๋ค์ด ๋ง์ด ํํ๋ ๋ฐฉ๋ฒ์ด๋ผ ๋ฐ๋ผ๊ฐ๋ ๊ฒ์ด ์๋๊น ์ถ์ต๋๋ค. ํ๋กํ ํ์ ์ ๋ํ ๊ฐ๋จํ ์ค๋ช ์ ๋ณด์๋ฉด
JavaScript์์ ๊ฑฐ์ ๋ชจ๋ ๊ฐ์ฒด๋ Object
์ ์ธ์คํด์ค์
๋๋ค. ์ผ๋ฐ์ ์ธ ๊ฐ์ฒด๋ Object.prototype
์์ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ์์๋ฐ์ผ๋ฉฐ, ๊ทธ ์ค ์ผ๋ถ๋ (์ค๋ฒ๋ผ์ด๋ ๋ฑ์ผ๋ก ์ธํด) ์จ๊ฒจ์ง ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋, ์๋์ ์ผ๋ก Object
๋ฅผ ์์ฑํ ๋ (Object.create(null)
์ฒ๋ผ) ์ด๋ฅผ ํผํ ์๋ ์๊ณ , Object.setPrototypeOf
๋ฑ์ ํตํด ๋์ค์ ๋ฌดํจํํ ์๋ ์์ต๋๋ค.
Object
ํ๋กํ ํ์
์ ๊ฐํ๋ ๋ณ๊ฒฝ์ ํ๋กํ ํ์
์ฒด์ธ์ ํตํด, ๋ ์๋์ชฝ ์ฒด์ธ์์ ๋ฎ์ด ์ด ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด ๋ชจ๋ ๊ฐ์ฒด์์ ๊ด์ธกํ ์ ์์ต๋๋ค. ์ด๋ ๊ฐ์ฒด๋ฅผ ํ์ฅํ๊ฑฐ๋ ํ๋์ ๋ฐ๊ฟ ์ ์๋ ๋งค์ฐ ๊ฐ๋ ฅํ๋ฉด์๋ ์ํํ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
์๋ javascript ์ ์ ์์ ๊ด๋ จ๋ ๋ถ๋ถ์ด๋ผ ๊น์ด์๊ฒ ๋ค๋ฃจ์ง ๋ชปํ ๊ฒ ๊ฐ์ต๋๋ค. ํ๋กํ ํ์ ์ ๋ํ ๊ฐ๋จํ ์๋ฅผ ๋ณด๊ณ ๋ค์ ํฌ์คํ ๋ถํฐ class์ ๊ดํ ์ด์ผ๊ธฐ๋ฅผ ํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
1 2 3 4 5 6 7 8 9 10 | Object.prototype.compare = function(o) { let ok = Object.keys(this); return typeof o === "object" && ok.length === Object.keys(o).length ? ok.every(k => this[k] === o[k]) : false; } let obj1 = {a:1,b:2,c:3}, obj2 = {c:3,a:1,b:2}; console.log(obj1.compare(obj2)) //result : true console.log(obj1===obj2) //result : false | cs |
2๊ฐ์ ๊ฐ์ฒด๋ฅผ ๋น๊ตํ๊ธฐ ์ํด ๊ฐ์ฒด์ ๋ํ compare ํจ์๋ฅผ ๋ง๋ ์์์ ๋๋ค. Object ์๋ฃํ์ผ ๋ ๋ง์น ๋ด์ฅํจ์์ฒ๋ผ ๋ชจ๋ ์ ์ฉํ ์ ์์ต๋๋ค. ๋ ๊ฐ์ ๊ฐ์ฒด๊ฐ ์์๋ง ๋ค๋ฅธ๋ฐ ๋น๊ต๊ตฌ๋ฌธ์ ์ฐ๋ฉด false ๊ฐ์ ์ถ๋ ฅํ๊ฒ ๋ฉ๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Object ์๋ฃํ์ ๋น๊ต์ฐ์ฐ์ ์ ์ฉํด์ ์ ํํ ๊ฐ์ฒด๋น๊ต๊ฐ ๊ฐ๋ฅํด์ง๋๋ค.
'javascript > ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
3 enhanced object literals (0) | 2018.12.13 |
---|---|
2.2 class์ ๊ธฐ๋ณธ ์ ์ธ (0) | 2018.12.05 |
1.3 ํ์ดํ ํจ์์์์ arguments (0) | 2018.12.03 |
1.2 ํ์ดํํจ์์์์ this (2) | 2018.11.29 |
1.1 ํ์ดํํจ์์ ๊ธฐ๋ณธ ์ ์ธ (0) | 2018.11.28 |
- Total
- Today
- Yesterday
- ๋น๋๊ธฐ ์์ฒญ
- ๊ธฐ์์ฒญAPI
- sequelize
- NestJS
- Promise bulk
- @nestjs/config
- nestjs doc
- nestjs directory
- ์๊ณ ๋ฆฌ์ฆ
- JavaScript
- docker mysql
- DeferredResult
- nestjs module
- Promise error
- backend-framework
- android
- node.js
- Request_Limit_Exceeded
- nestjs/cli
- typeorm
- nestjs configService
- nestjs config
- Spring Async
- nestjs project
- foreignkey
- typeorm ์ฐ๊ฒฐ
- node.js backend
- ํ๋ก๊ทธ๋๋จธ์ค
- nestjs typeorm
- Spring
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |