Today I Learned :
- OOP(Object Oriented Programming)
- The way to create Object
- The definition of prototype and the reason why we need to use it.
- Toy Algorithm 01, 02
- Book : Spiens part 1 - 2
일요일은 미뤄놨던 모든 약속을 한꺼번에 처리하는 날이자, 모자란 수업과 평소에 안 했던 취미를 보강하는 날이라
오히려 평일보다 더 바쁜 날이기도 하다.
약속을 점심 / 저녁으로 나누어 2건을 처리하고, 그 사이에 독서와 약간의 공부를 했다.
바쁘다고 등한시 하던 독서를 시작하여 오늘부터 '사피엔스'를 조금씩 읽기로 했다.
Object Oriented Programming (OOP) 객체 지향 프로그래밍
객체라는 번역때문에 객체 지향 프로그래밍이라는 단어 자체에 접근하기 조차 어렵다.
생활 코딩 이고잉님의 객체 지향 프로그래밍 강의에 따르면 (진짜 최고야...!!!),
배경
프로그래밍이 보다 복잡다단해지면서 비슷한 상태(Variable, 변수)를 나타내거나, 기능(Method, 메서드)을 하는 것들을 그룹화한 것을 '객체'라고 하기 시작했다. 객체의 장점은 상황이 바뀌여도 비슷한 상태와 기능을 재활용할 수 있다는 점이다.
예시
예를 들면, key와 value의 짝을 담아내는 그룹의 상태를 Object라고 하고, 그 그룹의 key의 모음을 알아내는 기능을 Object.keys()라는 매소드로 정의하여, 매번 상황이 바뀌더라도 저 상태와 기능을 이용할 수 있다.
How to creat an Object
자바스크립트에서 새로운 Object를 생성하는 방법은 여러가지가 있다.
1. 직접 대입
let obj = {};
2. new 생성자 이용
let obj2 = new Object();
3. ES5의 Object.creat(prototype)을 이용
let obj3 = Object.create(Object.prototype);
Prototype in JavaScript
Prototype은 반복되는 속성을 가진 객체를 만들 때, 매 번 그 속성을 정의하는 비효율을 막아준다.
Prototype은 자바스크립트의 꽃이라 불린다.
타 언어와 달리 Class 가 없기 때문에, Prototype이 자바스크립트에서 중요한 역할을 한다.
(문제는 타 언어의 Class 가 뭘 하는지 모른다는 것...? 아마 상속... ES6의 Class... constructor 역할 같은 것일까...?)
예를 들면, Car는 .move() . stop() .start()라는 공통의 기능을 가진다고 가정하자.
Car의 속하는 Avante, Sonata, Sorento에 해당 매소드를 매번 부여하는 것은 효율을 낮추는 일이다.
Car라는 부모에게 .move() . stop() .start()를 정의하고,
Avante, Sonata, Sorento 자식들이 부모의 속성을 상속하는 것이 효율적이다.
let Car = function () {
this.postion = 0;
};
Car.prototype.move = function () {
this.position += 1;
};
let Avante = new Car;
Avante.move(); // avante의 position 은 +1 되었다.
Avante는 Car의 . move() 메서드를 상속받아 사용할 수 있다.
Avanate는 . move() 라는 메서드가 없지만, 부모인 Car를 통해서 해당 매소드를 상속받았기 때문이다.
만약, Avante가 본인의 독특한 메소드를 부여하면 어떻게 될까?
Avante.prototype.move = function () {
this.position += 3;
};
Avante.move() // avante는 +3 되었을 것이다.
본인이 가진 속성을 먼저 살펴보고, 없을 경우 부모의 속성을 살펴 따르는 것이다.
부모가 없다면 조부모의 속성을 살펴본다. 없을 경우 undefined을 리턴할 것이다.
이처럼, Prototype은 객체가 부모의 속성을 상속할 수 있게 하여,
코드의 재활용성을 높이는 역할을 한다.
'2. 우당탕탕 개발자 > 2-1. 공부기록' 카테고리의 다른 글
10Dec2019 TIL (0) | 2019.12.14 |
---|---|
09Dec2019 TIL (0) | 2019.12.10 |
07Dec2019 TIL (0) | 2019.12.07 |
06Dec2019 TIL (0) | 2019.12.07 |
03Dec2019 TIL (0) | 2019.12.04 |
댓글