๋ถ‰์€๊ฑฐ์œ„ ๋…ธํŠธ / GoOSe Note

[Actionscript] About prototype

๋‘ฅ์ง€
Development
๋ถ„๋ฅ˜
ETC
๋“ฑ๋ก์ผ
2019-06-30 04:50:12
์กฐํšŒ์ˆ˜
817
์ข‹์•„์š”
0

ํด๋ž˜์Šค ๊ฐ์ฒด๋‚˜ ํ•จ์ˆ˜๊ฐ์ฒด๋ฅผ ์ปจํŠธ๋กค ํ•  ์ˆ˜ ์žˆ๋Š”๊ฒƒ์ด prototype๊ฐ์ฒด์ด๋‹ค. ์‚ฌ์šฉ๊ตฌ์กฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

ObjectName.prototype.valueName = "value";
ObjectName.prototype.methodName = function() { };

as2.0์—์„œ๋Š” MovieClip.prototype.methodName = function() { }์œผ๋กœ ์‚ฌ์šฉํ•ด์™”๋Š”๋ฐ ํ˜•ํƒœ๋Š” ๋™์ผํ•˜๋‹ค.
์—ฌํƒœ๊นŒ์ง€๋Š” MovieClip์ด๋‚˜ String๊ฐ™์€ ๊ธฐ๋ณธ๊ฐ์ฒด๋ฅผ ํ†ตํ•˜์—ฌ prototype๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ  instance.methodName(); ํ˜•ํƒœ๋กœ ํ˜ธ์ถœํ•œ๋‹ค. ์—ญ์‹œ๋‚˜ as2.0์ด๋‚˜ 3.0์ด๋‚˜ ์‚ฌ์šฉํ˜•ํƒœ๋Š” ๋™์ผํ•œ๋‹ค.

ํ™œ์šฉ ํ˜•ํƒœ๋Š” ์•„๋ž˜์˜ ์˜ˆ์ œ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ•ด์•ผํ•œ๋‹ค.

prototype ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ž˜์Šค ์ˆ˜์ •ํ•˜๊ธฐ ์˜ˆ์ œ

// ํ•จ์ˆ˜ ๋งŒ๋“ค๊ธฐ
function Employee():void {
  this.age = 20;
  this.salary = 2000;
}
var worker = new Employee(); // Employeeํ•จ์ˆ˜๋กœ worker๋ผ๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ ๋‹ค.

trace(worker.age); // work๊ฐ์ฒด์˜ age ์†์„ฑ๊ฐ’ ํ˜ธ์ถœ. "20"์ถœ๋ ฅ

Employee.prototype.company = "Google corp"; // Employee ํ”„๋กœํ† ํƒ€์ž…์„ ์ด์šฉํ•˜์—ฌ ๊ฐ’๋„ฃ๊ธฐ
worker.com2 = "concon"; // ์ธ์Šคํ„ด์Šค๋ฅผ ํ†ตํ•˜์—ฌ ๊ฐ’๋„ฃ๊ธฐ

trace(worker.company); // "Google corp" ์ถœ๋ ฅ
trace(worker.com2); // "concon" ์ถœ๋ ฅ

trace("------------------------");

var worker2 = new Employee(); // Employeeํ•จ์ˆ˜๋กœ worker2๋ผ๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ ๋‹ค.
trace(worker2.company); // "Google corp" ์ถœ๋ ฅ
trace(worker2.com2); // undefined  ์ถœ๋ ฅ.

// Employeeํ•จ์ˆ˜์—์„œ getBonus๋ผ๋Š” ๋ฉ”์„œ๋“œ ๋งŒ๋“ค๊ธฐ.
Employee.prototype.getBonus = function(percentage:int):Number {
  return this.salary * (percentage / 100);
}

trace(worker.getBonus(10)); // "200" ์ถœ๋ ฅ

