OOP(Object Oriented Programming, 객체지향 프로그래밍) 기본 개념 및 특징

  • Encapsulation(캡슐화)
  • Abstraction(추상화)
  • Inheritance(상속)
  • Polymorphism(다형성)

Instantiation Patterns: 인스턴스 객체 정의 방법

  • Functional
  • Functional Shared
  • Prototypal
  • Pseudoclassical

(1) Functional: 함수를 이용한 객체 정의

var Car = function(position) {
  var someInstance = {};
  someInstance.position = position;
  someInstance.move = function() {
    this.position ++;
  };
  return someInstance;
}

var car1 = Car(3);
car1.move();
console.log(car1.position); // 4

(2) Functional Shared: 함수 공유를 통한 객체 정의

// 외부 객체로부터 메소드 참조: 메모리 효율이 좋음
var someMethods = {};
someMethods.move = function() {
  this.position ++;
}
var extend = function(to, from) {
  for (let key in from) {
    to[key] = from[key];
  }
};

var Car = function(position) {
  var someInstance = {
    position: position,
  };
  extend(someInstance, someMethods);
  return someInstance;
};

var car2 = Car(5);
car2.move();
console.log(car2.position); // 6

(3) Prototypal: 프로토타입 개념 도입, Object.create() 사용

var someMethods = {};
someMethods.move = function() {
  this.position ++;
}

var Car = function(position) {
  var someInstance = Object.create(someMethods);
  someInstance.posiotion = position;
  return someInstance;
};

var car3 = Car(7);
car3.move();
console.log(car3.position); // 8

(4) Pseudoclassical: constructor, .prototype, .__proto__ 개념 도입, new 키워드 사용

var Car = function(position) {
  this.position = position;
};
Car.prototype.move = function() {
  this.position ++;
};

var car4 = new Car(9);
car4.move();
console.log(car4.position); // 10

코드 출처: 코드스테이츠(CodeStates)

0개의 댓글