Jieunny์ ๋ธ๋ก๊ทธ
S2) Unit 2. [JS] ํด๋์ค์ ์ธ์คํด์ค ๋ณธ๋ฌธ
๐ฃ ํด๋ก์ ๋ชจ๋ ํจํด
โ๏ธ ๋ฉ์๋ ํธ์ถ : ๊ฐ์ฒด.๋ฉ์๋()
โ๏ธ ํด๋ก์ ๋ฅผ ์ด์ฉํด ๋งค๋ฒ ์๋ก์ด ๊ฐ์ฒด ์์ฑํ๊ธฐ
function makeCounter() {
let value = 0;
return {
increase: function() {
value++;
},
decrease: function() {
value--;
},
getValue: function() {
return value;
}
}
}
let counter1 = makeCounter()
counter1.increase()
counter1.getValue() // 1
let counter2 = makeCounter()
counter2.decrease()
counter2.decrease()
counter2.getValue() // -2
โฐ ํด๋ก์ ๋ก counter ์์ฑํ๋ ํจ์๋ฅผ ๋ง๋ค์ด์, ๋งค๋ฒ ๊ฐ์ฒด๋ฅผ ์์ฑํ ํ์ ์์ด ๊ตฌํํ ์ ์๋ค.
๐ฃ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ
โ๏ธ ํ๋์ ๋ชจ๋ธ์ด ๋๋ ์ฒญ์ฌ์ง์ ๋ง๋ค๊ณ (class), ์ฒญ์ฌ์ง์ ๋ฐํ์ผ๋ก ํ ๊ฐ์ฒด๋ฅผ ๋ง๋๋(instance) ํ๋ก๊ทธ๋๋ฐ
โ๏ธ ๋ณ์ ํ์
'๊ฐ์ฒด'์ ์ฌ๊ธฐ์ ๋ฐฐ์ฐ๋ ํด๋์ค๋ฅผ ๋ฐํ์ผ๋ก ํ '์ธ์คํด์ค ๊ฐ์ฒด'(์ธ์คํด์ค) ๋ฅผ ์ ๊ตฌ๋ถํ์.
๐ฃ ์ธ์คํด์ค
โ๏ธ new ํค์๋๋ฅผ ํตํด ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ด๋ผ ์ ์๋ค.
let avante = new Car('hyundai', 'avante', 'black');
let mini = new Car('bmw', 'mini', 'white');
โฐ ์ธ์คํด์ค ์์ฑ ์ฆ์ ์์ฑ์ ํจ์๊ฐ ์คํ๋๋ฉฐ, ๋ณ์์ ํด๋์ค์ ์ค๊ณ๋ฅผ ๊ฐ์ง ์๋ก์ด ๊ฐ์ฒด(์ธ์คํด์ค) ๊ฐ ํ ๋น๋๋ค.
โฐ ๊ฐ๊ฐ์ ์ธ์คํด์ค๋ ํด๋์ค์ ๊ณ ์ ํ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ๊ฐ๊ฒ ๋๋ค.
โ๏ธ ๋ฐฐ์ด์ ์ ๋ถ Array์ ์ธ์คํด์ค
let arr = new Array('jieun', 'happy', 'today');
arr.length; // 3
arr.push('tomorrow');
โฐ ๋ฐฐ์ด์ ์ธ์คํด์ค ์ด๋ฏ๋ก ์ ์ฝ๋์ฒ๋ผ ํ ๋นํ ์ ์๋ค.
โฐ push, filter ๋ฑ์ ๋ฉ์๋ ๋ชจ๋ ํด๋์ค์ ์ํ ๊ฐ์ฒด(prototype)์ ์ ์๋์ด ์๋ค.
๐ฃ ์์ฑ๊ณผ ๋ฉ์๋
โ๏ธ ํด๋์ค์ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ์ ์ํ๊ณ , ์ธ์คํด์ค์์ ์ฌ์ฉํ๋ค.
1๏ธโฃ ์์ฑ
โฐ ์๋์ฐจ์ ๋ธ๋๋, ์ฐจ ์ด๋ฆ, ์์ ๋ฑ
โฐ brand, name, color...
2๏ธโฃ ๋ฉ์๋
โฐ '๊ฐ์ฒด์ ๋ธ๋ฆฐ ํจ์' : ์๋ ฅ์ค์ , ์ด์ ๋ฑ
โฐ setSpeed(), drive()...
๐ฃ ํด๋์ค
โ๏ธ ES5 ) ํจ์๋ก ์ ์ํ ์ ์๋ค.
function Car(brand, name, color) {
}
โ๏ธ ES6 ) class๋ผ๋ ํค์๋๋ฅผ ์ด์ฉํด์ ์ ์ํ ์๋ ์๋ค.
class Car {
constructor(brand, name, color) {
}
}
โฐ constructor : ์์ฑ์ ํจ์๋ก, ์ธ์คํด์ค๊ฐ ๋ง๋ค์ด์ง ๋ ์คํ๋๋ ์ฝ๋์ด๋ฉฐ return ๊ฐ์ ๋ง๋ค์ง ์๋๋ค.
โ๏ธ ์์ฑ์ ์ ์
//ES5
function Car(brand, name, color) {
this.brand = brand;
this.name = name;
this.color = color;
}
//ES6
class Car {
constructor(brand, name, color) {
this.brand = brand;
this.name = name;
this.color = color;
}
}
โฐ this : ์ธ์คํด์ค ๊ฐ์ฒด๋ฅผ ์๋ฏธํ๋ค.
โฐ ํ๋ผ๋ฏธํฐ๋ก ๋์ด์จ ๋ณ์๋ ์ธ์คํด์ค ์์ฑ ์ ์ง์ ํ๋ ๊ฐ์ด๋ฉฐ,
this์ ํ ๋นํ๋ค๋ ๊ฒ์ ๋ง๋ค์ด์ง ์ธ์คํด์ค์ ํด๋น ์์ฑ์ ๋ถ์ฌํ๊ฒ ๋ค๋ ๊ฒ์ด๋ค.
โ๏ธ ๋ฉ์๋์ ์ ์
//ES5
function Car(brand, name, color) {
}
Car.prototype.setSpeed = function() {
}
Car.prototype.drive = function() {
}
//ES6
class Car {
constructor(brand, name, color) {
}
setSpeed() {
}
drive() {
}
}
โฐ ES5๋ prototype์ ์ฌ์ฉํด์ ์ ์ํ๊ณ , ES6์ class ์์ชฝ์ ๋ฌถ์ด์ ์ ์ํ๋ค.
โ๏ธ ์์ฑ๊ณผ ๋ฉ์๋ ์ธ์คํด์ค์์ ์ฌ์ฉํ๊ธฐ
let avante = new Car('hyundai', 'avante', 'black');
avante.color; // 'black'
avante.drive(); // ์๋ฐ๋ผ๊ฐ ์ด์ ์ ์์ํ๋ค.
โ ์ฉ์ด ์ ๋ฆฌ
โ๏ธ prototype : ๋ชจ๋ธ์ ์ฒญ์ฌ์ง์ ๋ง๋ค ๋ ์ฐ๋ ์ํ ๊ฐ์ฒด
โ๏ธ constructor : ์ธ์คํด์ค๊ฐ ์ด๊ธฐํ๋ ๋ ์คํํ๋ ์์ฑ์ ํจ์
โ๏ธ this : ํจ์๊ฐ ์คํ๋ ๋, ํด๋น scope ๋ง๋ค ์์ฑ๋๋ ๊ณ ์ ํ ์คํ context
new ํค์๋๋ก ์ธ์คํด์ค๋ฅผ ์์ฑํ์ ๋๋ ํด๋น ์ธ์คํด์ค๊ฐ ๋ฐ๋ก this์ ๊ฐ
'CodeStates > learning contents' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
S2) Unit 2. [JS] ํ๋กํ ํ์ (0) | 2023.01.13 |
---|---|
S2) Unit 2. [JS] ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ (0) | 2023.01.13 |
S2) Unit 1. [JS] ๊ณ ์ฐจํจ์ (0) | 2023.01.12 |
Unit 11. ํ์ด์ง ๋ค์ด์ & ์น ์คํ ๋ฆฌ์ง (0) | 2023.01.04 |
Section 1. [๊ธฐ์ ๋ฉด์ ] (0) | 2022.12.29 |