본문 바로가기
프로그래밍

(191117) 객체지향 프로그래밍(OOP) - (2)

by 양털의매력 2019. 11. 17.

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();
 

댓글