객체지향 프로그래밍은 하나의 모델이 되는 청사진 즉 틀을 만들어 두고 그 만들어 둔 틀을 가지고 한 객체를 만드는 프로그래밍 패턴이다.
붕어빵을 예시로 들자면 붕어빵을 찍어내는 틀은 여러개지만 붕어빵 속을 바꿔가며 만들 수 있는데, 이 붕어빵 만드는 틀과 앙금이 바뀌면 다른 붕어빵이 되는 원리로 이해 할 수 있다.
위 붕어빵 예시로 설명하자면 붕어빵을 만드는 틀이 class(클래스)가 되고 들어가는 요소에 따라 달라지는 붕어빵은 instances(인스턴스)라고 한다!
function ProteinPowder(taste) {
// instances가 만들어질 때 실행되는 코드가 들어감
}class ProteinPowder(taste) {
constructor(a, b, c) {
// instances가 만들어질 때 실행되는 코드가 들어감
****}
}function ProteinPowder(taste) { }
let chocolateProtein = new ProteinPowder("chocolate"); // 초코맛 프로틴
let strawberryProtein = new ProteinPowder("strawberry"); // 딸기맛 프로틴
**// 위 각각의 instances는 ProteinPowder라는 class의 고유한 속성과 메소드를 갖는다.**객체지향 프로그래밍에서 빠지지 않고 등장하는 키워드이다
this는 instances의 객체를 의미한다.
parameter로 넘어온 인자들은 instances생성 시 지정하는 값이며 this로 할당한다는 것은 만들어진instances에 인자로 넘어온 값을 부여하겠다는 의미이다.
function ProteinPowder(taste) {
this.taste = chocolate;
}
// => taste인자에 chocolate을 전달하겠다.class ProteinPowder {
constructor(taste)
this.taste = chocolate;
}
}
// => taste인자에 chocolate을 전달하겠다.function ProteinPowder(taste, percent) { ... }
ProteinPowder.prototype**.**shake = function() {
// 프로틴파우더를 물에 타는 것을 구현하는 코드
}
ProteinPowder.prototype.drinkTimer = function() {
// 프로틴을 언제 먹을지 알려주는 알람을 구현하는 코드
}class ProteinPowder {
constructor(taste, percent) { ... }
shake() {
// 프로틴파우더를 물에 타는 것을 구현하는 코드
}
drinkTimer() {
// 프로틴을 언제 먹을지 알려주는 알람을 구현하는 코드
}
}class ProteinPowder {
constructor(taste, percent) { ... }
shake() {
// 프로틴파우더를 물에 타는 것을 구현하는 코드
}
drinkTimer() {
// 프로틴을 언제 먹을지 알려주는 알람을 구현하는 코드
}
}
let chocolateProtein = ProteinPowder('chocolate', '20g');
chocolateProtein.taste; // 'chocolate'
chocolateProtein.shake() // 초코프로틴파우더를 만든다.
let strawberryProtein = ProteinPowder('strawberry', '25g');
strawberryProtein.taste; // 'strawberry'
strawberryProtein.drinkTimer() // 딸기 프로틴 파우더를 마실 시간을 알려준다.prototype
모델의 청사진을 만들 때 쓰는 원형 객체
constructor
instances가 초기화 될 때 실행하는 생성자 함수
this
함수가 실행 될 때 해상 scope마다 생성되는 고유한 실행 context
new키워드로 instances를 생성했을 때에는 해당 instances가 바로 this의 값이 된다.

그림출처 : 코드스테이츠