1. OOP (Object Oriented Programming)란?
실제 세계를 모델링하여 소프트웨어를 개발하는 방법이며 다음과같은 3대 특성을 갖는다.
1) 캡슐화 :
데이터를 감추고 외부 세계와의 상호작용은 메소드를 통해서만 하는 방법
2) 상속
이미 작성된 클래스를 이어받아 새로운 클래스를 생성하는 기법으로, 기존 코드를 재활용해 사용할 수 있다.
3) 다형성
하나의 이름 (메소드, 함수 등등)으로 많은 상황에 대처하는 기법으로, 동일한 작업을 하는 함수들에 똑같은 이름을 부여할 수 있으므로 코드가 더 간단해지는 효과가 있다.
(장점) 코드의 재활용성이 높다.
코딩이 절차지향보다 간편하다.
디버깅이 쉽다.
(단점) 처리속도가 절차지향보다 느리다
설계에 많은 시간이 소요된다.
2. JavaScript에서 Object를 생성하는 여러가지 방법
1) Functional
Var Car = function() {
var someInstance = {};
someInstance.position = 0;
someInstance.move = function() {
this.position += 1;
}
return someInstance;
};
var car1 = Car();
var car2 = Car();
car1.move();
2) 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);
=> Functional Shared 방식은 메모리의 효율을 좋게 만들어준다.
3) Prototypal
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
var Car = function(position) {
this.position = position;
};
Car.prototype.move = function() {
this.position += 1;
};
var car1 = new Car(5)
var car2 = new Car(10)
3. Prototype in JavaScript
1) Prototype Object
객체는 언제나 함수(function)로 생성됩니다.
ex )
function Person() {};
var personObject = new Person();
함수가 정의될 때는 다음과 같은 2가지 일이 이루어집니다
첫번째로, 해당함수에 Constructor 자격이 부여됩니다.
Constructor 자격이 부여되면 new를 통해 객체를 만들어 낼 수 있게됩니다.
두번째로, 함수만 생성되는 것이 아니라 Prototype Object도 같이 생성이 됩니다.
그리고 생성된 함수는 prototype이라는 속성을 통해 prototype Object에 접근할 수 있습니다.
2) Prototype Link
- 프로토타입 체인 : proto 속성을 통애 상위 프로토타입과 연결되어있는 형태
'javaScripts' 카테고리의 다른 글
Inheritance Patterns (0) | 2020.01.11 |
---|---|
__proto__, constructor, prototype 의 관계 (0) | 2020.01.03 |
12/26 (0) | 2019.12.26 |
12/25 (0) | 2019.12.25 |