오늘의 학습내용
: 객체 내에 매소드를 호출하는 방법
let counter1 = {
value: 0,
increase: function() {
this.value++ // 메서드 호출을 할 경우, this는 counter1을 가리킵니다
},
decrease: function() {
this.value--
},
getValue: function() {
return this.value
}
}
counter1.increase()
counter1.increase()
counter1.increase()
counter1.decrease()
counter1.getValue() // 2
: 재사용성을 높이기 위한 클로저 모듈 패턴
function makeCounter() {
let value = 0;
return {
increase: function() {
value++;
},
decrease: function() {
value--;
},
getValue: function() {
return value;
}
}
}
let counter1 = makeCounter()
counter1.increase()
counter1.getValue() // 1
let counter2 = makeCounter()
counter2.decrease()
counter2.decrease()
counter2.getValue() // -2
클래스
: 객체지향 프로그래밍에서의 '청사진' 역할
: 함수 형태로 생성하며, '대문자'를 사용하여 선언
인스턴스
: 객체지향 프로그래밍에서의 '객체' 역할(instance object)
// ES5 문법 기반
// 'new'를 이용하여 class 생성
new Car(brand, name, color){
// 인스턴스 생성
}
// ES6 문법 기반
// 'class' 를 사용하여 생성
class Car{
constructor(brand, name, color){
// 인스턴스 생성
}
}
// 각각의 인스턴스는 Car 클래스의 고유한 속성과 매소드를 가진다
let avante = new Car('hyundai', 'avante', 'black');
let mini = new Car('bmw', 'mini', 'green');
속성 | 매소드 |
---|---|
brand, name, color 등 | drive(), parking(), setSpeed() |
// ES5 문법 기반
function Car(brand, name, color) = {
this.brand = brand;
this.name = name;
this.color = color;
}
// ES6 문법 기반
class Car{
constructor(brand, name, color){
this.brand = brand;
this.name = name;
this.color = color;
}
}
// ES5 문법 기반
function Car(brand, name, color) = {
this.brand = brand;
this.name = name;
this.color = color;
}
Car.prototype.drive(){
// drive 구현 코드
}
// ES6 문법 기반
class Car{
constructor(brand, name, color){
this.brand = brand;
this.name = name;
this.color = color;
}
drive(){
// drive 구현 코드 --> 생성자(costructor)함수와 묶어서 정의함.
}
}
Prototype
: 모델의 청사진을 만들 때 쓰는 원형 객체(original form)
constructor
: 인스턴스가 초기화 될 때 실행하는 생성자 함수
this
: 함수가 실행될 때, 해당 scope마다 생성되는 고유한 실행 context
Encapsulation (캡슐화)
: 단순화 / 재사용성 높임
Inheritance (상속)
: 재사용성 높임
Abstraction (추상화)
: 단순화 / 변화에 대한 영향 최소화
Polymorphism (다형성)
: 동일한 메서드에 대해 객체의 특성에 맞게 따라 다르게 작성 가능하게 함(조건문 대체)
: javascript에 타입 기능을 강화
은닉화(private)
: 지정된 클래스 안에서만 사용 가능하도록 속성/매소드를 제한시켜 정의할 수 있다.
추상화(interface)
: interface를 지정해줌으로써 코드를 단순화하고 재사용성을 높여준다.