์ถ”๊ฐ€์„ค๋ช…

  • ๋ชจ๋“  ํด๋ž˜์Šค์— ๋Œ€ํ•ด์„œ static prototype๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ณ  ์žˆ๋‹ค.
  • String ํด๋ž˜์Šค์—์„œ prototype๊ฐ์ฒด ์ •์˜ํ•˜๊ธฐ
String.prototype.isEmpty = function() {
	return (this == "") ? true : false;
}

prototype์˜ isEmpty()๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

var s1:String = "Hello world";
var s2:String = "";

trace(s1.isEmpty()); // "false"์ถœ๋ ฅ
trace(s2.isEmpty()); // "true"์ถœ๋ ฅ

์œ„์™€๊ฐ™์€ ํ˜•ํƒœ์˜ ํ˜ธ์ถœ์€ ์—๋Ÿฌ๋ฅผ ๋ฟœ์–ด๋‚ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ž˜์™€๊ฐ™์ด ๋Œ€์ฒดํ•ด๋ณธ๋‹ค.

s1["isEmpty"]();

prototype ์ฒด์ธ ์˜ˆ์ œ

// Employee()๋ฅผ ์ƒ์„ฑํ•˜๊ณ  prototype์œผ๋กœ company๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•œ๋‹ค.
function Employee() { }
Employee.prototype.company = "Corp";

// ์—ฐ๊ฒฐ์‹œํ‚ฌ Manager()๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
function Manager() { }

// Employee()๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ๋˜๋Š” ๊ฐ์ฒด๋ฅผ Manager()์˜ prototype๋ณ€์ˆ˜์— ๋Œ€์ž…ํ•œ๋‹ค.
Manager.prototype = new Employee();

// worker ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ  Employee()์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
var worker = new Manager();
trace(worker.company); // "Corp" ์ถœ๋ ฅ

prototype ์ฒด์ธ์— ๋Œ€ํ•˜์—ฌ

  • ์œ„์˜ ์˜ˆ์ œ์—์„œ company๋ณ€์ˆ˜๋ฅผ ์ฐพ์•„๋‹ค๋‹ˆ๋Š” ์—ฌ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
    1. worker๊ฐ์ฒด์— ๋Œ€ํ•ด company ๋ณ€์ˆ˜๋ฅผ ์ฐพ์ง€๋งŒ ์ฐพ์ง€ ๋ชปํ•œ๋‹ค.
    2. Manager.prototype์—์„œ company๋ณ€์ˆ˜๋ฅผ ์ฐพ์ง€๋งŒ ์ฐพ์ง€ ๋ชปํ•œ๋‹ค.
    3. Manager.prototype์€ Employee()๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ๋˜๋ฏ€๋กœ, Employee์—์„œ company๋ณ€์ˆ˜๋ฅผ ์ฐพ๋Š”๋‹ค.
  • ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์ •ํ•  ๋•Œ ์•ก์…˜์Šคํฌ๋ฆฝํŠธ์—์„œ ๊ฒ€์ƒ‰ํ•˜๋Š” prototype ๊ฐ์ฒด๋“ค์˜ ๋ชฉ๋ก์„ prototype ์ฒด์ธ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
  • prototype์ฒด์ธ์—์„œ์˜ ์ œ์•ฝ์‚ฌํ•ญ
    1. prototype ๋ณ€์ˆ˜์— ๋Œ€์ž…๋œ ๊ฐ์ฒด๋Š” ๊ทธ ์ž์ฒด๊ฐ€ ํ•จ์ˆ˜๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ๋œ ๊ฐ์ฒด์ด๊ฑฐ๋‚˜ Object ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์—ฌ์•ผํ•œ๋‹ค.
    2. ํด๋ž˜์Šค์˜ prototype ๋ณ€์ˆ˜์˜ ๊ฐ’์€ ์•ก์…˜์Šคํฌ๋ฆฝํŠธ์— ์˜ํ•ด์„œ ์ž๋™์œผ๋กœ ์„ค์ •๋˜๋ฉฐ ์žฌ์„ค์ •ํ•  ์ˆ˜ ์—†๋‹ค.