JS๋ก ๋ณด๋ ๊ฐ์ฒด์งํฅ - 1.๊ฐ์ฒดํธ
๐ ๋ณด๋ฆ์นผ๋ผ
๋จ์ ๊ธฐ๋ก๋ณด๋จ ์ข ๋ ์์ง์, ์ ๋ฆฌ๋ ๊ธ์ ์ฐ๊ณ ์ ์์ํ๋ ๋ณด๋ฆ์นผ๋ผ
๋ถ๋ด์์ด ๋งค ๋ณด๋ฆ ํ๋์ ์ฃผ์ ๋ฅผ ๊น๊ฒ ๋ค์ฌ๋ค๋ณผ ์ ์๋ ๊ธฐํ๊ฐ ๋์์ผ๋ฉด ์ข๊ฒ ๋ค.
๊ฐ์ ์ค์ข
์ ๋์ด ์๊ฐ ์ค์ข
์ ์ ํตํด ๊พธ์คํ ์์
์ ๋ด์๋ ๊ฒ๊ณผ ๊ฐ์ด ๋ณด๋ฆ์นผ๋ผ์ ์ ์ด๋ณด์!
๋ณด๋ฆ์นผ๋ผ ๊ท์น
- ๋งค์ผ์ ๊ธฐ๋กํ๋ ์ฑ์ฅ์ผ์ง๋ณด๋ค ์ข๋ ๊น์ ๋ด์ฉ์ ๊ธ์ ์์ฑํ ์ ์๋๋ก ํ์.
- ๋๋ฌด ์์ฌ๋ถ๋ฆฌ์ง๋ง๊ณ ํ๋์ ์ฃผ์ (ํค์๋)์ ์ง์คํ๋ค.
- 2์ฃผ์ ํ ๋ฒ ๋ค๋ฌ์ด์ง ์นผ๋ผ ํํ์ ๊ธ์ ์์ฑํ๋ค.
- ๋ง๊ฐ์ ๋งค์ฃผ ์ผ์์ผ์ ๊ธฐ์ค์ผ๋ก ํ๋ค.
๐ ๊ธ๋ 8๊ธฐ
๊ฐ๋ฐ์๋ค์ด ๋ชจ์ฌ ํจ๊ป ๊ธ์ ์ฐ๊ณ ํผ๋๋ฐฑํ๋ ์ปค๋ฎค๋ํฐ์ธ ๊ธ๋(๊ธ์ฐ๋ ๋๋ผ์ด๊ฐ ์ธ์์ ๋ฐ๊พผ๋ค.)์์
ํ๋ํ๊ฒ ๋์ด ๋ณด๋ฆ์นผ๋ผ์ ๊ท์น์ ๊ธ๋์ ๊ท์น์ ๋ฐ๋ฅด๊ธฐ๋ก ํ๋ค.
2์ฃผ๋ง๋ค ๊ธ์ ์์ฑํ๋ ๊ท์น์ ๋์ผํ๋ฉฐ, ๊ทธ ๋ง๊ฐ ๋ ์ง๋ ์๋์ ๊ฐ๋ค. ๋ง๊ฐ ๋ ์ง๋ฅผ ์ฒดํฌํ๋ฉฐ ๋งค๋ฒ ๊ธ ์์ฑ์ ๋ํด ์ธ์งํ๋๋ก ํ์!
๐ ๋ค์ด๊ฐ๊ธฐ์ ์์โฆ
์ฒ์ ํ๋ก๊ทธ๋๋ฐ์ ๋ฐฐ์ฐ๊ณ ๊ฐ์ฅ ์ดํด๊ฐ ์๋๊ณ ๊ณต๊ฐ๋์ง ์์๋ ๊ฐ๋ฐ์๋ถ๋ค์ ๋ง์ด ์์๋ค. ์ด๋ค ์ค์ฒดํ๋ ํ์ค ์ธ๊ณ์ ๊ฒ์ ์ฝ๋๋ก ๊ตฌํํ๊ณ ํ์ค์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ ๊ฐ๋ฐ์๋ค.
์ ๊ฐ์ ๋ง๋ค์ด์๋ค.
๋น์ฅ ํ๋ฉด์ Hello, Wolrd!
๋ฅผ ์ฐ์ด๋ด๊ณ , ๋ช๋ช ๊ณ์ฐ์ ํธํ๊ฒ ํ๋ ์ ๋์ ๋์๊ฒ ์ ํ ๊ณต๊ฐ์ด ๋์ง ์์๋ค. ์ดํ ๊ณต๋ถ๋ฅผ ํ๋ฉฐ ๊ทธ ๋ง์ ๋ฐ๋ผ๊ฐ๋ค๋ณด๋ ๊ฐ์ฒด์งํฅ
์ ๋๋ฌํ๋ค.
์ฒ์ ์ฑ
๊ฐ์ฒด์งํฅ์ ์ฌ์ค๊ณผ ์คํด
๋ฅผ ์ฝ์์ ๋, ์ฝ๋ค๊ฐ ์ค๊ฐ์ ํฌ๊ธฐํ์๋ค. ๋๋ฌด ์ข์ ์ฑ
์ด๋ผ๊ณ ์ด์ผ๊ธฐ๋ ๋ค์์ง๋ง, ๊ธฐ๋ณธ์ ์ธ ๊ฐ์ฒด์ ๋ํ ๊ฐ๋
์ด ์๋ ์ํ์์
์ฝ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ด์ฉ์ด ๋๋ฌด ์ถ์์ ์ผ๋ก ๋ค๊ฐ์๊ณ ์ฝ์์๋ก ๋ ํท๊ฐ๋ฆฌ๋ ๋๋์ด์๋ค. ๊ทธ๋ ๊ฒ ์๊ฐ์ด ์กฐ๊ธ ๋ ํ๋ฅด๊ณ ์ด๋์ ๋ ์ ์ฐจ์งํฅ์์ ํจ์, ๋ชจ๋์ ๋๋๊ณ ํด๋์ค๋ฅผ
์ฌ์ฉํ๊ธฐ ์์ํ๋ฉด์ ๋ค์ ์ด ์ฑ
์ ํผ์ณ๋ค์๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ์ฑ
์ ์งง์ ๊ฐ๋ฐ์๋ก์์ ์ธ์์์ ๋ด ์ต์ ์์ ์ด ๋์๋ค. ์ ๋ง ์ ๋ง ์ฌ๋ฏธ์๊ฒ ๋ง์น ๋นจ๋ ค๋ค์ด๊ฐ๋ฏ์ด ์ฝ์๊ณ ๋ค ์ฝ๊ณ ๋ ๋ค,
์ ๋ง ํ์ค์ ์๋ ๋ชจ๋ ๊ฑธ ๋ค ์ฝ๋๋ก ๊ตฌํํ ์ ์์ ๊ฒ๋ง ๊ฐ์๋ค.(๋ฌผ๋ก ์ค์ ๋ก ๊ทธ๋ ์ง ์๋ค. ๐คช)
์ฒ์ ๊ฐ์ฒด
๋ผ๋ ๊ฐ๋
์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ธฐ์จ์ ๊ธฐ์ตํ๊ณ ๋์์ ์ด์ ์ฒ์ ๊ฐ์ฒด์งํฅ
์ ๊ถ๊ธ์ฆ์ด ์๊ธฐ์ ๋ถ๋ค์ด ์ฝ๊ฒ ๊ทธ ๋๋(?)์ ๋ฐ์ผ์
จ์ผ๋ฉด ํ๋ ๋ง์์ผ๋ก ์ด ๊ธ์ ์์ฑํ๋ค.
๐ ์ฌ์ ์ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ
์ด๋ ๋ญ๊น? ๋จผ์ ๋จ์ด๋ฅผ ๋ถ๋ฆฌํด๋ณด์. ๊ฐ์ฒด
์ ์งํฅ
๊ทธ๋ฆฌ๊ณ ํ๋ก๊ทธ๋๋ฐ
. ์ฌ์ ์์ ์ด 3๊ฐ์ง ๋จ์ด์ ์ ์๋ฅผ ์ฐพ์๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
- ๊ฐ์ฒด: (๋ช ์ฌ) ํ์๊ฐ ๋ฏธ์น๋ ๋์
- ์งํฅ: (๋ช ์ฌ) ์ด๋ค ๋ชฉํ๋ก ๋ป์ด ์ ๋ฆฌ์ด ํฅํจ
- ํ๋ก๊ทธ๋๋ฐ: (๋ช ์ฌ) ์ปดํจํฐ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ ์ผ. ํ๋ก๊ทธ๋จ ์์ฑ ๋ฐฉ๋ฒ ๋ฐ ์ฝ๋ฉ ๋ฑ ์ผ๋ จ์ ์์ ์ ์์ฐ๋ฅธ๋ค.
๋จ์ํ๊ฒ ์ฌ์ ์ ์๋ฏธ์ด๋ค๋ณด๋ ์์ฃผ ์ง๊ด์ ์ผ๋ก ์๋ฟ์ง๋ ์๋๋ค. ๋ค๋ง, ๋๋ต์ ์ผ๋ก ์ด๋ค ๋์์ด๋ผ๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ฉฐ ์ฝ๋ฉํ๋ ๊ฒ
์ ๋๋ก ์ ๋ฆฌํด๋ณผ ์ ์๋ค. ์กฐ๊ธ๋ ๋์๊ฐ์
๋ฌด์ธ๊ฐ ๊ฐ๊ฐ์ ์ญํ ์ ํ๋ ๋์๋ค๋ก ๋๋๋ ๊ฒ์ ๋ชฉํ๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ
์ด๋ผ๊ณ ๋ ์๊ฐํด๋ณผ ์ ์์ ๊ฒ์ด๋ค. ์ฌ์ ์ ์ผ๋ก ์ต๋ํ ์ ์ถํด๋ณด๋ ๊ฒ์ ์ฌ๊ธฐ๊น์ง๊ฐ ํ๊ณ์ธ ๊ฒ ๊ฐ๋ค.
๊ทธ๋ ๋ค๋ฉด ์ปดํจํฐ๊ณตํ์ ์ผ๋ก(?) ๊ฐ์ฒด์งํฅ์ด๋ผ๋ ๊ฒ์ ๋ฌด์์ผ๊น?
๐ ์ปดํจํฐ๊ณตํ์ (?) ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ
์ผ๋จ ์๋ชจ๋ฅด๊ฒ ์ผ๋ ์ํค๋ฐฑ๊ณผ์์์ ์ค๋ช ์ ์ฐพ์๋ณด์.
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ(Object-Oriented Programming, OOP)์ ์ปดํจํฐ ํ๋ก๊ทธ๋๋ฐ์ ํจ๋ฌ๋ค์ ์ค ํ๋์ด๋ค.
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ปดํจํฐ ํ๋ก๊ทธ๋จ์ ๋ช
๋ น์ด์ ๋ชฉ๋ก์ผ๋ก ๋ณด๋ ์๊ฐ์์ ๋ฒ์ด๋ ์ฌ๋ฌ ๊ฐ์ ๋
๋ฆฝ๋ ๋จ์, ์ฆ "๊ฐ์ฒด"๋ค์ ๋ชจ์์ผ๋ก ํ์
ํ๊ณ ์ ํ๋ ๊ฒ์ด๋ค.
๊ฐ๊ฐ์ ๊ฐ์ฒด๋ ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ๊ณ , ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค.
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ก๊ทธ๋จ์ ์ ์ฐํ๊ณ ๋ณ๊ฒฝ์ด ์ฝ๊ฒ ๋ง๋ค๊ธฐ ๋๋ฌธ์ ๋๊ท๋ชจ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ๋ง์ด ์ฌ์ฉ๋๋ค.
๋ํ ํ๋ก๊ทธ๋๋ฐ์ ๋ ๋ฐฐ์ฐ๊ธฐ ์ฝ๊ฒ ํ๊ณ ์ํํธ์จ์ด ๊ฐ๋ฐ๊ณผ ๋ณด์๋ฅผ ๊ฐํธํ๊ฒ ํ๋ฉฐ, ๋ณด๋ค ์ง๊ด์ ์ธ ์ฝ๋ ๋ถ์์ ๊ฐ๋ฅํ๊ฒ ํ๋ ์ฅ์ ์ด ์๋ค.
๊ทธ๋ฌ๋ ์ง๋์น ํ๋ก๊ทธ๋จ์ ๊ฐ์ฒดํ ๊ฒฝํฅ์ ์ค์ ์ธ๊ณ์ ๋ชจ์ต์ ๊ทธ๋๋ก ๋ฐ์ํ์ง ๋ชปํ๋ค๋ ๋นํ์ ๋ฐ๊ธฐ๋ ํ๋ค.
์์ ๋ด์ฉ์ ์กฐ๊ธ ์ฝ๊ณ ๊ฐ๋จํ๊ฒ ์ ๋ฆฌํด๋ณด์.
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ ํ๋์ ๋ฐฉ๋ฒ์ด๋ค.
ํ ์ค ํ ์ค ๋ช ๋ น์ด๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์๋, โ๊ฐ์ฒดโ๋ผ๋ ํ๋์ ๋จ์์ด์ ๋ฉ์ด๋ฆฌ๋ก ๋๋๋ค.
์ด ๋จ์๋ค์ ์๋ก ์ํฅ์ ์ฃผ๊ณ ๋ฐ์ ์ ์์ผ๋ฉฐ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค.
์ฝ๋ ๋ณ๊ฒฝ(์์ )์ด ์ฝ๊ธฐ ๋๋ฌธ์ ํฐ ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ ๋ ๋ง์ด ์ฌ์ฉํ๋ค.
ํ๋ก๊ทธ๋๋ฐ์ ๋ ๋ฐฐ์ฐ๊ธฐ ์ฝ๊ฒ ํ๊ณ ์ ์ง๋ณด์๋ฅผ ๊ฐํธํ๊ฒ ํ๋ฉฐ, ์ข๋ ์ง๊ด์ ์ผ๋ก ์ฝ๋๋ฅผ ๋ถ์ํ ์ ์๊ฒ ํด์ค๋ค.
ํ์ง๋ง ๋๋ฌด ์ง๋์น๊ฒ ๊ฐ์ฒด๋ฅผ ๋๋๋ ๊ฒ์ ์ค์ ์ธ๊ณ์ ๋ชจ์ต์ ๊ทธ๋๋ก ๋ฐ์ํ์ง ๋ชปํ๋ค.
์์ ๋ฌธ์ฅ์ด ๊ฐ์ฒด์งํฅ์ ์ ๋ถ ์ค๋ช ํด์ฃผ์ง๋ ๋ชปํ๋ค. ๋ค๋ง, ์์ฃผ ๋๋ต์ ์ผ๋ก๋ผ๋ ๊ทธ ๋๋์ ๋ญ์ง ์ ๊ฒ ๊ฐ๋ค. ๋ญ๊ฐ ์ฝ๋๋ฅผ ํ๋ํ๋ ๋ช ๋ น ๋ด๋ฆฌ๋ฏ์ด ์ง๋ ๊ฒ ์๋๋ผ, ํ๋์ ๊ฐ์ฒด๋ผ๋ ๋ฉ์ด๋ฆฌ๋ก ๋๋ ์ ์์ฑํ๋ ๋๋ ์ ๋๋ก๋ง ์ดํดํ๋ฉด ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ฝ๋๋ก ์์ฃผ ๊ฐ๋จํ๊ฒ ์์ฑํด๋ณด๋ฉด ์ด๋จ๊น?
๐ JavaScript ์ฝ๋๋ก ๋ณด๋ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ
๋จผ์ ๊ฐ๋ฏธ(ant)
๋ฅผ ์ฝ๋๋ก ๊ตฌํํด๋ณด๊ณ ์ถ๋ค๊ณ ํด๋ณด์. ์์์ ์ ๋ง ๋จ์ํ๊ฒ ํด๋ณด์.
let ant;
์ด๊ฒ ๋ญ์ง..? ํ ์ ์์ง๋ง, ๋ง ๊ทธ๋๋ก ant๋ฅผ ๊ตฌํํ๋ค. ๊ทธ๋ ์ง๋ง ํ์ฌ ant๋ผ๋ ๋ณ์๋ ์ด๋ ํ ์ ์๋ฏธํ ๊ฐ์ ๊ฐ๊ณ ์์ง ์๋ค. ์ฒ์ฒํ ์ด ant์๊ฒ ์๊ธฐ๋ฅผ ๋ถ์ด๋ฃ์ด๋ณด์.
let ant = { name: 'ant1', age: 1 };
์ด์ ๋ ์ด๋ค๊ฐ? ant๋ฅผ name, age๋ฅผ ํ๋กํผํฐ(์์ฑ)๋ก ๊ฐ๋ object๋ก ํํํจ์ผ๋ก์จ ๊ฐ๋ฏธ๊ฐ ์ด๋ฆ๊ณผ ๋์ด๋ฅผ ๊ฐ๊ฒ ๋๋ค.
ํ๋ฐ ์ฌ๊ธฐ์ ๋ ์์ฌ์ด ๋๋ค. ์ง๊ธ ์ด ๊ฐ๋ฏธ๋ ์ ์ ์ธ ์ํ(ํ๋กํผํฐ)๋ง ๊ฐ๊ณ ์์ ๋ฟ ๋ญ๊ฐ ์ด๋ค ๋์ ์ธ ํ๋(๋ฉ์๋)์ ๊ฐ๊ณ ์์ง ์๋ค.
์ข๋ ์ด์์๋(?) ๊ฐ๋ฏธ๋ฅผ ๋ง๋ค์ด๋ณด์.
let ant = {
name: 'ant1',
age: 1,
move() {
console.log('ant is moving!');
},
};
ant์ ๋ฉ์๋๋ก move๋ฅผ ์์ฑํด์ค์ผ๋ก์จ ant๊ฐ ๋ง์น ์์ง์ด๋ ๋ฏํ ๋์์ ํ ์ ์๊ฒ ๋๋ค. ๋ค๋ง, ์ฌ๊ธฐ์ move ๋ฉ์๋๋ ๋จ์ํ โant is moving!โ์ด๋ผ๋ ๋ฌธ์์ด๋ง console์ ์ถ๋ ฅํด์ฃผ๋ ์ญํ ์ ํ๋ค.
์ฆ, ๊ฐ๋ฏธ์ move ํ๋์ด ๊ฐ๋ฏธ ์ค์ค๋ก์๊ฒ ์ด๋ ํ ์ํฅ๋ ์ฃผ์ง ์๋๋ค.(๊ฐ๋ฏธ์ ์ํ๊ฐ ๋ณํ์ง ์๋๋ค.) ์ผ๋จ ์ด ์ ์ ๋์ด๊ฐ๊ณ ๊ฐ๋ฏธ๋ฅผ ์ข๋ ๋์ ์ธ ์ด๋ค ๋ฌด์ธ๊ฐ(๊ฐ์ฒด)๋ก ๋ง๋ค์์์ ๊ธฐ์ตํ์.
์, ๊ทธ๋ผ ์ด์ ๋๋ค๋ฅธ ์์ฌ์ด ์ค๋ฌผ์ค๋ฌผ ์๊ธด๋ค. ์ธ์์ ๊ฐ๋ฏธ๋ ๋จ 1๋ง๋ฆฌ๋ง ์กด์ฌํ์ง ์๋๋ค.(์ถ์ ์ ์ง๊ตฌ์ ๊ฐ๋ฏธ๋ ์ฝ 2๊ฒฝ ๋ง๋ฆฌ ์์ํ๋ค๊ณ ํ๋ค. ใ ใทใท) ๊ทธ๋ฐ๋ฐ ์ฐ๋ฆฌ๊ฐ ๊ตฌํํ ์ฝ๋๋ก๋ ๊ฐ๋ฏธ๋ฅผ ํ๋ ํ๋ ์์ฑํ๋ฉฐ ์์ฑํด์ผํ๋ค. ์ฌ๊ฐ ๋ฒ๊ฑฐ๋ก์ด ์ผ์ด ์๋ ์ ์๋ค. ์ด์ ์ฌ๊ธฐ์ ์์ฑ์ ํจ์๊ฐ ๋ฑ์ฅํ ์ ์์ง๋ง, ๊ฐ์ฒด๋ฅผ ๊ตฌํํ๋ ๋ํ์ ์ธ ๋ฐฉ๋ฒ์ธ class๋ฅผ ์จ๋ณด๋ ค๊ณ ํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์ class๋ 2015๋ ES6์์ ๋์ ๋์๋ค. ๊ทธ ๋ด๋ถ์ ๊ตฌํ์ด ๊ฒฐ๊ตญ์ ์๋ฐ์คํฌ๋ฆฝํธ์ prototype์ ๊ธฐ๋ฐ์ผ๋ก ํ๊ธฐ์ ๋น๊ผฌ๋ ์ด์ผ๊ธฐ๋ฅผ ๋ง์ด ๋ฃ๋๋ค.(์ฐ class๋ก ์ธ์ ํ ์ ์๋ค๋ ๋ญ ๊ทธ๋ฐ ์ด์ผ๊ธฐโฆ)
๊ฑฐ๋์ ๋ฏธํ๊ณ class๋ฅผ ์ด์ฉํด์ ant๋ฅผ ํํํด๋ณด์.
// ๋ณดํต class๋ ์ฒซ๊ธ์๋ฅผ ๋๋ฌธ์๋ก ์ด๋ค.
// (์๋ฌธ์๋ก ์ด๋ค๊ณ ๋ญ ํฐ์ผ๋๋๊ฑด ์๋์ง๋ง, ํ๋์ ์ฝ์์ด๋ผ ์๊ฐํ์.)
class Ant {
constructor(name, age) {
this.name = name;
this.age = age;
}
move() {
console.log('ant is moving!');
}
}
const ant1 = new Ant('ant1', 1);
const ant2 = new Ant('ant2', 3);
const ant3 = new Ant('ant3', 8);
์ง ! ์ด์ ์ฐ๋ฆฌ๋ Ant๋ผ๋ class๋ฅผ ์ ์ธํด์ค์ผ๋ก์จ, ์ ๋ง ๊ฐ๋จํ๊ฒ ์ฌ๋ฌ๋ง๋ฆฌ์ ant๋ฅผ ๊ตฌํํ ์ ์๊ฒ ๋์๋ค. ๊ฐ๋ฏธ๋ค์ ๊ฐ์์ name์ด ์๊ณ , age๊ฐ ์์ผ๋ฉฐ move ๋ฉ์๋๋ฅผ ํตํด ์์ง์ผ ์ ์๋ค.
์ฌ๊ธฐ์ ์ ๊น ์ฌ์ด๊ฐ๊ธฐ ์ํด ์์ ์ฝ๋๋ฅผ ์ดํด๋ณด์.
- Ant class๊ฐ ๊ฐ๋ name๊ณผ age, ์ฆ ํ๋กํผํฐ๋ ๊ฐ๋ฏธ์
์ํ
๋ฅผ ๋ํ๋ด๋ฉฐ instance ์์ฑ ์, ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๊ฐ(์ด๋ฆ, ๋์ด)์ ์ ๋ฌํด์ค ์ ์๋ค. - Ant class๊ฐ ๊ฐ๋ move๋ ๋ฉ์๋, ์ฆ ๊ฐ๋ฏธ์
ํ๋(๋์)
์ ๋ํ๋ด๋ฉฐ instance ์์ฑ ์, ๋ชจ๋ ๊ฐ๋ฏธ instance๋ move๋ฅผ ๊ฐ๊ณ ์๋ค.
๋ค์ ๋งํด์ ์ฐ๋ฆฌ๋ ๊ฐ๋ฏธ
๋ผ๋ ๊ณค์ถฉ์ ํํํ ์ ์๋ ์ด๋ค ์ถ์์ ์ธ ๊ฐ๋
์ class๋ฅผ ๋ง๋ค๊ณ ์ด class๋ฅผ ํตํด์ ์ค์ฒดํ๋ ํ๋ ํ๋์ ๊ฐ๋ฏธ๋ฅผ ๋ง๋ค์ด๋ผ ์ ์๋ ๊ฒ์ด๋ค.
์ฌ๊ธฐ์ ํ๊ฐ์ง ์ค์ ์ฐ๋ฆฌ๊ฐ ์ด์๊ฐ๋ ์ธ์์์์ ๊ฐ๋
๊ณผ ์ฐจ์ด๋ฅผ ์๊ฐํด๋ณด์. ์ฐ๋ฆฌ๊ฐ ์์ง ๊ฐ๋ฏธ
๋ผ๋ ๋จ์ด๊ฐ ์กด์ฌํ์ง ์์๋ ์์ , ์ฐ๋ฆฌ๋ ์ฃผ์์ ๋์๋ค๋๋ ์ค์ ๊ฒ๊ณ 3๋ฑ์ ์ ๋ค๋ฆฌ๊ฐ ๋ฌ๋ฆฐ ์์ฃผ ์์ ๊ณค์ถฉ๋ค(ํ์ฌ์
์ฐ๋ฆฌ๊ฐ ๊ฐ๋ฏธ๋ผ๊ณ ๋ถ๋ฅด๋)์ ๋ณด๋ฉด์ โ์ด๋ฐ ์ ๋ค์ ๊ฐ๋ฏธ๋ผ๊ณ ๋ถ๋ฅด์โํ์ ๊ฒ์ด๋ค. ํ์ง๋ง ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์์๋ ์ด ์ ๊ทผ์ด ๋ฐ๋๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. ๋จผ์ ์ฐ๋ฆฌ๊ฐ ํฐ ๊ฐ๋
์ธ Ant class ๋ผ๋ ๊ฐ๋
์ ๋ง๋ค์ด๋๊ณ
๊ทธ class์์ ์ค์ฒดํ๋ ํ๋ํ๋์ ๊ฐ๋ฏธ๋ค์ ๋ง๋ค์ด๋ด๋ ๊ฒ์ด๋ค. ์ด๋ฐ ๊ด์ ์ผ๋ก ์๊ฐํ๋ฉด ์กฐ๊ธ์ ๊ฐ์ฒด์งํฅ์ผ๋ก ๋ฌด์ธ๊ฐ๋ฅผ ๋ง๋ค์ด๋ด๋ ํ์๊ฐ ์ดํด๋ ๊ฒ์ด๋ค.
๊ทธ๋ผ ์ด์ ์๊น ์ธ๊ธํ๋ ์ด๋๊ฐ ์์ฌ์ด move ๋ฉ์๋๋ฅผ ์ข๋ ํ์ค๊ณผ ๋ง๊ฒ ๋ฐ๊ฟ๋ณด์. ์ฐ์ , ์ด๋ฅผ ์ํด ๊ฐ๋ฏธ์ ์ด๊ธฐ ์์น๋ฅผ ๋ฐ๊ณ moveํ ๋๋ง๋ค ๊ทธ ์์น์์ ๋๋ค์ผ๋ก +1 ํน์ -1๋งํผ ์ด๋ํ๊ฒ ๋ง๋ค์ด๋ณด์.
class Ant {
constructor(name, age, position) {
this.name = name;
this.age = age;
this.position = position;
}
move() {
if (Math.random() < 0.5) {
this.position--;
} else {
this.position++;
}
console.log(`${this.name} ๊ฐ๋ฏธ์ ์์น๋ ${this.position} ์ง์ ์
๋๋ค.`);
}
}
const ant1 = new Ant('ant1', 2, 0);
const ant2 = new Ant('ant2', 3, -5);
const ant3 = new Ant('ant3', 5, 15);
์, ์ด์ move๋ผ๋ ๋ฉ์๋(ํ๋)๋ฅผ ํตํด ๊ฐ๊ฐ์ ๊ฐ๋ฏธ ๊ฐ์ฒด์ position ํ๋กํผํฐ(์ํ)๋ฅผ ๋ณ๊ฒฝํ๋ฉด์, ๋ง์น ์ค์ ๊ฐ๋ฏธ๊ฐ ์ด๋ฆฌ์ ๋ฆฌ ์์ง์ด๋ ๊ฑธ ํํํ ์ ์๋ค. ์์ฃผ ๊ฐ๋จํ ์์์ง๋ง, ์ฒ์ ๋ง๋ค์๋ ์ด๋ค ๊ฐ๋ ๋ค์ด์์ง ์์(๋ฌผ๋ก undefined๋ก ์ด๊ธฐํ๋๊ฒ ์ง๋ง) ant ๋ณ์์ ๋นํ๋ฉด ๋ง์ ๊ฑธ ํ ์ ์๋ ๊ฐ๋ฏธ๊ฐ ๋ง๋ค์ด์ก๋ค.
๐ ๊ธ์ ๋ง์น๋ฉฐโฆ
์์ฆ ์ ๋ง ์ ๋ง ๊ธ์ ์ ์ฐ๊ณ ์ถ์ ์์ฌ์ด ๋ง์ด ๋ ๋ค. ๊ธ ์์ฑ๊ณผ ์ฝ๋ ์์ฑ์ ์ธ์ด๋ง ๋ค๋ฅด์ง ๊ทธ ํ์ ์์ฒด๋ ์ ๋ง ๋๊ฐ์ ๊ฒ ๊ฐ๋ค. ํนํ ์์ฆ์ ์ฌ๋์ด ์ฝ๊ธฐ ํธํ, ๊ฐ๋์ฑ ์ข์ ์ฝ๋๋ฅผ ๋ง์ด ๊ฐ์กฐํ๋๋งํผ ๋ ๊ทธ๋ฐ ๊ฒ ๊ฐ๋ค. ์กฐ๊ธ ์๊ธด ๊ฑด ์ฝ๋๋ฅผ ์ต๋ํ ๋ถ๋ฆฌํ๊ณ ์ฌํ์ฉ ๊ฐ๋ฅํ๊ฒ ํ๊ณ ์ข๋ ๋์ ๋ฌธ๋ฒ์ ์ฒดํฌํ๋ค๋ณด๋ ์ด์ํ๊ฒ ๊ธ์ ์์ฑํ ๋๋ ๊ทธ๋ฐ ์ต๊ด์ด ์๊ธด๋ค. ์ด๋ป๊ฒ ์ข๋ ํํธ๋ฅผ ์ ๋๋๊ณ , ํ๋ฆ์ ์ ๊ฐ์ ธ๊ฐ๋ฉด์ ์ข๋ ์ข์ ํํ์ ์ธ๊น ์๊ฐํ๋ฉด์ ์จ๋ด๋ ค๊ฐ๊ฒ ๋๋ค. ์์ฃผ ์์ฃผ ์ข์ ์๋์ง๋ผ๊ณ ์๊ฐํ๋ค. ๐ฅณ
์ด๋ฒ ๊ธ์ ๊ฐ๊ฐ์ ํํธ๋ค์ ๊ฐ๋ฏธ ์ด๋ชจ์ง๋ก ํํํด๋ดค๋ค. ๊ฐ๋ฏธ ํํธ ํ๋ํ๋๊ฐ ๋ชจ์ฌ์ ์ด ๊ธ ์ ์ฒด๋ฅผ ์์ฑํด์ฃผ๋ ๊ฒ์ ํตํด ๊ฐ์ฒด์งํฅ์์ ์ฌ๋ฌ ๊ฐ์ฒด๋ค์ด ๋ชจ์ฌ ํฐ ์ํํธ์จ์ด๊ฐ ์์ฑ๋๋ ๋๋์
ํํํด๋ณด๊ณ ์ถ์๋ค.(์ ์ ๋ฌ๋์์์ง๋ ๋ชจ๋ฅด๊ฒ ๋ค.) ์ด๋ ๋ฏ ๊ฐ์ฒด์งํฅ์์ ๊ฐ์ฒด๋ค์ด ๊ทธ๋ค๋ง์ ์ญํ
๊ณผ ์ฑ
์
์ ๊ฐ๊ณ ์๋ก๋ฅผ ๋์๊ฐ๋ฉฐ(ํ๋
ํ๋ฉฐ) ๊ฑฐ๋ํ ํ๋ก๊ทธ๋จ์ ๋ง๋ค์ด๊ฐ๋ค. ์ด๋ฒ ๊ธ์ ํตํด
๊ฐ์ฒด
ํ๋์ ๋ํด ์ง์คํ๋ค๋ฉด, ๋ค์ ํธ์์ ๊ฐ ๊ฐ์ฒด๋ค์ด ์ด๋ป๊ฒ ์๋ก ๋์๊ฐ๋ฉฐ ์ข๋ ์ค์ผ์ผ์
๋ ๋ฌด์ธ๊ฐ๋ฅผ ๋ง๋ค์ด๊ฐ๋์ง ์ดํด๋ณด๋ ค ํ๋ค.
์์ง ๋ง์ด ๋ถ์กฑํ ๊ฐ๋ฐ์์ ๋๋ค. ๋ด์ฉ์ ๋ํ ์ค๋ฅ๊ฐ ์๋ค๋ฉด, ์ธ์ ๋ ํธํ๊ฒ ๋ง์ํด์ฃผ์ธ์! ๊ฐ์ฌํฉ๋๋ค!