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)