JavaScript๋ ๊ฐ์ฒด์งํฅ
, ์ ์ฐจ์งํฅ
๋ ๊ฐ์ง ํํ๋ก ๋ง๋ค ์ ์๋ ์ธ์ด์ด๋ค.
์ ์ฐจ ์งํฅ์ ํ๋ก๊ทธ๋๋ฐ
: ์์ฐจ์ ์ธ ๋ช ๋ น์ ์กฐํฉ
๊ฐ์ฒด ์งํฅ์ ํ๋ก๊ทธ๋๋ฐ
: ๋ชจ๋ ๊ฒ์ด ๊ฐ์ฒด๋ก ๊ทธ๋ฃนํ ๋๋ฉฐ, ์ฌ์ฌ์ฉ์ฑ์ ์ป์ ์ ์๋ค.
-> JavaScript์์๋ ์๋ํ๋ฅผ ๋๊ธฐ ์ํด์ ์ผ๋ฐ์ ์ผ๋กํด๋ก์ ๋ชจ๋ ํจํด
์ ์ฌ์ฉํ๋ค.
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๊ฐ๋
์ผ๋ก ์บก์ํ
, ์์
, ์ถ์ํ
, ๋คํ์ฑ
์ด ์๋ค.
๋ฐ์ดํฐ์ ๊ธฐ๋ฅ์ ํ๋์ ๊ฐ์ฒด ์์ ๋ฃ์ด ๋จ์๋ก ๋ฌถ๋ ๊ฒ
๋์จํ ๊ฒฐํฉ
->์ฌ์ด ์์
์ฝ๋ ์คํ์ ๋ง์ถฐ ์ ์ฐจ์ ์ผ๋ก ์์ฑํ๋ ๊ฒ์ด ์๋ ์ฝ๋๊ฐ ์์งํ๋ ๋ชจ์ต๊ณผ ๋ฎ๊ฒ ์ฝ๋๋ฅผ ๋ชจ์ ๊ฒฐํฉํ๋ ๊ฒ
( ์ ์ฐจ์ ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ๊ฒ ๋๋ฉด ์ฝ๋ ์์ ์ ์ฝ๋์ ํ๋ฆ์ ํฐ ์ํฅ์ ๋ผ์น๋ฏ๋ก ์์ ์ด ์ด๋ ต๋ค. )
์๋
์ธ๋ถ ๋ฐ์ดํฐ๋ ๋ด๋ถ ๊ตฌํ์ด ์ธ๋ถ๋ก๋ ธ์ถ
๋์ง ์๋๋ก ๋ง๋๋ ๊ฒ.
( ์ ๋ ฅ ๋ฒํผ์ ๋๋ฅด๊ฒ๋๋ฉด ์ ๋ ฅ์ด๋ผ๋ ๋์์ด ์ํ๋์ง๋ง, ๋ด๋ถ ๊ตฌํ์ด ์ด๋ป๊ฒ ๋์๋์ง๋ ์์ง ๋ชปํ๋ค.)
๋ด๋ถ ์ธํฐํ์ด์ค
,private
: ๋์ผํ ํด๋์ค ๋ด์ ๋ค๋ฅธ ๋ฉ์๋์์๋ ์ ๊ทผํ ์ ์์ง๋ง ํด๋์ค ๋ฐ์์๋ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํ ํ๋กํผํฐ์ ๋ฉ์๋์ธ๋ถ ์ธํฐํ์ด์ค
,public
: ํด๋์ค ๋ฐ์์๋ ์ ๊ทผ ๊ฐ๋ฅํ ํ๋กํผํฐ์ ๋ฉ์๋
- getter(ํ๋์)'์ โsetter(์ค์ ์)โ ํค์๋๋ฅผ ํตํด ๊ตฌํ
- ์ฝ๊ธฐ ์ ์ฉ์ ๊ฒฝ์ฐ getter๋ง ๊ตฌํ
class CoffeeMachine {
_waterAmount = 0;
set waterAmount(value) {
if (value < 0) throw new Error("๋ฌผ์ ์์ ์์๊ฐ ๋ ์ ์์ต๋๋ค.");
this._waterAmount = value;
}
get waterAmount() {
return this._waterAmount;
}
constructor(power) {
this._power = power;
}
}
// ์ปคํผ ๋จธ์ ์์ฑ
let coffeeMachine = new CoffeeMachine(100);
// ๋ฌผ ์ถ๊ฐ
coffeeMachine.waterAmount = -10; // Error: ๋ฌผ์ ์์ ์์๊ฐ ๋ ์ ์์ต๋๋ค.
๋ด๋ถ ๊ตฌํ์ ์์ฃผ ๋ณต์กํ๋ฐ, ์ค์ ๋ก ๋ ธ์ถ๋๋ ๋ถ๋ถ์ ๋จ์ํ๊ฒ ๋ง๋ ๋ค
์ธ๋ถ์์๋ ๋ด๋ถ์ ๋์ ๋ฐฉ์์ ์ ํ ์์ง ๋ชปํ๋ค. ํ์ง๋ง ์ธ๋ถ ์ธํฐํ์ด์ค๋ฅผ ํตํด์ ๊ฐ์ฒด๋ง ๊ฐ๊ณ ๋ ๋ด๋ถ ์ธํฐํ์ด์ค๋ฅผ ๋์ ์ํฌ ์ ์๋ค.
์ถ์ํ๋ ๋ด๋ถ ๋ฐ์ดํฐ์ ๋ด๋ถ ๋์ ๋ฐฉ์์ด ์ธ๋ถ์ ๋ ธ์ถ๋์ง ์๋๋ค๋ ์ ์์
์บก์ํ
์์ ์ฌ
ํ๋ค.
์บก์ํ
๊ฐ ์ฝ๋๋ ๋ฐ์ดํฐ์์๋
์ ํฌ์ปค์ค๊ฐ ๋ง์ถฐ์ ธ์๋ค๋ฉด,
์ถ์ํ
๋ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋์ด ํ์ํ์ง ์์ ๋ฉ์๋ ๋ฑ์ ๋ ธ์ถ์ํค์ง ์๊ณ , ๋จ์ํ์ธํฐํ์ด์ค
๋ก ์ ์ํ๋ ๊ฒ์ ํฌ์ปค์ค๊ฐ ๋ง์ถฐ์ ธ ์๋ค.
๋ถ๋ชจ ํด๋์ค์ ํน์ง์ ์์ ํด๋์ค๊ฐ ๋ฌผ๋ ค๋ฐ๋ ๊ฒ
๋์ผํ ๋ถ๋ชจ ํด๋์ค์์ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ์ฌ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
๋น์ทํ ๊ธฐ๋ฅ์์ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ๋ช ๊ฐ๋ง ์ถ๊ฐํ๊ณ ์ถ์ ์ํฉ์ ๊ฐ์ ํด๋ณด์.
์ด๋ ์ฝ๋๋ฅผ ์๋ก ๊ตฌํํด์ผ ํ๋ค๋ ์ ์์ ๋ถ๋ช
๋นํจ์จ์ ์ด๋ค.
ํ์ง๋ง ์์
์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ๋ค๋ฅธ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ฅผ ๋ฐ์์์ ์ฌ์ฉํ๊ฑฐ๋, ์์ฑ ๋ฐ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ ์ ์๋ค.
let animal = {
eats: true
};
let rabbit = {
jumps: true
};
rabbit.__proto__ = animal; // (*)
// ํ๋กํผํฐ eats๊ณผ jumps๋ฅผ rabbit์์๋ ์ฌ์ฉํ ์ ์๊ฒ ๋์์ต๋๋ค.
alert( rabbit.eats ); // true (**)
alert( rabbit.jumps ); // true
rabbit.__proto__ = animal
๋ฅผ ํตํด animal์ด rabbit์ ํ๋กํ ํ์
์ด ๋๋๋ก ์ค์ ํ์๋ค.
ํ๋กํผํฐ eats๊ณผ jumps๋ฅผ rabbit์์๋ ์ฌ์ฉํ ์ ์๊ฒ ๋์๋ค.
๋คํ์ฑ(Polymorphism)์ Poly - ๋ง์
, morph - ํํ
์ฆ, ๋ค์ํ ํํ๋ผ๋ ์๋ฏธ๋ฅผ ๋ด๊ณ ์๋ค.
ํ๋์ ๋ฉ์๋๋ ํด๋์ค๊ฐ ์์ ๋ ์ด๊ฒ๋ค์ด ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ๋์ํ๋ ๊ฒ
( ๋์ผํ ์กฐ์๋ฐฉ๋ฒ์ผ๋ก ๋์์ํค์ง๋ง ๋์๋ฐฉ๋ฒ์ ๋ค๋ฅธ ๊ฒ์ ์๋ฏธ )