-
Instantiation Patterns (인스턴스화 패턴)concept/javascript 2020. 5. 8. 19:38
ES6 에서는 Class 라는 생성자 함수가 생겨서 instance를 쉽게 만들 수 있다.
하지만 ES6가 나오기 전 까지는 어떻게 instance를 만들었을까?
그런거 알 필요 없고 그냥 Class 쓰면 되지 않아? 라고 생각할지도 모르겠지만
이 과정에 대해서 더 자세히 공부하면 응용이 더 쉬워지겠지?
그런데 Class가 무엇이냐.
Class의 개념을 먼저 짚고 가려고 한다.
Class는 하나의 정형화된 모델을 만들어 두고 그 모델을 기반으로 복제품을 만들기 위해 사용하는 것이다.
즉, 옛날에는 책을 하나 만들기 위해 일일히 다 손으로 썼어야 했다면 금속활자가 만들어진 후 다량의 책을 빠른 시간에 찍어낸 세기의 발명과도 같은 것!
여기서 Class는 금속활자인 것이다.
자세한 포스팅은 2020/04/02 - [concept/javascript] - 객체 지향 JavaScript (Class) 참고
이걸 프로그래밍적으로 다시 생각해보자면, 찍어내는 기능은 함수를 통해서 구현할 수 있다고 이해하면 되겠다.
ES6 이전에는 바로 이 4가지 방식으로 instance를 만들었다.
1. Functional
2. Functional Shared
3. Prototypal
4. Pseudoclassical1. Functional
let 원본_훈민정음 = function(){ let 배포용_훈민정음 = {}; 배포용_훈민정음.content = '나랏말싸미듕귁에달아'; //property : 속성 배포용_훈민정음.책주인이름 = function(이름){ //method : 기능 this.이름 = 이름 } return 배포용_훈민정음; } let 훈민정음1 = 원본_훈민정음(); //{content: "나랏말싸미듕귁에달아"} let 훈민정음2 = 원본_훈민정음(); //{content: "나랏말싸미듕귁에달아"} 훈민정음1.책주인이름('권오연'); //{content: "나랏말싸미듕귁에달아", 이름: "권오연"}
2. Functional shared
extend의 활용! (functional shared)
이 때 property function과 method function을 따로 만들고 extend를 활용해서 functional shared를 하면 메모리 효율이 조금 더 좋아진다!
왜냐면 위의 방식대로 하면 각각의 instance(훈민정음1, 2)들이 property와 method를 가지고 있게 되는데,
extend를 쓰면 property function과 method function의 메모리 주소만을 참조하기 때문이다.
코드로 본다면
extend 예시 3. Prototypal
functional share에서 빈 객체를
Object.create(기능함수);
로 바꿔주면 된다.
4. Pseudoclassical
먼저 코드를 작성하고 메소드는 프로토타입으로 만들어준다.
let Car = function(position){ this.position = position; } Car.prototype.move = function() { this.position += 1; }; let car1 = new Car(5); let car2 = new Car(10);
찍어낼 때는 new operator를 붙여주면 끝!
요게 ES6 Class 방법과 정확하게 동일한 원리~!
'concept > javascript' 카테고리의 다른 글
Subclassing - understanding prototype chain (Object.create()의 활용법) (0) 2020.05.10 prototype vs __proto__ vs constructor (0) 2020.05.09 OOP (Object Oriented Programming) - 객체 지향 프로그래밍 (0) 2020.05.08 ++, -- 를 앞에 쓴 것과 뒤에 쓴 것은 무슨 차이가 있는 것일까? (0) 2020.05.02 recursion (재귀함수) (0) 2020.04.18