[Js] ์์ฑ์์ new | javascript์ ๊ฐ์ฒด ์งํฅ ํน์ง | ๊ฐ์ฒด
- -
ํด๋น ํฌ์คํ ์ "์ํ์ฝ๋ฉ"์ ์ด๊ณ ์ ๋์ ๊ฐ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฌ๋ฆฐ ๊ฒ์๊ธ ์ ๋๋ค.
์์ ์ ์ธ ์ฉ๋๊ฐ ์๋, ๊ฐ์ธ ๊ณต๋ถ ์ ๋ฆฌ ๋ชฉ์ ์ผ๋ก ์ฌ๋ฆฌ๋ ๊ธ์์ ๋ฏธ๋ฆฌ ์๋ฆฝ๋๋ค.
์์ฑ์์ new
๊ฐ์ฒด
์๋ฐ์คํฌ๋ฆฝํธ ์ธ์ด์ ์ํ๋ ๊ณ์ด์ ์ธ์ด๋ค์ prototype - based programming์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
๊ฐ์ฒด๋ ์๋ก ์ฐ๊ด๋ ๋ณ์์ ํจ์๋ฅผ ๊ทธ๋ฃนํํ ๊ทธ๋ฆ์ด๋ผ๊ณ ํ ์ ์๋ค. ๊ฐ์ฒด ๋ด์ ๋ณ์๋ฅผ ํ๋กํผํฐ(property) ํจ์๋ฅผ ๋ฉ์๋(method)๋ผ๊ณ ๋ถ๋ฅธ๋ค. ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด๋ณด์.
<script>
var person = {}
person.name = 'egoing';
person.introduce = function(){
return 'My name is '+this.name;
}
document.write(person.introduce());
</script>
์ ์ฝ๋์์ this๋ ํจ์๊ฐ ์ํด์๋ ๊ฐ์ฒด ์ฆ person์ด๋ผ๋ ๋ณ์๊ฐ ๋ด๊ณ ์๋ ๊ฐ์ฒด๋ฅผ ์๋ฏธํ๋ค.
๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๊ณผ์ ์ ๋ถ์ฐ๋์ด ์๋ค. ๊ฐ์ฒด๋ฅผ ์ ์ ํ ๋ ๊ฐ์ ์ ํ ํ๋๋ก ์ฝ๋๋ฅผ ๋ฐ๊ฟ๋ณด์.
<script>
var person = {
'name' : 'egoing',
'introduce' : function(){
return 'My name is '+this.name;
}
}
document.write(person.introduce());
</script>
๊ฐ๋ ์ฑ๋ ์ข๊ณ , ๋ด์ฉ์ด ์ค๊ฐ์ ๋ผ์ด๋ค๊ฑฐ๋ ๋ณ์กฐ๋๋ ์ํฉ์ ์กฐ๊ธ ๋ฐฉ์ง ํ ์ ์๊ฒ ๋๋ค.
์์ ๊ฐ์ด ๊ฐ์ฒด๋ฅผ ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ์์ฑํ๋ค๊ณ ํด๋ณด์.
ํ์ง๋ง name์ด๋ผ๋ ๋ถ๋ถ๊ณผ ์๋ introduce๊ฐ ์ค๋ณต๋๋ค.
์์ฐํ ๋ค๋ฅธ ๋ฐ์ดํฐ๊ฐ ๋ค์ด๊ฐ ์์ง๋ง ์ค๋ณต๋๋ ๋ถ๋ถ์ด ๋ง์ด ์๊ธด๋ค๋ ๋ป์ด๋ค.
์ฆ ์ฝ๋์ ์์ด ๋ง์์ง๊ณ , ์ ์ง๋ณด์๊ฐ ์ด๋ ค์์ง๋ฉฐ, ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๋ ํ์์ด ๋ฐ์ํ๋ ๊ฒ์ด๋ค.
์ด๋ ๋ฏ ๋ง์ฝ ๋ค๋ฅธ ์ฌ๋์ ์ด๋ฆ์ ๋ด์ ๊ฐ์ฒด๊ฐ ํ์ํ๋ค๋ฉด ๊ฐ์ฒด์ ์ ์๋ฅผ ๋ฐ๋ณตํด์ผ ํ ๊ฒ์ด๋ค.
๊ฐ์ฒด์ ๊ตฌ์กฐ๋ฅผ ์ฌํ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ด ํ์ํ๋ค. ์ด ๋ ์ฌ์ฉํ๋ ๊ฒ์ด ์์ฑ์๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ผ๋ ์ธ์ด๋ฅผ ํจ์ํ ์ธ์ด๋ผ๊ณ ํ๊ณ , ํจ์๋ผ๋ ์ธ์ด๋ฅผ ์นดํ ๊ณ ๋ฆฌ์์ ์ฌ์ฉํ๊ธฐ๊น์ง ํ๋ค๋ ๊ฒ์
์๋ฐ์คํฌ๋ฆฝํธ์์ ํจ์๊ฐ ์ฐจ์งํ๋ ์์์ ์์ํ๋ ๊ฒ์ด๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ดํดํ๋ ๊ฐ์ฅ ์ค์ํ ํค์๋๋ "๊ฐ์ฒด"์ด๊ธฐ ์ ์ "ํจ์"์ด๋ค.
์์ฑ์
์์ฑ์(constructor)๋ ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ์ญํ ์ ํ๋ ํจ์๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์ ํจ์๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๋ก์ง์ ๋ฌถ์์ด ์๋๋ผ ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ์ฐฝ์กฐ์๋ผ๊ณ ํ ์ ์๋ค.
<!DOCTYPE html>
<html>
<head>
<title>์์ฑ์</title>
</head>
<body>
<script type="text/javascript">
function Person(){}// Person์ด๋ผ๋ ๊ฐ์ฒด๋ฅผ ํจ์๋ก ์ฐฝ์กฐ.
var p = new Person();//new๊ฐ ๋ถ์ผ๋ฉด ๋ค์ ํจ์๋ฅผ ์์ฑ์๋ผ๊ณ ๋ถ๋ฆ.== ๊ฐ์ฒด์ ์์ฑ์
p.name = 'haeun';
p.introduce = function(){
return 'My name is '+this.name; //ํจ์์์ this๋ ํจ์๊ฐ ๊ฐ๋ฅดํค๋ ๊ฐ์ฒด ์ฆ p์ด๋ค.
}
document.write(p.introduce());
</script>
</body>
</html>
๋ง์ผ ์ ์ฝ๋์์ new๋ผ๋ ๊ฒ์ ๋ถ์ด์ง ์๊ณ ์ ๋ ฅํด๋ณธ๋ค๋ฉด, defined๋ผ๊ณ ์ถ๋ ฅ๋๋ค.
์ด๋, ๋ฆฌํดํด์ฃผ๋ ๊ฐ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค.
ํ์ง๋ง new๋ผ๋ ํค์๋๋ฅผ ๋ถ์ด๋ฉด ์๋ก์ด ๊ฐ์ฒด(๋น์ด์๋ ๊ฐ์ฒด)๋ฅผ ๋ง๋ ํ์ ์ด๋ฅผ ๋ฆฌํด(๋ฐํ)ํด์ค๋ค.
์์ ์ฝ๋๋ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ณ์ p์ ๋ด์๋ค.(Person()์ด๋ผ๋ ๊ฐ์ฒด๋ p์ ๋ด์ ๊ฒ)
์ฌ๋ฌ์ฌ๋์ ์ํ ๊ฐ์ฒด๋ฅผ ๋ง๋ ๋ค๋ฉด ์๋์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ ๊ฒ์ด๋ค.
<!DOCTYPE html>
<html>
<head>
<title>์์ฑ์</title>
</head>
<body>
<script type="text/javascript">
function Person(){}
var p1 = new Person();//1๋ฒ์งธ ๊ฐ์ฒด ์์ฑ
p1.name = 'haeun';
p1.introduce = function(){
return 'My name is '+this.name;
}
document.write(p1.introduce()+"<br />");
var p2 = new Person(); //2๋ฒ์งธ ๊ฐ์ฒด ์์ฑ
p2.name = 'admin';
p2.introduce = function(){
return 'My name is '+this.name;
}
document.write(p2.introduce());
</script>
</body>
</html>
๋ณ๋ก ๊ฐ์ ๋ ๊ฒ์ด ์๋ค.
์์ฑ์ ๋ด์์ ์ด ๊ฐ์ฒด์ ํ๋กํผํฐ๋ฅผ ์ ์ํ๊ณ ์๋ค.
์ด๋ฌํ ์์ ์ ์ด๊ธฐํ๋ผ๊ณ ํ๋ค. ์ด๋ฅผ ํตํด์ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ด ๋ํญ ๋์์ก๋ค.
<!DOCTYPE html>
<html>
<head>
<title>์์ฑ์</title>
</head>
<body>
<script type="text/javascript">
function Person(name){
this.name = name;
this.introduce = function(){
return 'My name is '+this.name+'<br />';
}
}
var p1 = new Person('haeun'); //1๋ฒ์งธ ๊ฐ์ฒด
var p2 = new Person('admin'); //2๋ฒ์งธ ๊ฐ์ฒด
document.write(p1.introduce());
document.write(p2.introduce());
</script>
</body>
</html>
์ฝ๋๋ฅผ ํตํด์ ์ ์ ์๋ฏ์ด ์์ฑ์ ํจ์๋ ์ผ๋ฐํจ์์ ๊ตฌ๋ถํ๊ธฐ ์ํด์ ์ฒซ๊ธ์๋ฅผ ๋๋ฌธ์๋ก ํ์ํ๋ค.
์ ์ฝ๋๋ฅผ ๋ณด๋ฉด, introduce๋ผ๋ ๋ฉ์๋ ์ฝ๋๊ฐ ๋จ ํ๋ฒ๋ง ์ ์ํ์๋ค. -> ๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋๋ง๋ค ์คํ๋๋ฉฐ ๋ง๋ค์ด์ง๊ฒ ๋์ด ์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ก๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์์ฑ์์ ํน์ง
์ผ๋ฐ์ ์ธ ๊ฐ์ฒด์งํฅ ์ธ์ด์์ ์์ฑ์๋ ํด๋์ค์ ์์์ด๋ค. ํ์ง๋ง ์๋ฐ์คํฌ๋ฆฝํธ์์ ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ์ฃผ์ฒด๋ ํจ์๋ค.
ํจ์์ new๋ฅผ ๋ถ์ด๋ ๊ฒ์ ํตํด์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์ ์๋ค๋ ์ ์ ์๋ฐ์คํฌ๋ฆฝํธ์์ ํจ์์ ์์์ ์์ํ๋ ๋จ์์ด๋ฉด์ ๋ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์ถ๊ตฌํ๋ ์์ ๋ก์์ ๋ณด์ฌ์ฃผ๋ ์ฌ๋ก๋ผ๊ณ ํ ์ ์๋ค.
'Languages > Java Script' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Js] this | ํจ์ํธ์ถ | ๋ฉ์๋์ ํธ์ถ | allpy, call | ๊ฐ์ฒด (0) | 2021.02.04 |
---|---|
[Js] ์ ์ญ ๊ฐ์ฒด | ์ ์ญ๊ฐ์ฒด API (0) | 2021.02.04 |
[Js] ๊ฐ์ฒด์งํฅ | javascript ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ | ๋ฌธ๋ฒ (0) | 2021.02.04 |
[Js] ํจ์์ ํธ์ถ | ์๋ฐ์คํฌ๋ฆฝํธ ํจ์ ํธ์ถ | apply (0) | 2021.02.04 |
๋น์ ์ด ์ข์ํ ๋งํ ์ฝํ ์ธ
์์คํ ๊ณต๊ฐ ๊ฐ์ฌํฉ๋๋ค