ํ์ต๋ชฉํ
- ํด๋์ค์ ์ธ์คํด์ค๋ผ๋ ์ฉ์ด๋ฅผ ์ดํดํ ์ ์๋ค.
- new ํค์๋์ ์ฌ์ฉ๋ฒ์ ์ดํดํ ์ ์๋ค.
- class ํค์๋์ ์ฌ์ฉ๋ฒ์ ์ดํดํ ์ ์๋ค.
- ํ์ค ์ธ๊ณ์ ๋ชจ๋ธ์ ๋ฐํ์ผ๋ก ํด๋์ค์ ๋ฉ์๋์ ์์ฑ์ ๋์์ธํ ์ ์๋ค.
- ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ํน์ง์ ์ดํดํ ์ ์๋ค.
- ์บก์ํ
- ์์
- ์ถ์ํ
- ๋คํ์ฑ
- JavaScript์์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๊ตฌํํ ์ ์๋ค.
- Prototype์ด ๋ฌด์์ธ์ง ์ดํดํ ์ ์๋ค
- ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์์(Inheritance)์ ๊ฐ๋
์ ์ดํดํ๊ณ ์ฝ๋๋ก ์์ฑํ ์ ์๋ค.
- ์์๊ด๊ณ๋ฅผ ๊ฐ์ง ํ์ค ์ธ๊ณ์ ๋ชจ๋ธ์ ์ฝ๋๋ก ์์ฑํ ์ ์๋ค.
- ํด๋์ค ์์์ ์๋ฆฌ๋ฅผ ์ดํดํ ์ ์๋ค.
- Prototype chain์ ์ดํดํ๊ณ ์ค๋ช ํ ์ ์๋ค. (__proto__)
- ๋ฉด์ ์ ์์ฃผ๋ฑ์ฅํ๋ ๊ฐ๋ ์ด๋ผ๊ณ ํ๋ ์ ์ค๋ช ํ ์ ์๋๋ก ์ฐ์ตํด๋ณผ๊ฒ
๋ฐ๊ฒฌํ๊ฒ
class๋ ํ๋์ ํผ? ๊ท๊ฒฉ, ๋ชจ๋ธ์ด ๋๋ ์ฒญ์ฌ์ง
instance ๋ ํด๋์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋กํ ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ํจํด
//ํด๋์ค ๋ง๋๋๋ฒ Es6๋ฌธ๋ฒ
class Car {
constructor(brand, name, color){
this.brand = brand;
this.name = name;
this.color = color;
//@@ this๋ ์ธ์คํด์ค ๊ฐ์ฒด๋ฅผ ์๋ฏธ ํ๋ค. ๋งค๊ฐ๋ณ์๋ก ๋์ด์จ ๋ธ๋๋,๋ค์,์ปฌ๋ฌ๊ฐ์..
};
};
//this์ ํ ๋นํ๋๊ฒ์ ๋ง๋ค์ด์ง ์ธ์คํด์ค์ ํด๋น๋ด์ฉ์ ๋ถ์ฌํ๊ฒ ๋ค๋ ์๋ฏธ
// this.brand = brand; ์ด๋ ๊ฒ ํด์ค์ผ ์ถํ ์ธ์์ ์์จ๋๊ฐ ์ฌ๋ผ๊ฐ๋ค
ex) this.brand = 'kia'; ์ด๋ ๊ฒ ์ ์ผ๋ฉด ํ์ ๋์ด๋ฒ๋ ค ์ธ์๊ฐ์ ๋ฐ๊ธฐ ์ฝ์ง์๋ค.
//์ธ์คํด์ค ๋ง๋๋ ๋ฒ
let avante = new Car('hyundai', 'avante', 'white');
//new๋ฅผ ๋ถ์ฌ๋ง๋ ์ธ์คํด์ค๋ Carํด๋์ค์ ๊ณ ์ ํ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ๋ฌผ๋ ค๋ฐ์ต๋๋ค.
//new ํค์๋๋ฅผ ์ฌ์ฉํด์ผ ์์ฑ์(constructor)ํจ์๊ฐ์คํ๋จ,์์ฑ์ํจ์๋ ๋ฆฌํด๊ฐ์ ๋ง๋ค์ง์์.
O(object) O(oriented) P(programming)์ ํน์ฑ
=์ฌ๋์ด ์ธ๊ณ๋ฅผ ๋ณด๊ณ ์ดํดํ๊ธฐ ์ํด ํ๋ด๋ธ ๋ฐฉ๋ฒ๋ก
1. ์บก์ํ : ์ฝ๋๋ ๋ฐ์ดํฐ์ ์๋(hiding) (๋ฐ์ดํฐ์ ๊ธฐ๋ฅ์ ํ๋์ ๋จ์๋ก ๋ฌถ์ด ๊ตฌํ์ ์จ๊ธฐ๊ณ ๋์์ ๋ ธ์ถํจ)
์ ์ฐจ์ ์ฝ๋์์ฑ์ด ์๋๋ผ ์ฝ๋๊ฐ ์์งํ๋ ์ค์ ๋ชจ์ต๊ณผ ๋ฎ๊ฒ ์ฝ๋๋ฅผ ๋ชจ์ ๊ฒฐํฉํ๋ฉฐ
๋์จํ ๊ฒฐํฉ์ผ๋ก ์ธ์ ๋ ์ฝ๋์์ ์ด ๊ฐ๋ฅํ๋ค.
์ ๋ฆฌ : ์ฝ๋๋ฅผ ๋จ์ํ๊ฒ ๋ง๋ค์ด ์ฌ์ฌ์ฉ๋ฅ ์ ๋์ธ๋ค.
2. ์ถ์ํ : ๋ด๋ถ๋ ๋ณต์กํ๊ฒ ์ง๋ง ๋ ธ์ถ๋ถ๋ถ์ ๋จ์ํ๊ฒ ๋ง๋ค์ (ex.์ ํ๊ธฐ, ๊ณ์ฐ๊ธฐ)
(์ฌ์ฉ์๊ฐ ์ฌ์ฉํ์ง์๋ ๋ถ๋ถ์ ๋ ธ์ถ์ํค์ง์์ ์๊ธฐ์น ๋ชปํ ์ฌ์ฉ์์ ๋ณํ ์ํฅ์ ์ต์ํํ๋ค.)
ํด๋์ค ์ ์์ ๋ฉ์๋์ ์์ฑ๋ง ์ ์ํ๊ฒ์ interface๋ผ๊ณ ํ๋ค. ์ถ์ํ์ ๋ณธ์ง
์บก์ํ์ ์ถ์ํ
์บก์ํ๊ฐ ์ฝ๋๋ ๋ฐ์ดํฐ์ ์๋์ ํฌ์ปค์ค๊ฐ ๋ง์ถฐ์ ธ์๋ค๋ฉด,
์ถ์ํ๋ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋์ด ํ์ํ์ง ์์ ๋ฉ์๋ ๋ฑ์ ๋ ธ์ถ์ํค์ง ์๊ณ ,
๋จ์ํ ์ด๋ฆ์ผ๋ก ์ ์ํ๋ ๊ฒ์ ํฌ์ปค์ค๊ฐ ๋ง์ถฐ์ ธ ์๋ค.
3. ์์ : ๋ถ๋ชจํด๋์ค์ ํน์ง์ ์์ ํด๋์ค๊ฐ ๋ฌผ๋ ค๋ฐ๋๊ฒ
ex) ์ฌ๋ ํด๋์ค๊ฐ ์๋ค๋ฉด ํ์ํด๋์ค๋ฅผ ๋ง๋ค๋ ์ฌ๋ ํด๋์ค ๊ธฐ๋ฐ์ ํ์์ ์์ฑ๊ณผ ๋ฉ์๋๋ง ์ถ๊ฐํ๋ฉด ๋๋ค.
๋ณธ์ง์ด๊ฐ๊ธฐ ๋๋ฌธ์ ๋ฌผ๋ ค๋ฐ์ ์ ์๋ค.
**๋ถํ์ํ ์ฝ๋๋ฅผ ์ค์ฌ ์ฌ์ฌ์ฉ์ฑ์ ๋์ธ๋ค.
4. ๋คํ์ฑ : ๊ฐ์์ด๋ฆ์ ๊ฐ์ง ๋ฉ์๋๋ผ๋ ๋ค์ํ๊ฒ ์๋ํ ์์๋ค.
๋์ผํ ๋ฉ์๋์ ๊ฐ์ฒด์ ํน์ฑ์ ๋ง๊ฒ ๋ฌ๋ฆฌ ์์ฑํ๋๊ฒ ๊ฐ๋ฅํ๋ค.
Proto typesโ
ํ๋กํ ํ์ (prototype)
์๋ฐ์คํฌ๋ฆฝํธ์ ๋ชจ๋ ๊ฐ์ฒด๋ ํ๋กํ ํ์ (prototype)์ด๋ผ๋ ๊ฐ์ฒด๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
๋ชจ๋ ๊ฐ์ฒด๋ ๊ทธ๋ค์ ํ๋กํ ํ์ ์ผ๋ก๋ถํฐ ํ๋กํผํฐ์ ๋ฉ์๋๋ฅผ ์์๋ฐ์ต๋๋ค.
์ด์ฒ๋ผ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ชจ๋ ๊ฐ์ฒด๋ ์ต์ํ ํ๋ ์ด์์ ๋ค๋ฅธ ๊ฐ์ฒด๋ก๋ถํฐ ์์์ ๋ฐ์ผ๋ฉฐ, ์ด๋ ์์๋๋ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ๊ฐ์ฒด๋ฅผ
ํ๋กํ ํ์ (prototype)์ด๋ผ๊ณ ํฉ๋๋ค. -tcpschool ๋ฐ์ท
https://developer.mozilla.org/ko/docs/Learn/JavaScript/Objects/Object_prototypes
JavaScript๋ ํ๋กํ ํ์ ๊ธฐ๋ฐ ์ธ์ด(prototype-based language)
๋ชจ๋ ๊ฐ์ฒด๋ค์ด ๋ฉ์๋์ ์์ฑ๋ค์ ์์ ๋ฐ๊ธฐ ์ํ ํ ํ๋ฆฟ์ผ๋ก ํ๋กํ ํ์ ๊ฐ์ฒด(prototype object)๋ฅผ ๊ฐ์ง๋ค.
ํ๋กํ ํ์ ๊ฐ์ฒด๋ ๋ ๋ค์ ์์ ํ๋กํ ํ์ ๊ฐ์ฒด๋ก๋ถํฐ ๋ฉ์๋์ ์์ฑ์ ์์ ๋ฐ์ ์ ์๊ณ
๊ทธ ์์ ํ๋กํ ํ์ ๊ฐ์ฒด๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค.
์ด๋ฅผ ํ๋กํ ํ์ ์ฒด์ธ(prototype chain)์ด๋ผ ๋ถ๋ฅด๋ฉฐ ๋ค๋ฅธ ๊ฐ์ฒด์ ์ ์๋ ๋ฉ์๋์ ์์ฑ์
ํ ๊ฐ์ฒด์์ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ๊ทผ๊ฐ์ด ๋๋ค.(๋ชจ๋ ๊ฐ์ฒด์์ toString() ๋ฉ์๋๋ฅผ ์ธ์์๋ ์ด์ ๋ค.)
์ ํํ ๋งํ์๋ฉด ์์๋๋ ์์ฑ๊ณผ ๋ฉ์๋๋ค์ ๊ฐ ๊ฐ์ฒด๊ฐ ์๋๋ผ ๊ฐ์ฒด์ ์์ฑ์์ prototype์ด๋ผ๋ ์์ฑ์ ์ ์๋์ด ์์ต๋๋ค.
JavaScript์์๋ ๊ฐ์ฒด ์ธ์คํด์ค์ ํ๋กํ ํ์ ๊ฐ์ ์ฐ๊ฒฐ(๋ง์ ๋ธ๋ผ์ฐ์ ๋ค์ด ์์ฑ์์ prototype ์์ฑ์์ ํ์๋ __proto__ ์์ฑ์ผ๋ก ๊ฐ์ฒด ์ธ์คํด์ค์ ๊ตฌํํ๊ณ ์์ต๋๋ค.)์ด ๊ตฌ์ฑ๋๋ฉฐ
์ด ์ฐ๊ฒฐ์ ๋ฐ๋ผ ํ๋กํ ํ์ ์ฒด์ธ์ ํ๊ณ ์ฌ๋ผ๊ฐ๋ฉฐ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ํ์ํฉ๋๋ค.
*๊ฐ์ฒด๋ด์ ์บก์ํ๋์ด์๋๊ฒ์ ์ ๊ทผํ๋ ค๋ฉด ๋จผ์ ์ ์ ์ ๋ ฅํด์ผํฉ๋๋ค. ๊ทธ ๋ค์ ์ ์ ์ฐ๊ณ ์ ๊ทผํ๊ณ ์ ํ๋ ํญ๋ชฉ์ ์ ์ต๋๋ค.
๊ฐ๋จํ ํ๋กํผํฐ์ ์ด๋ฆ์ผ ์๋ ์์ ๊ฒ์ด๊ณ , ๋ฐฐ์ด์ ์ผ๋ถ์ด๊ฑฐ๋ ๊ฐ์ฒด์ ๋ฉ์๋๋ฅผ ํธ์ถํ ์๋ ์์ต๋๋ค.
๋๋์
์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๊ฐ์ฒด ์งํฅ ์ธ์ด ๋ผ๊ณ ํด์ ๊ทธ๋ฐ๊ฐ๋ณด๋ค ํ๋๋ฐ,
ํ๋กํ ํ์ ์ฒด์ด๋์ด๋ ์ฌ์ฉ์ ์ง์ ๋ฉ์๋๋ฅผ ์ธ์์๋ค๋ ์ ์์ ํธ๋ฆฌํ ์ธ์ด๋ผ๋ ์๊ฐ์ด ๋ค์๋ค.
์์ง ํด๋์ค์ ์ธ์คํด์ค๋ ์์ฉ์ด์ด๋ ค์์ ๋ง์ด ์ฌ์ฉํด์ผํ ๊ฒ๊ฐ๋ค.
๋ค์ ๊ณต๋ถ๋ฐฉํฅ
์ฝ์ค์ ์คํ๋ฆฐํธ ์งํํด๋ณด๊ธฐ.
'TIL -์ผ๊ฐํ์ต๊ธฐ๋ก > Java Script' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋น๋๊ธฐ ํ๋ฆ ์ดํดํ๊ธฐ (0) | 2022.02.13 |
---|---|
Call back ํจ์๋ก Method ๋ง๋ค๊ธฐ (0) | 2022.01.24 |
Array์ Object์ ๊ฐ ์ฌ์ฉํ๊ธฐ (0) | 2022.01.16 |
3W_JS_ํด๋ก์ ํจ์ (0) | 2021.12.29 |
3W_JS_Scope (0) | 2021.12.29 |
๋๊ธ