Object를 생성하는 방법들 - Instantiation Patterns
JS에서 Object를 생성하는 방법, 즉 Instantiation pattern에는 'Class' 가 나오기전에 4가지 방법이 있었다.
Class가 나오기 전에 사용하던 class 선언 방식에 대해서 알아 보았다.
Car라는 객체가 position이라는 property와 move 라는 method를 갖는다고 가정하고 각 방법을 적용
1. Functional Instantiation
var Car = function () {
var someInstane = {};
someInstance.position = 0; // someInstance에 position property 0으로 초기값 설정
// parameter로 position 값을 넣고 초기값을 직접 설정도 가능
someInstance.move = function() {
someInstance.position += 1;
}
return someInstance;
}
var car1 = Car();
var car2 = Car();
car1.move(); // car1의 position을 찍어보면 1로 나옴
2. Functional-Shared
var Car = function () {
var someInstance = {
position: 0 // position property를 someInstance property로 넣어줌
}
extend(someInstance, someMethods) // extend 함수를 통해 method를 someInstance에 합쳐줌
return someInstance
}
var someMethods = {}; // method를 담아줄 객체를 따로 생성
someMethods.move = function () { // someMethod 객체에 move method 구현
this.position += 1;
}
var extend = function(to, from) { // from 객체 안의 값들을 to 객체에 넣어주는 함수
for (var key in from) {
to[key] = from[key]
}
}
var car1 = Car();
var car2 = Car();
이러한 방식을 사용하는 이유는 functional 한 방식의 경우 인스턴스를 생성할 때마다 모든 method를 각각의 인스턴스에 전부 할당하기 때문에 각각의 인스턴스가 메소드 만큼 메모리를 더 차지한다. 하지만 shared 방식을 사용하면 someMethod 객체의 메모리 주소만 참조하기 때문에 메모리 효율이 좀 더 좋다!
3. Prototypal Instantiation
// shared 방식과 유사
var Car = function() {
var someInstance = Object.create(someMethods); // 이 부분이 point!!
someInstance.postion = 0;
return someInstance;
}
var someMethods = {};
someMethods.move = function () {
this.position += 1;
};
var car1 = Car();
var car2 = Car();
4. Pseudocalssical
var Car = function() {
this.position = 0;
};
Car.prototype.move = function () { // method를 프토로타입으로 만들어준다
this.position += 1;
};
var car1 = new Car(); // 인스턴스를 new 키워드를 이용하여 만들어준다!!
var car2 = new Car();
'프로그래밍' 카테고리의 다른 글
(200108) AWS - S3, EC2, RDS (2) (0) | 2020.01.09 |
---|---|
(200108) AWS - S3, EC2, RDS (1) (0) | 2020.01.08 |
(191207) Server, Client, API, Browser (0) | 2019.12.07 |
(191117) 객체지향 프로그래밍 (OOP) - (3) (0) | 2019.11.17 |
(191116) 객체지향 프로그래밍(OOP) - (1) (0) | 2019.11.14 |
댓글