ํด๋น ํฌ์คํ
์ "์ํ์ฝ๋ฉ"์ ์ด๊ณ ์ ๋์ ๊ฐ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฌ๋ฆฐ ๊ฒ์๊ธ ์
๋๋ค.
์์
์ ์ธ ์ฉ๋๊ฐ ์๋, ๊ฐ์ธ ๊ณต๋ถ ์ ๋ฆฌ ๋ชฉ์ ์ผ๋ก ์ฌ๋ฆฌ๋ ๊ธ์์ ๋ฏธ๋ฆฌ ์๋ฆฝ๋๋ค.
์์(inheritance)์ด๋?
๊ฐ์ฒด๋ ์ฐ๊ด๋ ๋ก์ง๋ค๋ก ์ด๋ฃจ์ด์ง ์์ ํ๋ก๊ทธ๋จ์ด๋ผ๊ณ ํ ์ ์๋ค.
์์์ ๊ฐ์ฒด์ ๋ก์ง์ ๊ทธ๋๋ก ๋ฌผ๋ ค ๋ฐ๋ ๋ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์ ์๋ ๊ธฐ๋ฅ์ ์๋ฏธํ๋ค. ๋จ์ํ ๋ฌผ๋ ค๋ฐ๋ ๊ฒ์ด๋ผ๋ฉด ์๋ฏธ๊ฐ ์์ ๊ฒ์ด๋ค. ๊ธฐ์กด์ ๋ก์ง์ ์์ ํ๊ณ ๋ณ๊ฒฝํด์ ํ์๋ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์ ์๊ฒ ํด์ค๋ค.
์ฆ, ์ฝ๊ฒ ์ค๋ช
ํ์๋ฉด ๊ฐ์ฒด๋ ๋ณ์์ ๋ฉ์๋๋ฅผ ๋ฌถ์ด๋์ ๋ฌถ์ ์ด๋ผ๊ณ ๋ณด๊ณ ์ด๋ฌํ ๊ฐ์ฒด์ ์์ฑ์ ๊ทธ๋๋ก ๋ฌผ๋ ค๋ฐ์ ์๋
๊ฐ์ฒด (๋ถ๋ชจ๊ฐ์ฒด์ ๋ณ์์ ๋ฉ์๋ ๋ฅผ ๋ฌผ๋ ค๋ฐ์) ๋ฅผ ๋ง๋ค๊ณ , ์์ ํ๊ณ ๋ณ๊ฒฝ๊ฐ๋ฅํ ๊ฒ์ด ๋ฐ๋ก ์์์ธ ๊ฒ์ด๋ค.
์๋ ์ฝ๋๋ ์ด์ ์๊ฐ์ ์ดํด๋ณธ ์ฝ๋๋ค.
<script>
function Person(name){
this.name = name;
this.introduce = function(){
return 'My name is '+this.name;
}
}
var p1 = new Person('haeun');
document.write(p1.introduce()+"<br />");
</script>
์ ์ฝ๋์ ๊ฒฐ๊ณผ๋ : My name is haeun์ด๋ค.
์ ์ฝ๋๋ฅผ ์๋์ ๊ฐ์ด ๋ฐ๊พธ์ด ๋ณด์!
๊ฒฐ๊ณผ๋ ๊ฐ์ง๋ง ์ด ์ฝ๋๋ ์์์ ์ค๋นํ๋ ๊ณผ์ ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
<script>
function Person(name){
this.name = name;
}
Person.prototype.name=null;
Person.prototype.introduce = function(){
return 'My name is '+this.name;
}
var p1 = new Person('haeun');
document.write(p1.introduce()+"<br />");
</script>
์์ฑ์ ๋ฐ์์ prototype์ด๋ผ๋ ํน์ํ ์ฝ์๋ ์์ฑ์ name์ ์ค ๊ฒ์ด๋ค.
์์์ ํ๊ธฐ ์ํ ๊ธฐ๋ณธ์ ์ธ ์ค๋น๋ฅผ ๋ง์ณค์ผ๋, ์ด์ ์์์ ํด๋ณด์!
์๋ ์ฝ๋๋ programmer๋ผ๋ ๊ฐ์ฒด๋ฅผ Person์ ์์ํ์ฌ, introduce๋ผ๋ ์๋ ์์ฑ์ ์ฌ์ฉํ๋ ์์ ์ด๋ค.
<script>
function Person(name){
this.name = name;
}
Person.prototype.name=null;
Person.prototype.introduce = function(){
return 'My name is '+this.name;
}
function Programmer(name){
this.name = name;
}
Programmer.prototype = new Person();
var p1 = new Programmer('haeun');
document.write(p1.introduce()+"<br />");
</script>
Programmer์ด๋ผ๋ ์์ฑ์๋ฅผ ๋ง๋ค์๋ค.
๊ทธ๋ฆฌ๊ณ ์ด ์์ฑ์์ prototype๊ณผ Person์ ๊ฐ์ฒด๋ฅผ ์ฐ๊ฒฐํ๋๋ Programmer ๊ฐ์ฒด๋ ๋ฉ์๋ introduce๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋์๋ค. Programmer๊ฐ Person์ ๊ธฐ๋ฅ์ ์์ํ๊ณ ์๋ ๊ฒ์ด๋ค.
๋จ์ํ ๋๊ฐ์ ๊ธฐ๋ฅ์ ๊ฐ๊ฒ ๋๋ ๊ฒ์ด๋ผ๋ฉด ์์์ ์์๋ ์ฌ๋ผ์ง ๊ฒ์ด๋ค. ๋ถ๋ชจ์ ๊ธฐ๋ฅ์ ๊ณ์น ๋ฐ์ ํ ์ ์๋ ๊ฒ์ด ์์์ ๊ฐ์น๋ค.
์์ ์ฝ๋๊ฐ ์ ์ดํด๊ฐ ๋์ง ์๋๋ค๋ฉด ์๋ ์์์ ์ฐธ๊ณ ํด๋ณด์.
www.youtube.com/watch?v=mM-4t2J0lYM&feature=emb_logo
VIDEO
์ฝ๊ฒ ๋งํ์๋ฉด ์์ํ (๊ธฐ๋ฅ์ ๊ฐ์ ธ์ค๊ณ ์ถ์) ๊ฐ์ฒด๋ฅผ ์์ฑ์๋ก ๋ง๋ ๊ฒ์
์๋ก ๋ง๋ค ๊ฐ์ฒด์ prototype๊ฐ์ผ๋ก ์ฃผ๋ฉด ๋๋ ๊ฒ์ด๋ค.
์ด์ ์ฝ๋๋ฅผ ์กฐ๊ธ ๋ฐ๊พธ์ด, ์์ ๋ฟ ์๋๋ผ ๊ทธ ๊ธฐ๋ฅ์ ์์ ํน์ ๋ณ๊ฒฝํ๋ ๊ณผ์ ์ ์ดํด๋ณด๋๋ก ํ์.
<!DOCTYPE html>
<html>
<head>
<title>์์ฑ์</title>
</head>
<body>
<script type="text/javascript">
function Person(name){//Person์ ๋ถ๋ชจ ๊ฐ์ฒด๋ผ๊ณ ํ ์ ์์
this.name = name;
}
Person.prototype.name=null;
Person.prototype.introduce = function(){
return 'My name is '+this.name;
}
function Programmer(name){ //Programmer์ด๋ผ๋ ๊ฐ์ฒด ์์ฑ
this.name = name;
}
Programmer.prototype = new Person(); // ์์๋ ์์ฑ์๋ฅผ ๋ด๊ณ ์์
Programmer.prototype.coding = function(){
return "hello world";
}
var p1 = new Programmer('haeun');
document.write(p1.introduce()+"<br />");
document.write(p1.coding()+"<br />");
function Designer(name){
this.name = name;
}
Designer.prototype = new Person();
Designer.prototype.design = function(){
return "beautiful~!!";
}
var p2 = new Designer('admin');
document.write(p2.introduce()+"<br />");
document.write(p2.design()+"<br />");
</script>
</body>
</html>
๊ฒฐ๊ณผ๋ ์๋์ ๊ฐ๋ค.
์ด๋ ๊ฒ ๋ถ๋ชจ์๊ฒ ์์๋ฐ์ ๊ธฐ๋ฅ์ ๋ณ๊ฒฝํ๊ฑฐ๋ ์ถ๊ฐํ ์๋ ์๋ ๊ฒ์ด๋ค.
์์์์ ๊ฐ์ฅ ํต์ฌ์ ์ธ ์ญํ ์ ๋ด๋นํ ๊ฒ์ prototype์ธ๋ฐ, ์๋ฐ์คํฌ๋ฆฝํธ๋ 'prototype based language' ๋ผ๊ณ ๋ ํ๋ค.
๊ทธ๋งํผ ์๋ฐ์คํฌ๋ฆฝํธ(๊ฐ์ฒด,ํจ์ ๋ฑ)์์ ๋งค์ฐ ์ค์ํ ํ์
์ด๋ค.