์ง๋ฌธ์ ๋ฐฐ๊ฒฝ
์๋ฐ์คํฌ๋ฆฝํธ ECMAScript์ ํ์คํ ๋ฆฌ์ ํด๋์ค ๊ฐ๋ ์ ๋ํด ๊ณต๋ถํ๋ค๊ฐ ๋ฌธ๋, ES5์์๋ ์์ฑ์ ํจ์์ ํ๋กํ ํ์ ์ ํตํด ์ถฉ๋ถํ ๊ฐ์ฒด์งํฅ ์ธ์ด์ ์์์ ๊ตฌํํ ์ ์๋๋ฐ ์ ํด๋์ค ๊ฐ๋ ์ ์ถ๊ฐํ์๊น ๊ถ๊ธ์ฆ์ด ์๊ฒผ๋ค.
๊ถ๊ธ์ฆ์ ๋ํ ํด๋ต์ [๋ฌธ์ ์ ์ - ํด๊ฒฐ]์ ํ๋ก ์ดํด๋ณด์.
๋ฌธ์ ์ ์: ์ถ๊ฐ๋๊ธฐ ์ ์ ์ํฉ
์๋ฐ์คํฌ๋ฆฝํธ์ ํด๋์ค ๊ฐ๋ ์ด ES6(2015)์์ ์ถ๊ฐ๋ ์ด์ ๋ ์๋์ ๊ฐ๋ค.
1. ์ฐ๋ ์ฌ๋์ด ์ด๋ ต๋ค๋๋ฐ ์ด๋กํด
ES5๊น์ง๋ ํด๋์ค ์์ด๋ ์์ฑ์ ํจ์์ ํ๋กํ ํ์ ์ ํตํด ๊ฐ์ฒด์งํฅ ์ธ์ด์ ์์์ ๊ตฌํํ ์๋ ์์์ผ๋, ๊ธฐ์กด ์๋ฐ๋ C+๊ณผ ๊ฐ์ด ํด๋์ค ๊ธฐ๋ฐ์ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ต์ํ ํ๋ก๊ทธ๋๋จธ๋ค์๊ฒ๋ ํผ๋์ ์ฃผ์๋ค. ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด๋ ต๊ฒ ๋๋ผ๊ฒ ํ๋ ์ฅ๋ฒฝ๊ณผ๋ ๊ฐ์๋ค.
2. ์ฝ๋ ์ฐ๊ธฐ ๊ท์ฐฎ๊ณ ์ ์ง๋ณด์ ์ด๋ ค์
๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ์์ํ๊ณ ํ์ฅํ๊ธฐ ์ํ ๋ฉ์ปค๋์ฆ์ด ๋น๊ต์ ๋ณต์กํ๊ธฐ์, ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์ ์ง๋ณด์ํ๋ ๊ฒ์ด ์ด๋ ค์ ๋ค.
3. ์์๋ ์ด๋ ค์ด๋ฐ ์ค๋ฅ๋ ๋๋ค๊ณ
์๋ฐ์คํฌ๋ฆฝํธ์์ ํด๋์ค ๊ฐ๋
์ด ๋ฑ์ฅํ๊ธฐ ์ ์๋ ๊ฐ์ฒด ์์ฑ์ ์ํด ์์ฑ์ ํจ์์ ํ๋กํ ํ์
์ ์ฌ์ฉํด์ผ ํ๋ค. ์ด๋ ์ค๋ฅ๋ฅผ ๋ฐ์์ํฌ ๊ฐ๋ฅ์ฑ์ด ๋๊ณ , ์์์ ์ ๋๋ก ๋ค๋ฃจ๊ธฐ ์ด๋ ค์ ๋ค.
์ด์ ES6์์๋ ํด๋์ค ๊ธฐ๋ฐ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋งค์ฐ ํก์ฌํ ์๋ก์ด ๊ฐ์ฒด ์์ฑ ๋ฉ์ปค๋์ฆ์ ์ ์ํ๋ค.
๋ฌธ๋ฒ์ ์คํ (syntactic sugar)?
๊ทธ๋ ๋ค๊ณ ํด์ ํด๋์ค๊ฐ ํ์ฑ์ฒ๋ผ ๋ฑ์ฅํด ๊ธฐ์กด์ ํ๋กํ ํ์ ๊ธฐ๋ฐ์ ๊ฐ์ฒด์งํฅ ๋ชจ๋ธ์ ์ ๋ฆฌ ๊ฐ๋ผ! ํ๋ฉฐ ์๋กญ๊ฒ ํด๋์ค ๊ธฐ๋ฐ ๊ฐ์ฒด์งํฅ ๋ชจ๋ธ์ ์ ๊ณตํ ๊ฒ์ ์๋๋ค. ์ฌ์ค ํด๋์ค๋ ์ผ์ข ์ ํจ์๋ค.
๊ธฐ์กด ํ๋กํ ํ์ ๊ธฐ๋ฐ ํจํด์ ํด๋์ค ๊ธฐ๋ฐ ํจํด์ฒ๋ผ ์ฌ์ฉํ ์ ์๋๋ก ํ๋, ์ผ์ข ์ '๋ฌธ๋ฒ์ ์คํ' ๊ฐ์ ์กฐ๋ฏธ๋ฃ ์ญํ ์ธ ์ ์ด๋ค. ํ์ง๋ง ์ด ์ค๋ช ์ ์ฌ๋ฌ ์๊ฒฌ์ด ์๋๋ฐ, ํน์๋ ํด๋์ค๋ฅผ ๋จ์ํ ๋ฌธ๋ฒ์ ์คํ์ด๋ผ๊ธฐ๋ณด๋ค '์๋ก์ด ๊ฐ์ฒด ์์ฑ์ ๋ฉ์ปค๋์ฆ'์ด๋ผ๊ณ ๋งํ๋ค. ๊ทธ๋ฅ ์ฐธ๊ณ ์ ๋๋ง ํด๋์.
๊ธฐ์กด ์์ฑ์ ํจ์๋ ๋ค๋ฅธ ์
ํด๋์ค์ ์์ฑ์ ํจ์ ๋ชจ๋ ํ๋กํ ํ์ ๊ธฐ๋ฐ์ ์ธ์คํด์ค๋ฅผ ์์ฑํ์ง๋ง, (๋น์ฐํ) ์ ํํ ๋์ผํ๊ฒ ๋์ํ์ง๋ ์๋๋ค. ๋ช ๊ฐ์ง ์ฐจ์ด๊ฐ ์๋๋ฐ, ์์ฝํ์๋ฉด ํด๋์ค๊ฐ ์์ฑ์ ํจ์๋ณด๋ค ์๊ฒฉํ๊ณ , ์์ฑ์ ํจ์์์๋ ์ ๊ณตํ์ง ์๋ ์ถ๊ฐ ๊ธฐ๋ฅ๋ ์ ๊ณตํ๋ค.
์ฐจ์ด์ ์ ์๋์ ๊ฐ๋ค.
1. new ์ฐ์ฐ์
- ์์ฑ์ ํจ์: new ์ฐ์ฐ์ ์์ด ํธ์ถํ๋ฉด ์ผ๋ฐ ํจ์๋ก์ ํธ์ถ๋๋ค.
- ํด๋์ค: new ์ฐ์ฐ์ ์์ด ํธ์ถํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. (๋์ ๊ฒ ์๋)
2. extends, super
- ์์ฑ์ ํจ์: ์์์ ์ง์ํ๋ extends์ super ํค์๋๋ฅผ ์ง์ํ์ง ์๋๋ค.
- ํด๋์ค: ์์์ ์ง์ํ๋ extends์ super ํค์๋๋ฅผ ์ง์ํ๋ค.
3. ํธ์ด์คํ
- ์์ฑ์ ํจ์: ์ ์ธ๋ฌธ์ผ๋ก ์ ์๋ ์์ฑ์ ํจ์๋ ํจ์ ํธ์ด์คํ
์ด, ํํ์์ผ๋ก ์ ์๋ ์์ฑ์ ํจ์๋ ๋ณ์ ํธ์ด์คํ
์ด ๋ฐ์ํ๋ค.
- ํด๋์ค: ํธ์ด์คํ
์ด ๋ฐ์ํ์ง ์๋ ๊ฒ์ฒ๋ผ ๋์ํ๋ค.
4. strict mode
- ์์ฑ์ ํจ์: ์๋ฌต์ ์ผ๋ก strict mode๊ฐ ์ง์๋์ง ์๋๋ค.
- ํด๋์ค: ํด๋์ค ๋ด์ ๋ชจ๋ ์ฝ๋๋ ์๋ฌต์ ์ผ๋ก strict mode๊ฐ ์ง์ ๋ฐ ์คํ๋๋ฉฐ, ํด์ ํ ์ ์๋ค.
์์ฑ์ ํจ์์ ํด๋์ค๋ ํ๋กํ ํ์ ๊ธฐ๋ฐ์ ๊ฐ์ฒด์งํฅ์ ๊ตฌํํ๋ค๋ ์ ์์๋ ๋งค์ฐ ์ ์ฌํ์ง๋ง, ํด๋์ค๋ ์์ฑ์ ํจ์ ๊ธฐ๋ฐ์ ๊ฐ์ฒด ์์ฑ ๋ฐฉ์๋ณด๋ค ๊ฒฌ๊ณ ํ๊ณ ๋ช ๋ฃํ ํธ์ด๋ค.
ํนํ 3. extends์ super ํค์๋๋ ๊ธฐ์กด์ ์ด๋ ค์ ๋ ์์ ๊ด๊ณ ๊ตฌํ์ ๋์ฑ ๊ฐ๊ฒฐํ๊ณ ๋ ๋ช ๋ฃํ๊ฒ ํด ์ค๋ค.
ํด๊ฒฐ: ES6์์ ํด๋์ค์ ์ถ๊ฐ์ ํจ๊ณผ
ES6์์ ํด๋์ค๋ฅผ ๋์
ํ์ฌ ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๋์ฑ ๊ฐํธํ๊ฒ ๋ง๋ค์๋ค๊ณ ํ๋๋ฐ, ์๋์ ์ฝ๋๋ก ๋จผ์ ๊ทธ ํจ๊ณผ๋ฅผ ์ฒด๊ฐํด ๋ณด์.
ํด๋์ค ์ฌ์ฉ ์
// ES5 ์์ฑ์ ํจ์
function Person(name) {
this.name = name;
}
// ํ๋กํ ํ์
๋ฉ์๋
Person.prototype.sayHello = function() {
console.log(`Hello, my name is ${this.name}`);
};
// ์ธ์คํด์ค ์์ฑ
const person = new Person('Ella');
// ํ๋กํ ํ์
๋ฉ์๋ ํธ์ถ
person.sayHello(); // "Hello, my name is Ella"
ํด๋์ค ์ฌ์ฉ ํ
// ES6 ํด๋์ค ์ ์ธ๋ฌธ
class Person {
// ์์ฑ์
constructor(name) {
// ์ธ์คํด์ค ์์ฑ ๋ฐ ์ด๊ธฐํ
this.name = name;
}
// ํ๋กํ ํ์
๋ฉ์๋
sayHello() {
console.log(`Hello, my name is ${this.name}`);
}
}
// ์ธ์คํด์ค ์์ฑ
const person = new Person('Ella');
// ํ๋กํ ํ์
๋ฉ์๋ ํธ์ถ
person.sayHello(); // "Hello, my name is Ella"
์ฑ <๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive>์์๋ ์ฐจ์ด์ ์ ํ๋์ ๋ณด๊ธฐ ์ฝ๊ฒ ์ค๋ช ํด ๋์ด ๊ฐ์ ธ์๋ค.
์์ฝํ์๋ฉด, ์ด๋ฐ ๊ฒ ์ข์์ก๋ค
ํด๋์ค ์ฌ์ฉ์ผ๋ก ์ธํ ํจ๊ณผ๋ฅผ ๋ค์ ํ๋ฒ ๊ธ๋ก ์์ฝํด ๋ณด์๋ฉด, ์๋์ ๊ฐ๋ค.
1. ๊ฐ๋ ์ฑ ๊ฐ์
ํด๋์ค๋ฅผ ์ฌ์ฉํด ์ฝ๋๊ฐ ๋ ์ฝ๊ธฐ ์ฝ๊ณ ์ดํดํ๊ธฐ ์ฌ์์ก๋ค. ๋ฑ ๋ด๋ ๊ฐ์ฒด ์์ฑ๊ณผ ๋ฉ์๋ ์ ์๊ฐ ๋ ๊ฐ๊ฒฐํด์ก๋ค.
2. ์์ ์ง์
์์์ ๋ ์ฝ๊ฒ ๋ค๋ฃฐ ์ ์๊ฒ ๋์๋ค. 'extends'๋ฅผ ์ฌ์ฉํด ๋ค๋ฅธ ํด๋์ค๋ฅผ ํ์ฅํ ์ ์๊ณ , 'super'๋ฅผ ์ฌ์ฉํด ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋๋ฅผ ์์๋ฐ๊ณ ํธ์ถํ ์ ์๋ค.
3. ์ ์ ๋ฉ์๋
ํด๋์ค ๋ด๋ถ์ 'static'์ ์ฌ์ฉํด ์ ์ ๋ฉ์๋๋ฅผ ์ ์ํ ์ ์์ผ๋ฉฐ, ์ด๋ ํด๋์ค ๋ ๋ฒจ์์ ํธ์ถํ ์ ์๋ ์ ์ฉํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ์ฐธ๊ณ ๋ก ์ ์ ๋ฉ์๋(Static methods)๋ ํด๋์ค์ ์ธ์คํด์ค๊ฐ ์๋ ํด๋์ค ์์ฒด์ ์ํ๋ ๋ฉ์๋์ด๋ค. ๋ฐ๋ผ์ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ๋ฐ๋ก ์์ฑํ์ง ์์ผ๋ฉด์ ํธ์ถ์ด ๊ฐ๋ฅํ๊ณ , ํด๋์ค์ ์ํ๋ฅผ ์กฐ์ํ๊ฑฐ๋ ์กฐํํ๋ฉด์ ํด๋์ค ๋ด๋ถ์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๋ ๋ฐ์ ํ์ฉ๋ ์ ์๋ค.
๐ ๋ด์ฉ ์ฐธ์กฐ
- ์ฑ <๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive>
'๐ Language > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ ๊ณ ์ฐจํจ์์์๋ ์กฐ๊ฑด๋ฌธ๊ณผ ๋ฐ๋ณต๋ฌธ์ ์ ๊ฑฐํ ๊น? (0) | 2023.09.17 |
---|---|
์์๋๋ฉด ์ฌ๋ฏธ์๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ญ์ฌ (1) | 2023.09.10 |
์ด๋ฒคํธ ๋ฃจํ(Event Loop)์ ๋์ ์๋ฆฌ (0) | 2023.09.02 |
JavaScript ์์ ์๋ฃํ๊ณผ ์ฐธ์กฐ ์๋ฃํ์ ๋ํด ์ฝ๊ฒ ์ดํดํด ๋ณด์. (1) | 2023.03.02 |
JavaScript ๊ฐ์ฒด ๊ธฐ์ด ๊ฐ๋ - ๊ตฌ๋ถ, ์กฐํ, ๊ฐ์ฒด ๋ค๋ฃจ๊ธฐ (0) | 2023.03.01 |
๋๊ธ