기계어에서 고급언어로 갈수록, 휴대성(portability)+유연성(flexibility)+구현이 용이한 장점있다.
- speed of execution (실행속도)
- code density(코드 압축)
- machin specific(특정 기계 종속)
고급 언어들은 기계어로 된 목적 프로그램으로 변환되기 전에 어셈블리어로 먼저 변환 후 기계어가 된다.
참조사이트
컴퓨터 프로그래밍
기계어,어셈블리어,고급언어
언어번역 프로그램의 종류
컴파일러,어셈블러,인터프리터의 차이
현실세계의 모델 코드란 무엇인가?
현실세계에 존재하는 개체를 컴퓨터 세계의 데이터 구조로 기술(모델링)하는 것
상속과 다형성의 관계
부모클래스의 기본적 속성과 기능을 가지고 오는 상속을 통해서, 여러 형태를 만들어낼 수 있는데 이것이 '다형성'이다.
참조사이트
객체지향개발(OOP) 개념 정리
Differences between Procedural and Object Oriented Programming
object-oriented programming (OOP)
https://brownbears.tistory.com/407
Four Pillars of Object Oriented Programming (OOP)
what is polymorphism?
클래스(class = 프로토타입(prototype)) : 하나의 틀로써 세부사항이 만들어지지 않은 상태(추상적 개념)
class
는 선언 이전에 '참조가 불가', let
, const
키워드로 선언한 변수와 같이, 호이스팅이 이루어져서 선언 이전에 TDZ(Temporal Dead Zone) 에 존재하기 때문입니다.객체(Objects) : 클래스의 인스턴스, 틀로 찍어서 만들어낸 '실체화된' 요소로 세부사항을 지니고 있다.
세부사항은 클래스가 지닌 counstructor에서 정의한다.
new
를 붙이지 않으면 TypeError
가 발생한다.consturctor
를 생략해도 class
를 사용할 수 있지만, 인스턴스를 생성할 때마다 class field를 초기화 해야 할 경우에는 constructor
를 생략해서는 안된다.① Functional
var Car = function(){
var someInstance = {};
someInstance.position = 0;
someInstance.move =function(){
this.position += 1;
}
return someInstance;
}
② Functional Shared
var someMethods = {};
someMethods.move = function(){ this.position += 1; };
var extend = function(to, from){
for(var key in from) {
to[key] = from[key];
}
};
var Car = function (position){
var someInstance = {
position: position,
};
extend(someInstance, someMethods);
return someInstance;
};
var car1 = car(5);
var car2 = car(10);
③ Prototypal
var someMethods = {};
someMethods.move = function(){ this.position += 1; };
var Car = function (position){
var someInstance = Object.create(someMethods);
someInstance.position = position;
return someInstance;
};
④ 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);
자바스크립트는 프로토타입 기반 객체지향 프로그래밍 언어로, 프로토타입(prototype)에 대한 이해를 잘 하고 있어야 한다.
__proto__
: 프로토타입 링크를 가리킨다.__proto__
: nullObject.prototype : 어떤 객체가 만들어지기 위해, 그 객체의 모태가 되는 것
Object.setPrototypeOf
var Products = function(name) {
this.name = name;
}
Products.prototype.putIn = function (value){
this.inStock = value;
return `${this.name}의 재고는 현재 ${this.inStock}개입니다.`;
}
let snack1 = new Products('포테토칩');
snack1.putIn(10); // "포테토칩의 재고는 현재 10개입니다."
//Products의 틀을 받아옴(call)
var Coffee = function(name){
Products.call(this, name);
}
// prototype을 이용하여 Products의 method를 상속받는다.
Coffee.prototype = Object.create(Products.prototype);
Coffee.prototype.constructor = Coffee;
// Coffee 자체의 새로운 method를 제작한다.
Coffee.prototype.iceCup = function (value) {
this.icecupinStock = value;
return `${this.name}의 얼음컵 재고는 현재 ${this.icecupinStock}개입니다`;
};
var americano = new Coffee('아메리카노');
americano.putIn(5); // "아메리카노의 재고는 현재 5개입니다."
americano.iceCup(10); // "아메리카노의 얼음컵 재고는 현재 10개입니다"
class ChildClass extends ParentClass { ... }
추가 참조사이트 : extends-javapoint
오버라이딩(Overriding)이란?
상위 클래스가 가지고 있는 메소드를 하위 클래스가 재정의하여 사용하는 방식으로, 다형성(polymorphism)의 한 종류
class Products {
constructor(name){
this.name = name;
}
putIn(value){
this.inStock = value;
return `${this.name}의 재고는 현재 ${this.inStock}개입니다.`;
}
}
//extends와 super를 이용하여 상속받기
class Coffee extends Products {
// 하단 constructor가 없어도 부모객체를 상속받는데 문제없다.
constructor(name){
super(name);
}
iceCup(value) {
this.icecupinStock = value;
return `${this.name}의 얼음컵 재고는 현재 ${this.icecupinStock}개입니다`;
}
}
var americano = new Coffee('아메리카노');
americano.putIn(5); // "아메리카노의 재고는 현재 5개입니다."
참조사이트
MDN : 프로토타입 예제사이트
프로토타입
javaTpoint
코드스테이츠 추천 - 프로토타입
[Javascript ] 프로토타입 이해하기
JAVASCRIPT CORE #3 - 프로토타입(Prototype)과 상속(Inheritance)
Instantiation Patterns in JavaScript