Today’s Key 🔑
- 그래프, 트리, BST (이진 탐색 트리)에 대한 개념을 다시 복습하고 자바스크립트로 구현했다.
- 객체지향 프로그래밍을 구현하기 위한 프로토타입과 인스턴스를 만드는 Instantation 방법에 대하여 공부했다.
고차원 프로그래밍 언어를 위한 객체 지향 프로그래밍
고차원 언어는 인간의 말과 비슷한 형태로 컴퓨터가 동작하게 만드는 프로그래밍 명령어를 의미한다. 영어로 구성되고, 절차 지향 언어(C언어 등)와 객체 지향 언어로 나누어진다. 절차 지향 언어는 말 그대로 프로그래밍의 순차적인 처리가 중시된다. 프로그램이 유기적으로 연결되게 하는 기법이다. 객체지향보다 이전에는 더 빠르게 처리되었지만, 지금은 하드웨어와 컴파일러의 발달로 객체 지향으로 프로그래밍을 처리하고 있다.
객체 지향적 프로그래밍은 사용하고자 하는 객체의 Proto(청사진)를 그리고 그것에 대한 속성들을 정의하여 프로그래밍 전반적으로 사용할 수 있게 만들어주는 기법이다. 이렇게 생성된 객체는 재사용성이 높고, 유지성이 높다. 클래스를 기반으로 인스턴스를 복제하는 공장의 개념이라고 볼 수 있다.
Instance를 생산하는 방법, instantation
Functional : 함수 내부에서 인스턴스에 대한 속성을 정의해주는 방법
- 함수로 새롭게 정의되는 모든 인스턴스가 모든 인스턴스에 대한 메모리를 가지고 있어야 한다. 메모리 할당이 많이 필요하다.
var Car = function (position) {
// 클래스에서 찍어낼 인스턴스 정의
var someInstance = {};
// 초기값 부여
someInstance.position = position;
// 메소드 부여
someInstance.move = function () {
this.position += 1;
};
return someInstance;
};
Functional Shared : 메소드와 인스턴스를 각각 정의해주어 메모리 참조만 하는 방법
- 메소드를 가지고 있는 객체를 만드는 함수와 인스턴스를 생성하는 함수를 개별적으로 운용하여, 두 객체를 연결해주는 방식으로 동작한다.
// someInstance와 someMethod를 연결하는 extend 함수 생성
var extend = function (to, from) {
for (var key in from) {
to[key] = from[key];
}
};
// 메소드를 담는 객체 생성
var someMethod = {};
someMethod.move = function () {
this.position += 1;
};
// 객체 생성
var Car = function (position) {
var someInstance = {
position: position,
};
extend(someInstance, someMethod);
return someInstance;
};
Prototypal : Object.creat()함수를 사용하여 인스턴스를 생성하는 방법
var someMethod = {};
someMethod.move = function () {
this.position += 1;
};
var Car = function (position) {
// Object.create 함수를 사용해서 someMethod를 가진 인스턴스 생성
var someInstance = Object.create(someMethod);
someInstance.postion = postion;
return someInstance;
};
Pseudoclassical : 프로토타입을 사용하여 메소드를 지정해주는 방법.
- new 키워드를 통해서 새로운 인스턴스를 생성해주어야 한다.
- prototype을 이용하여 객체와 메소드를 연결해준다.
var Car = function (position) {
this.position = position;
};
// prototype으로 객체와 메소드를 연결
Car.prototype.move = function () {
this.position += 1;
};
// new 키워드를 사용해주어야 한다.
var car1 = new Car(5);