๊ตญ๋น์ง์ D+44
- javaScript Class -
javaScript Class
• ํด๋์ค์ ๊ฐ๋
- ES5์์๋ ํด๋์ค๊ฐ ์์์ผ๋ฉฐ ๊ฐ์ฒดํ, ํด๋ก์ , ์์ฑ์, ํ๋กํ ํ์
๋ฑ์ ์ด์ฉํด ํด๋์ค์ ์ ์ฌํ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ์๋ค.
- ES5์ ๋ค๋ฅด๊ฒ ES6์์๋ ์๋ฒฝํ ๊ฐ์ฒด์งํฅ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๊ฒ์ ์๋์ง๋ง ํด๋์ค ๋ฌธ๋ฒ์ ์ง์ ์ ์ผ๋ก ์ง์ํ๋ค.
- object ๋ฐ์ดํฐ ํ์
์ผ๋ก ๋ด๋ถ์ ์ผ๋ก class๋ ๊ฒฐ๊ตญ object ํ๊ณผ ๊ฐ๋ค.
• ํด๋์ค ์ ์ธ
class Student {
constructor(name, number, score) {
this.name = name;
this.number = number;
this.score = score;
}
getTotal() {
return this.score.kor + this.score.eng + this.score.math;
}
getAvg() {
return (this.getTotal() / 3).toFixed(2);
}
}
const s1 = new Student("ํ๊ธธ๋", 1, { kor: 80, eng: 50, math: 78 });
console.log(s1.getTotal());
console.log(s1.getAvg());
- ํด๋์ค๋ ๋ณ๋์ ์์ฑ์(constructor)๋ฅผ ์ ๊ณตํ๋ฉฐ ํด๋์ค์ ๋ณ์๋ฅผ ์ถ๊ฐ ๋ฐ ์ด๊ธฐํ ํ ์ ์๋ค.
- ์์ฑ์์์ ๊ฐ์ ์ถ๊ฐ ํ๊ฑฐ๋ ์ด๊ธฐํ๋ฅผ ํ๊ณ ์ถ์ ๋, this๋ฅผ ํตํด ๋ณ์๋ฅผ ๋ฑ๋กํ ์ ์๋ค.
- ์์ฑ์์ ๊ฐ์ฒด๋ฅผ ์ถ๊ฐํ ๊ฒฝ์ฐ ์์ ๋ณต์ฌ์ ์ฃผ์ํ๋๋ก ํ๋ค. (์ฐธ์กฐ๊ฐ๋ง ๋ณต์ฌ)
- ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ ์ถ์๋ new๋ฅผ ์ฌ์ฉํด ์ฌ๋ฌ ๊ฐ์ ์ธ์คํด์ค๋ฅผ ์์ฑํ ์๋ ์๋ค.
• ํด๋์ค ์์
class Rectangle {
constructor(_width, _height) {
this.width = _width;
this.heigth = _height;
}
}
class Square extends Rectangle {
constructor(length) {
super(length, length);
}
}
- JS์์๋ ์์ ๊ตฌํ์ด ๊ฐ๋ฅํ๋ฐ ์ด๋ ๊ธฐ์กด์ ์๋ฐ์์๋ ์ฌํ์ฉ๊ณผ ๊ณตํต๋ ๊ท์ฝ์ ์งํค๊ธฐ ์ํ ๋ชฉ์ ์ผ๋ก ์์์ ์ฌ์ฉํด ์๋ค๋ฉด JS์์์ ์์์ ์ฌํ์ฉ์ธก๋ฉด์ ํฌ์ปค์ค๋ฅผ ๋๋ค.
- ์๋ฐ์์์ ๊ฐ๋
๊ณผ ๋น์ทํ๋ฐ extends๋ฅผ ํตํด ์์์ ๊ตฌํํ ์ ์์ผ๋ฉฐ, ์์๋ฐ์ ๋ถ๋ชจ๊ฐ์ฒด์ ๊ฐ์ ๋๊ฒจ์ค๋ super()๋ฅผ ์ฌ์ฉํด ๊ฐ์ ๋๊ฒจ์ฃผ๋ ๋ฐฉ์๊น์ง ์ผ์นํ๋ค.
- super๋ฅผ ์ฌ์ฉํ ๋์๋ ๋ถ๋ชจ๊ฐ์ฒด๊ฐ ๋จผ์ ์ด๊ธฐํ๊ฐ ๋์ด์ผํ๊ธฐ ๋๋ฌธ์ ํญ์ ์์ ํด๋์ค ์์ฑ์์์ ๊ฐ์ฅ ์์ ์ฝ๋ฉ๋์ด์ผ ํ๋ค.
• ์ ๊ทผ์ ์ด
class Rectangle {
constructor(_width, _height) {
this.width = _width;
this.heigth = _height;
}
}
const r1 = new Rectangle(5, 4);
r1.width = 4; // ์๋ชป๋ ์ ๊ทผ์ ๋ง์์ผ ํ๋ค
ํ์ฌ๊น์ง ๋ฐฐ์ด ํด๋์ค๋ ํ๊ฐ์ง ๋ฌธ์ ์ ์ด ์๋๋ฐ ๋ด๊ฐ ์๋ชป๋ ๊ฒฝ๋ก๋ก ๊ฐ์ ๋ณ๊ฒฝํ์์๋ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ค๋ ๊ฒ์ด๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์๋ชป๋ ๊ฒฝ๋ก๋ก ์ ๊ทผํด ๊ฐ์ ๋ํ ์ ๋ณด๋ฅผ ํจ๋ถ๋ฌ ๋ณ๊ฒฝ๋์ง ์๋๋ก ์ ๊ทผ์ ์ด์๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
class Rectangle {
// private ์ ๋ฐฉ์ ์ธ
#width;
#height;
constructor(_width, _height) {
// ๋ชจ๋ ์์ฑ์ #์ ๋ถ์ฌ์ ์ฌ์ฉํด ์ค๋ค
this.#width = _width;
this.#heigth = _height;
}
}
const r1 = new Rectangle(5, 4);
r1.width = 4; // ์ ๊ทผ ๋ถ๊ฐ
ํด๋์ค์ ์์ฑ์ด๋ ๋ฉ์๋๋ฅผ ์ธ๋ถ์์ ์ ๊ทผ ํ ์ ์๋๋ก ํ๋ private๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก #์ ๋ถ์ฌ์ ์ ๋ฐฉ์ ์ธ์ ํ ๋ค์ ๋ชจ๋ ์์ฑ์ #์ ๋ถ์ฌ์ฃผ๋ฉด ๋๋ค.
์ด๋ ์ฃผ์ํด์ผํ ์ ์ #์ ๋ถ์ฌ์ ๋ณ์๊ฐ private๊ฐ ๋์๋ค๊ณ ์๊ฐํ๋ ๊ฒ์ด ์๋๋ผ ๋ณ์๋ช
๊ทธ ์์ฒด๋ก ์๊ฐํด์ฃผ์ด์ผ ํ๋ค.
• get, set
class Rectangle {
constructor(_width, _height) {
this.width = _width;
this.heigth = _height;
}
}
const r1 = new Rectangle(5, 4);
r1.width = 4; // ์๋ชป๋ ์ ๊ทผ์ ๋ง์์ผ ํ๋ค
์ ๊ทผ์ ํ์๋ฅผ ์ฌ์ฉํด ์ฃผ์๋ค๋ฉด ์ฐ๋ฆฌ๋ ๋ณ์์ ๊ฐ์ ๋ฐ๊ณ ๋ณ๊ฒฝํ ์ ์๋ ๋ฉ์๋๋ฅผ ๋ง๋ค์ด์ฃผ์ด์ผ ํ๋ค.
getter,setter๋ฅผ ์ฌ์ฉํด ์ฃผ์ด๋ ๋์ง๋ง ES6 ๋ฐฉ์์ผ๋ก ๊ฐ์ getํ๊ณ setํ ์ ์๋ ๋ฐฉ๋ฒ๋ ์๋ค.
// ์ฌ์ฉ๋ฐฉ๋ฒ - get๊ณผ set์ ๋์ด์ฐ๋ ๊ฒ ๋ง๊ณ ์์ฑํ๋ ๋ฐฉ์์ ์ผ์นํ๋ค.
get width() { return this.#width; }
set width(_width) { this.#width = _width; }
// ์ฃผ์์ฌํญ
get width() { ... } // o
get blahblah() { ... } // x
์ด๋ฐฉ๋ฒ์ ์ฐ๋ ์ ์ฅ์์ ํจ์๊ฐ ์๋ ๋ง์น ๋ณ์๊ฐ์ ๋ฐ๋ก ๋ฐ๊ฟ์ฃผ๋ ๋๋์ด๋ผ ํธํ๋ผ์ง๋ง get,set์ ๋ง๋ค์ด ์ค๋ ์ด๋ฆ์ ์ผ๊ด์ฑ์์ด ํ๋ฉด ๊ดด๋ํจ์ด ๋ฐ์๋ ์ ์๊ธฐ ๋๋ฌธ์ ๊ผญ ์์ฑ์ ์ด๋ฆ์ผ๋ก ์ค์ ํด์ฃผ๋ ๊ฒ์ด ๊ด๋ก์ด๋ค.
• static
- ์ ์ญํ ์ง์ญ๋ณ์ ๋๋ ์ ์ญํ ์ง์ญ ๋ฉ์๋๋ฅผ ๋ง๋ค๊ธฐ ์ํ ํค์๋
- static์ ์ ์ญ์์ญ์ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ static์
์ฅ์์ class๋ ์์์ผ๋ฟ ๊ทธ ์ธ์๋ ์๋ฏธ๊ฐ ์๋ค.
- static ๋ณ์, static ๋ฉ์๋๋ ํด๋์ค๊ฐ ์ธ์คํด์คํ ๋๋์ง ์ฌ๋ถ์ ์๊ด์์ด ์ ์ญ์์ญ์ ํ๋ ์กด์ฌํ๋ ๊ฒ์ด๋ค.
- this๋ ์๋ฏธ๊ฐ ์๋ค.
- ์ ๊ทผ ์ ์ด๊ฐ ๊ฐ๋ฅํ๋ค.
class Persion
{
static #count = 0;
constructor()
{
}
static getCount()
{
return Persion.#count;
}
static setCount(_count)
{
Persion.#count = _count;
}
}
๋ง์ฝ ์ธ์คํด์ค๋ฅผ ๋ง๋ค๋๋ง๋ค ๊ฐ์๋ฅผ ์ฌ๋ฆฌ๋ count๋ฅผ class์ ๋ฃ์ด์ค๋ค๊ณ ํ๋ฉด count๋ณ์์์ static์ ๋ถ์ฌ์ ์ฌ์ฉํด์ฃผ๋ฉด ๋๋ค.
์ด๋ count๋ class Persion์ ์์์ด์ง Persion์ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์ this๋ฅผ ์ฌ์ฉํด ์ค์ ์๋ค.
๊ทธ๋์ count๋ฅผ ์ฌ์ฉํด์ค ๋ Persion.count๋ก ๋ถ๋ฌ์ฌ ์ ์๋ค.
์ด๋ count์ ๊ด๋ จ๋ ๋ฉ์๋๋ฅผ ๋ง๋ค์ด์ค ๊ฒฝ์ฐ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฉ์๋ ์์ static์ ๋ถ์ฌ์ฃผ์ด์ผ ํ๋ค.
'์๋ > ๊ตญ๋น์ง์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[D+45] CSS : box-sizing, position, flex (0) | 2022.11.23 |
---|---|
[D+44] Front-end ๋ฏธ๋ํ๋ก์ ํธ 1์ผ์ฐจ : ์นํฐํธ ์ค์ ๋ฐ ๋ค๋น๊ฒ์ดํฐ ์ค์ (0) | 2022.11.22 |
[D+43] JS ์์ธ์ฒ๋ฆฌ, ์์ฑ์, ๊ฐ์ฒด์ ์์ฑ ๋ฐฉ๋ฒ (0) | 2022.11.21 |
[D+42] ๋ฌธ์๊ฐ์ฒด ์์ฑ, ์ด๋ฒคํธ ์ฒ๋ฆฌ (0) | 2022.11.18 |
[D+41] ์ด๋ฒคํธ์ ๋ฉ์์ง, sort์ ์๋ฆฌ (0) | 2022.11.17 |
๋๊ธ