์ฑ <๋ฌ๋์๋ฐ์คํฌ๋ฆฝํธ>๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ๋ฐฐ์ด ์๋ฐ์คํฌ๋ฆฝํธ ๋ด์ฉ์ ๋๋ค.
๋ชฉ์ฐจ
- <๊ฐ์ฒด ์งํฅ ์ธ์ด>
- ํด๋์ค ๊ธฐ๋ฐ ์ธ์ด vs ํ๋กํ ํ์ ๊ธฐ๋ฐ ์ธ์ด(JS)
- <ํ๋กํ ํ์ ๊ธฐ๋ฐ ์ธ์ด>
- 1. property
- 2. ํ๋กํ ํ์ (๊ฐ๋ ์ค๋ช )
- 3. ํ๋กํ ํ์ ๊ธฐ๋ฐ ์ธ์ด
<๊ฐ์ฒด ์งํฅ ์ธ์ด>
๊ฐ์ฒด ์งํฅ ์ธ์ด๋ ํฌ๊ฒ ๋ ๊ฐ์ง ์ค๊ธฐ๋ก ๋๋์ ์๋ค.
- ํด๋์ค ๊ธฐ๋ฐ ์ธ์ด(C++, Java, C#, Ruby, Python ๋ฑ)
- ํ๋กํ ํ์ ๊ธฐ๋ฐ ์ธ์ด(JavaScript, ActionScript, JScript ๋ฑ)
- ํด๋์ค ๊ธฐ๋ฐ & ํ๋กํ ํ์ ๊ธฐ๋ฐ ๊ฐ์ฒด ์งํฅ ์ธ์ด
<ํ๋กํ ํ์ ๊ธฐ๋ฐ ์ธ์ด>
์๋ฐ์คํฌ๋ฆฝํธ์ ๋ชจ๋ ๊ฐ์ฒด๋ ์์ ์ ๋ถ๋ชจ ์ญํ ์ ๋ด๋นํ๋ ๊ฐ์ฒด์ ์ฐ๊ฒฐ๋์ด ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ (๋ง์น ๊ฐ์ฒด ์งํฅ์ ์์ ๊ฐ๋ ๊ณผ ๊ฐ์ด) ๋ถ๋ชจ ๊ฐ์ฒด์ ํ๋กํผํฐ ๋๋ ๋ฉ์๋๋ฅผ ์์๋ฐ์ ์ฌ์ฉํ ์ ์๊ฒ ํ๋ค. ์ด๋ฌํ ๋ถ๋ชจ ๊ฐ์ฒด๋ฅผ Prototype(ํ๋กํ ํ์ ) ๊ฐ์ฒด ๋๋ ์ค์ฌ์ Prototype(ํ๋กํ ํ์ )์ด๋ผ ํ๋ค.
Prototype ๊ฐ์ฒด๋ ์์ฑ์ ํจ์์ ์ํด ์์ฑ๋ ๊ฐ๊ฐ์ ๊ฐ์ฒด์ ๊ณต์ ํ๋กํผํฐ๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
1. property
1-1) property
- property๋ ํด๋น object์ ํน์ง์ด๋ค.
- property๋ ๋ณดํต ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ์ฐ๊ด๋ ์์ฑ์ ๋ํ๋ ๋๋ค.
- property๋ ์ด๋ฆ(a string)๊ณผ ๊ฐ(primitive/method/object reference)์ ๊ฐ์ง๊ณ ์๋ค.
- "ํ๋กํผํฐ๊ฐ object๋ฅผ ๊ฐ์ง๊ณ ์๋ค" = "property๊ฐ object reference๋ฅผ ๊ฐ์ง๊ณ ์๋ค"๋ฅผ ์ค์ธ๋ง๋ก property์ ๊ฐ์ด ๋ณํ ํ์๋ object๋ ๊ทธ๋๋ก ๋จ์์๋ค.
1-2) property์ ๋ฅ
- ์ธ์คํด์ค property : ํน์ object ์ธ์คํด์ค์ ํน์ ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
- Static Property : ๋ชจ๋ object ์ธ์คํด์ค๋ค์๊ฒ ๊ณต์ ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
1-3) property์ ์ ๊ทผ ๋ฐฉ์
objectName.property // person.age
objectName["property"] // person["age"]
objectName[expression] // x = "age"; person[x]
2. ํ๋กํ ํ์
- "์ํ"์ด๋ผ๋ ์๋ฏธ
- ํ๋กํ ํ์ ์ ์ด์ฉํ๋ฉด ๊ฐ์ฒด์ ๊ฐ์ฒด๋ฅผ ์ฐ๊ฒฐํ๊ณ , ํ์ชฝ ๋ฐฉํฅ์ผ๋ก ์์(๋ฉค๋ฒ ํจ์๋ ๋ฉค๋ฒ ๋ณ์๋ฅผ ๊ณต์ )์ ๋ฐ๋ ํํ๋ฅผ ๋ง๋ค ์ ์๋ค. ์ด ํํ๊ฐ ํ๋กํ ํ์ ์ฒด์ธ์ด๋ค.
2-1) ํ๋กํ ํ์ ์์ฑ
ํจ์ ์์ฑํ๋ฉด ํ๋กํ ํ์ ๊ฐ์ฒด๋ ๋์ ์์ฑ๋๋ค. ๋จ์ํ ์์ฑ๋ง ๋ ๊ฒ์ด ์๋๋ผ ํจ์์์๋ ํ๋กํ ํ์ ๊ฐ์ฒด์ prototype์ด๋ผ๋ ๋ด๋ถ๋ณ์๋ก ์ ๊ทผ ํ ์ ์๊ณ , ํ๋กํ ํ์ ์์๋ constructor๋ผ๋ ๋ณ์๋ก ํจ์์ ์ ๊ทผ ํ ์ ์๊ฒ ๋๋ค. ์๋ก๋ฅผ ์ฐธ์กฐํ๋ ๋ ํผ๋ฐ์ค ๋ณ์๋ฅผ ํตํด ๋ ๊ฐ์ฒด๋ ์ ๊ทผ ๋ฟ๋ง ์๋๋ผ ๋ณ๊ฒฝ๋ ๊ฐ๋ฅํ๋ค.
# ํ๋กํ ํ์
์์ฑ
function Foo (){}
Foo.prototype.proto_val = '์ํ ๊ฐ';
Foo.prototype.constructor.construct_val = "์์ฑ์ ๊ฐ";
console.log(Foo.prototype.proto_val); //์ํ ๊ฐ ์ ์ถ๋ ฅ
console.log(Foo.construct_val); //์์ฑ์ ๊ฐ ์ ์ถ๋ ฅ
console.log(Foo.proto_val); // undefined๋ฅผ ์ถ๋ ฅ
์ ์ฝ๋์ ๋งจ ๋ง์ง๋ง ์ค์ ๋ณด๋ฉด ์ ์ ์๋ฏ์ด ํจ์ ์ค์ค๋ก ํ๋กํ ํ์ ๊ฐ์ ์ป์ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ newํค์๋๋ก ์ธ์คํด์ค๋ฅผ ์์ฑํด ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ํ๋กํ ํ์ ๊ฐ์ ์ป์ ์ ์๋ค.
function Foo(){
//var this = {}; this๊ฐ ์์ฑ์ด ๋ฉ๋๋ค.
//์ด this๋ dunder proto๋ผ๋(__proto__)๋ผ๋ ์ฐธ์กฐ๋ณ์๋ก ํ๋กํ ํ์
๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํฉ๋๋ค.
//return this; this๊ฐ ๋ฐํ๋ฉ๋๋ค.
}
var foo_instance = new Foo();
์์ ์ฝ๋์ ๊ฐ์ด, new๋ฅผ ํ ๊ฒฝ์ฐ this ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ฉฐ, ๋ํ ๋ฐํ๋์ด foo_instance์์ ํด๋น ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค. ์ด this๋ Foo์ ํ๋กํ ํ์ ์ ๊ฐ๋ฅดํค๊ฒ ๋๊ณ , (Foo ํจ์๊ฐ์ฒด์๋ ๋ค๋ฅด๊ฒ) this๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ด๋ถ ๋ณ์์ธ proto๋ Foo์ ํจ์์ ์ง์ ์ ๊ทผ ํ ์ ์๋ ๊ถํ์ ๊ฐ์ง๊ฒ ๋๋ค.
โป์ ๊ทผ ํ ์ ์๋ค๋ ์๋ฏธ๋ณด๋ค๋ ํ๋กํ ํ์ ์ ์๋ ๊ฐ์ ๊ณ ์ค๋ํฌ ๋ณต์ ํด์ ๊ฐ์ ธ์จ๋ค๋ ์๋ฏธ๊ฐ ์ ์ ํ๋ค.
2-2) ํ๋กํ ํ์ ๊ณผ ๊ฐ์ฒด์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ด๋ฆฌ, ์ฐธ์กฐ๋๋ ๋ฐฉ์
- ์ธ์คํด์ค์์ ํ๋กํ ํ์ ์ ์์ฑ์ ์ ๊ทผ๋ง ํ๋ ๊ฒฝ์ฐ : ํ๋กํ ํ์ ์ ๊ฐ์ด ์๋์ง ํ์ธํ ๋ค์ ์ฐธ์กฐ.
- ์ธ์คํด์ค์์ ํ๋กํ ํ์ ์์ฑ์ผ๋ก ์ฐ์ฐ์ ํ๋ ค๊ณ ํ ๊ฒฝ์ฐ : ์ธ์คํด์ค์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ฃผ์ด์ง๊ณ , ํ๋กํ ํ์ ์ ์์ฑ์ ํธ์ถํ์ฌ ๋ฐ์ ๊ฐ์ ์ฐ์ฐํ์ฌ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ. (ํ ๋น๋ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ก ์ธ์คํด์ค๋ ๊ณ ์ ์ ์์ฑ์ ๊ฐ์ง.)
2-3) ํ๋กํ ํ์ ๊ฐ๋ ์ ์ฌ์ฉํ ๋์ ์ฃผ์ํ ์
- ์ธ์คํด์ค ์์ฒด์์๋ ํ๋กํ ํ์ ์ ์ง์ ์ ๊ทผํ์ฌ ํ๋กํ ํ์ ์ ์๋ ๊ธฐ๋ณธ๊ฐ์ instance์์ ๋ฐ๊ฟ๋ฒ๋ฆด ์๋ ์๋ค.
- ๋ค๋ฅธ ์ธ์ด ๊ฐ์ ๊ฒฝ์ฐ class๋ฅผ ๊ฑธ์ด ๋ฃ๊ณ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๊ฒฝ์ฐ ๊ฐ์ฒด์์๋ ํด๋์ค๋ฅผ ๊ฑด๋๋ฆด ์ ์์ด ๊ฐ๊ฐ์ ๊ฐ์ฒด๋ค์ด ์ํ์ด ๋ณ๊ฒฝ๋ ์ํ์ผ๋ก๋ถํฐ ๋ณดํธ๋ฐ์ ์ ์์ง๋ง, ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ์์ฑ์์ธ ํจ์๋ฟ๋ง ์๋๋ผ ์์ฑ์๋ก๋ถํฐ ๋ง๋ค์ด์ง ๊ฐ์ฒด๊น์ง ์ํ์ ์์ ๋ ์์๊ณ , ๊ทธ ๊ณผ์ ์ด ์ปดํ์ผ ๊ณผ์ ๋ ์๋๊ณ ๋ฐํ์์์ ์ผ์ด๋๋ฏ๋ก ์๋ฐ์คํฌ๋ฆฝํธ์ ํ๋กํ ํ์ ๊ฐ๋ ์ ์ฌ์ฉ ํ ๋๋ ์กฐ์ฌํด์ผ ํ๋ค.
3. ํ๋กํ ํ์ ๊ธฐ๋ฐ ์ธ์ด
- ํ๋กํ ํ์ ๊ธฐ๋ฐ ์ธ์ด์์๋ ํด๋์ค๋ผ๋ ๊ฐ๋ ์ด ์กด์ฌํ์ง ์์ผ๋ฉฐ, ์ฌ๋ฌ ์ข ๋ฅ์ Built-in ๊ฐ์ฒด๋ค์ด ์์คํ ์์ ์กด์ฌํ๊ฒ๋๋ค.
- ํด๋์ค ๊ธฐ๋ฐ ์ธ์ด์ ์์ ๊ฐ๋ ๊ณผ ๋ฌ๋ฆฌ, ํ๋กํ ํ์ ๊ธฐ๋ฐ ์ธ์ด๋ ๊ฐ์ฒด๋ฅผ ์ํ(ํ๋กํ ํ์ )์ผ๋ก ํ๋ ๋ณต์ ๊ณผ์ ์ ํตํด ๊ฐ์ฒด์ ๋์ ๋ฐฉ์์ ์ฌ์ฌ์ฉ ํ ์ ์๊ฒ ํ๋ค. - ์๋ฐ์คํฌ๋ฆฝํธ๋ ํ๋กํ ํ์ ๋ณต์ ๋ณด๋ค๋ ํ๋กํ ํ์ ๋งํฌ๋ฅผ ํตํด ์ํ ์ฐธ์กฐ.
'๐ฐ ์ธ์ด > JS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
map๊ณผ set (0) | 2020.01.10 |
---|---|
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP) (0) | 2020.01.05 |
๋ฐฐ์ด๊ณผ ๋ฐฐ์ด์ฒ๋ฆฌ (0) | 2020.01.03 |
์ค์ฝํ(2) (0) | 2019.12.22 |
์ค์ฝํ(1) (0) | 2019.12.20 |