D+52
- ๊ฐ์ฒด์งํฅ ์ธ์ด (OOP) -
(OOP, ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ, Prototype)
OOP (Object-Oriendted-Programming)
OOP๋ ํ๋ก๊ทธ๋จ์ ๊ตฌ์ฑํ๋ ๋ชจ๋ ์์๋ค์ด ๊ฐ์ฒด(์ค๋ธ์ ํธ)๋ก ์ด๋ฃจ์ด์ง ์ ์๋๋ก ์ง์ฌ ์๋ ํ๋ก๊ทธ๋จ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
๊ฐ์ฒด๋ฅผ ๊ด์ ์ผ๋ก ํ๋ก๊ทธ๋จ์ ์ง๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
๊ฐ์ฒด๋ก ์ด๋ฃจ์ด์ ธ ์๊ธฐ ๋๋ฌธ์ ์ฐจ๋ก์ฐจ๋ก ์ ๋ ฅํด๋๊ฐ๋ ์ ์ฐจ ์งํฅ์ ์ธ์ด๋ณด๋ค ์ฌ์ฌ์ฉ์ฑ์ด ๋๋ค๊ณ ํ ์ ์๋ค.
1 > ์บก์ํ
์บก์์ ๊บผ๋ด ๋ฐ์ผ๋ก ์ชผ๊ฐ๋ณด๋ฉด ๊ฐ๋ฃจ๋ค์ด ๋ชจ์ฌ์๋ค.
์ด ๊ฐ๋ฃจ๋ค์ ๊ทธ๋ฅ ํ๋ฒ์ ํธ์ด๋จน๋ ๊ฒ๊ณผ ๊ฐ๋ฃจ๊ฐ ๋ด๊ฒจ์๋ ์บก์ ํ ์์ ๋จน๋ ๊ฒ์
๋ชธ์์์๋ ๊ฐ์ ๋ฐ์์ ๋ํ๋ผ์ง๋ ๋ชฐ๋ผ๋ ์๋ง ๊ฐ์์ ์ด ๋ง์ ๋ด๋ ๊ฐ๋ฃจ๋ฅผ ํธ์ด๋จน๋ ๊ฒ์ด
์๋ง ์ด๋ง์ผ๋ก ๊ณ ํต์ค๋ฌ์ธ ๊ฒ์ด๋ค.
๋ฐ๋ฉด์ ์บก์์ ๊ฐ์ ์์ ๊ฐ๋ฃจ๋ฅผ ๋จน์์์๋ ๊ฐ๋ฃจ๊ฐ ์บก์์์ ๋ชจ์ฌ ์๊ธฐ์ ์ด ๋ง์ ๋๋ ์ ์๋ค.
์ด์ฒ๋ผ ์บก์ํ๋ ์บก์์ฒ๋ผ ๋น์ทํ ํน์ง์ ๊ฐ์ง๊ณ ์๋๋ฐ
์บก์ํ๋ ๊ด๋ จ์๋ ๋ฐ์ดํฐ๋ ์ ๋ณด๋ค์ ํ ๊ณณ์ ๋ชจ์ ์บก์ ํํ๋ก ๋ง๋๋ ๊ฒ์ ์๋ฏธํ๋ค.
// ์ ์ฐจ ์งํฅ์
let baseSalary = 30_000;
let overtime = 10;
let day = 20;
function getWage(baseSalary, overtime, rate) {
return baseSalary + (overtime * rate);
}
// ๊ฐ์ฒด ์งํฅ์ (์บก์ํ)
let employee = {
let baseSalary = 30_000,
let overtime = 10,
let day = 20,
getWage: function() {
return this.baseSalary + (this.overtime * this.day);
}
};
employee.getWage();
๋ง์ฝ์ ์ง์๋ค์ ์ถ๊ณผ์๋น์ ๊ณ์ฐํ๋ ์ฝ๋๋ฅผ ๋ง๋ค๊ณ ์ ํ๋ค๋ฉด
์ฐ๋ฆฌ๋ ์ง์์ ์๊ธ, ์ด๊ณผ๊ทผ๋ฌด ์๊ฐ, ์ผ์๊ฐ ํ์ํ ๊ฒ์ด๋ค.
์ด๋ ๋จ์ํ ๊ฐ ๋ณ์์ ๊ฐ์ ๋ฃ๊ณ ๊ณ์ฐํ๋ ์์ ๋ง๋ค์ด ๊ณ์ฐ์ ํ๊ณ ์ ํ๋ค๋ฉด
๋ค์ ์ง์2์ ๊ณ์ฐํ ๋๋ ๋ ๋ณ์๋ฅผ ๋ง๋ค๊ณ , ๊ทธ๋ค์ ์ง์ 3์ ๋ณ์๋ฅผ ๋ ๋ง๋ค๊ณ ...
์ด๋ ๊ฒ ๋๋ค๋ฉด ํจ์จ์ฑ์ด ์๋นํ ๋จ์ด์ง๋ค.
ํ์ง๋ง ๋ง์ฝ ์ด๊ฒ๋ค์ ๊ฐ์ฒด ์์ ๋ฃ์ด ๊ณ์ฐํ ๊ฒฝ์ฐ
๋์ผ๋ก ๋ณด๊ธฐ์๋ ํธํ ๋ฟ๋ง ์๋๋ผ ์ฌ์ฌ์ฉํ๊ธฐ์๋ ์๋นํ ํธ๋ฆฌํ๋ค.
2 > ์์
๋ถ๋ชจ๊ฐ ์์์ ๋ณ์ผ๋ฉด ์์์ ๋ชจ์ต๊ณผ ๋ถ๋ชจ์ ๋ชจ์ต์ด ๋น์ทํ ๋ชจ์ต์ ๋ณด์ด๋๋ฐ
์ด๋ ๋ถ๋ชจ์ ์ ์ ์๋ฅผ ์์์๊ฒ ๋ฌผ๋ ค์คฌ๊ธฐ ๋๋ฌธ์ด๋ค.
์ด์ฒ๋ผ ์์์ ๋ถ๋ชจ ํด๋์ค๊ฐ ๊ฐ์ง๊ณ ์๋ ์์ฑ์ ํ์ํด๋์ค๊ฐ ๋ฌผ๋ ค๋ฐ๋ ๊ฒ์ ์๋ฏธํ๋ค.
์์์ผ๋ก ์ธํด ์ฝ๋์ ์ค๋ณต์ ์ค์ผ ์ ์๋ค.
์ด๋์ ํ์ ํด๋์ค๋ ๋ถ๋ชจํด๋์ค๊ฐ ๊ฐ์ง๊ณ ์๋ ์์ฑ์ ๋ฌผ๋ ค๋ฐ์ผ๋ฉด์
์ถ๊ฐ์ ์ผ๋ก ์์ฑ์ ๊ฐ์ง๊ณ ์์ ์ ์๋ค.
class Convertible {
// Speed: 155 (miles / hour)
// Weight: 1600kg
// Engine: 3.2L S54 inline-6
}
// Roadster๋ Convertible์ ์์ฑ์ ์์ ๋ฐ์๋ค.
class Roadster extends Convertible {
// Speed : 165 (miles / hour)
// Weight: 1399kg
}
์ด์ฒ๋ผ Roadaster๋ Convertible์ ์์ฑ์ ๋ฌผ๋ ค๋ฐ์๊ธฐ ๋๋ฌธ์
๋ฐ๋ก ์ ํ ์์ง ์์๋ Roadster๋ Engine์ ์์ฑ์ ๋ฌผ๋ ค๋ฐ์ ๊ฒ์ด๋ค.
3 > ์ถ์ํ
์ถ์ํ๋ ์ฝ๋๊ฐ ๋์๊ฐ๊ธฐ ์ํด ๋ณต์กํ ์ฝ๋๋ค๋ก ์ด๋ฃจ์ด์ ธ ์์ง๋ง
์ฌ์ฉ์๊ฐ ๋ณด๋ ์ ์ฅ์์๋ ์ ํด์ง ๋ฒ์์ ํน์ ๊ฐ๋ง ์ ๋ ฅํ๋ฉด ๋๋ฏ๋ก ๋ณต์กํ ์ฝ๋๋ฅผ ์ ํ์๊ฐ ์๋ค.
์ค๋งํธํฐ์ ์๋ก ๋ค์๋ฉด, ์ค๋งํธํฐ์ ๋ฐ๋์ฒด, ์ก์ , ๋ฐฐํฐ๋ฆฌ ๋ฑ ๋ค์ํ ๊ฒ๋ค๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
์ด๋ ๊ฒ ๋ง์ ๋ถํ๋ค๋ก ์ด๋ฃจ์ด์ ธ ์์ง๋ง ์๋น์ ์ ์ฅ์์๋ ์ด๊ฒ๋ค์ ์ ํ์๊ฐ ์๋ค.
๊ทธ๋ฆฌ๊ณ ์์ง ๋ชปํ๋ค๊ณ ํด์ ์ฐ๋ฆฌ๊ฐ ์ค๋งํธํฐ ์ฌ์ฉ์ ๋ชปํ๋ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์
์ด ๋ํ ์ถ์ํ๋ผ๊ณ ๋ณผ ์ ์๋ค.
4 > ๋คํ์ฑ
๋๋ถ๋ถ์ ๋๋ฌผ๋ค์ ์ธ์์๋ฆฌ๋ฅผ ๋ด์ง๋ง ๋๋ฌผ๋ค๋ง๋ค ๊ฐ๊ธฐ ๋ค๋ฅธ ์ธ์์๋ฆฌ๋ ๋ธ๋ค.
์ด์ฒ๋ผ ๋๋ฌผ์ด๋ผ๋ ๊ฐ์ ํํ๋ฅผ ๊ฐ์ง๊ณ ์์ง๋ง ๊ฐ๊ธฐ ๋ค๋ฅธ ๊ธฐ๋ฅ์ ํ๋ ๊ฒ์ ๋คํ์ฑ์ด๋ผ๊ณ ํ๋ค.
์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ
ES6 classํค์๋๊ฐ ๋์ค๊ธฐ ์ ์ฌ์ฉํ๋ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ๋ค์ํ ํจํด๋ค์ ๋ํด์ ์์๋ณด๋ ค๊ณ ํ๋ค.
Class
ํด๋์ค๋ ๋ชจํํ๊ณผ ๊ฐ์ ์ญํ ์ ํ๋ฉฐ, ํด๋์ค๋ผ๋ ๋ชจํํ์ ๋ง๋ค์ด๋๋ฉด
ํด๋์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ธ์คํด์ค๋ผ๋ ๋ณต์ ํ์ ์ฐ์ด๋ผ ์ ์๋ค.
1 > Functional
๊ทธ๋๋ก ํจ์๋ฅผ ์ด์ฉํด์ ์ฐ์ด๋ด๋ ๋ฐฉ์์ด๋ค.
var Car = function(position) {
var someInstance = {};
someInstance.position = position;
someInstance.move = function() {
this.position += 1;
}
return someInstance;
};
var car1 = Car(5);
2 > Functional Shared
Functional๊ณผ๋ ๋ค๋ฅด๊ฒ ๋ฉ์๋์ ํจ์๋ฅผ ๋ฐ๋ก ๋๋ ์ค ๋ค์
ํฉ์น๋ ํจ์๋ฅผ ๋ง๋ค์ด ์ธ์ ๋ ์ง ์ฐ์ด๋ผ ์ ์๋๋ก ํ๋ค.
Functional๋ณด๋ค ๋ณต์กํด ๋ณด์ผ ์๋ ์๊ฒ ์ง๋ง
์ธ์คํด์ค ์์ฑ ์ ๋งค๋ฒ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐจ์งํ๋ Functional๊ณผ๋ ๋ฌ๋ฆฌ
Functional Shared๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ง์ ์ฐธ์กฐํ๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ด ์ข๋ค.
var extend = function(to, from) {
for(var key in from) {
to[key] = from[key];
}
};
var someMethods = {};
someMethods.move = function() {
this.position += 1;
};
var Car = function(position) {
var someInstance = {
position: position,
};
extend(someInstance, someMethods);
return someInstance;
};
var car1 = Car(5);
var Car2 = Car(10);
3 > Protoypal
Protoypal์ Functional Shared์ ๋น์ทํ์ง๋ง Object.create()๋ฅผ ์ด๋ค๋ ์ฐจ์ด๊ฐ ์๋๋ฐ
์ด๋ Object.create()๋ ์ง์ ๋ ํ๋กํ ํ์ ๊ฐ์ฒด ๋ฐ ์์ฑ์ ๊ฐ๋ ์ ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ํน์ง์ ๊ฐ์ง๊ณ ์๋ค.
var someMethods = {};
someMethods.move = function() {
this.position += 1;
};
var Car = function(position) {
var someInstance = Object.create(someMethods);
someInstance.position = position;
return someInstance;
};
var car1 = Car(5);
var car2 = Car(10);
4 > Pseudoclassical
Pseudoclassical์ ๋ฉ์๋๋ฅผ ํ๋กํ ํ์ ์ผ๋ก ๋ง๋ค์ด ์ฃผ๋ฉฐ,
์ธ์คํด์ค๋ฅผ ์ฐ์ด๋ผ ๋ new๋ฅผ ๋ถ์ฌ์ฃผ๋ฉด ๋์ด๋ค.
var Car = function(position) {
this.position = position;
};
Car.prototype.move = function() {
this.position += 1;
};
var car1 = new Car(5);
var car2 = new Car(10);
Prototype
์๋ฐ์คํฌ๋ฆฝํธ์ ๋ชจ๋ ๊ฐ์ฒด๋ ์์ ์ ๋ถ๋ชจ ์ญํ ์ ๋ด๋นํ๋ ๊ฐ์ฒด์ ์ฐ๊ฒฐ๋์ด์์ผ๋ฉฐ,
์ด๊ฒ์ ๊ฐ์ฒด ์งํฅ์ ์์์ ๊ฐ๋ ๊ณผ ๊ฐ์ ๋ถ๋ชจ ๊ฐ์ฒด์ ํ๋กํผํฐ ๋ ๋ฉ์๋๋ฅผ ์์๋ฐ์ ์ฌ์ฉํ ์ ์๊ฒ ํ๋ค.
์ด๋ฌํ ๋ถ๋ชจ ๊ฐ์ฒด๋ฅผ ํ๋กํ ํ์ ์ด๋ผ๊ณ ํ๋ค.
'์๋ > Code-States' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[D+54] ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ 1๋ฒ (0) | 2020.10.30 |
---|---|
[D+53] Prototype Chain (0) | 2020.10.29 |
[D+51] ์๊ฐ๋ณต์ก๋์ Big-o ํ๊ธฐ๋ฒ (0) | 2020.10.27 |
[D+50] Graph, Tree, BST (Binary Search Tree) (0) | 2020.10.26 |
[D+49] Immersive 1์ฃผ์ฐจ (0) | 2020.10.25 |
๋๊ธ