객체는 일반적인 함수를 정의하듯 만드는데,
그냥 실행하는 것이 아니고 new
키워드를 써서 만듦
클래스는 일반적인 다른 함수와 구분하기 위해 부통 대문자로 시작하며 일반명사로 만듦
class | instances |
---|---|
function Pâtisserie(type) {} | let madelaine = new Pâtisserie('citron'); |
let fiancier = new Pâtisserie('chocolat'); |
함수로 정의하는 방법
function Pâtisserie(couleur, taille, parfum) {
// 인스턴스가 만들어질 때 실행되는 코드
}
클래스라는 키워드로 정의하는 방법 (최근에는 이 방법 주로 사용)
class Pâtisserie {
boulangerie(couleur, taille, parfum) {
//인스턴스가 만들어질 때 실행되는 코드
}
}
new
키워드를 통해 클래스의 인스턴스 만들기
let madelaine = new Pâtisserie ('jaune', 'petit', 'citron')
le financier = new Pâtisserie ('brunâtre', 'petit', 'chocolat')
this
인스턴스 객체 의미
this
에 할당하는 것은 만들어진 인스턴스에 해당 브랜드 이름, 색상을 부여하겠다는 의미
class Pâtisserie {
constructor(couleur, taille, parfum) {
this.couleur = couleur;
this.taille = taille;
this.parfum = parfum;
}
}
// constructor 생성자
클래스: 메소드의 정의
class Pâtisserie {
constructor(couleur, taille, parfum) {/*생략*/}
fermenter() {
}
cuire () {
}
인스턴스에서의 사용
let madelaine = new Pâtisserie ('jaune', 'petit', 'citron');
madelaine.couleur; // 'jaune'
madelaine.cuire(); // 'cela prend 20 minutes'
le financier = new Pâtisserie ('brunâtre', 'petit', 'chocolat');
financier.taille; // 'petit'
financier.fermenter(); // pas besoin de fermenter
개념 | 설명 |
---|---|
prototype | 모델의 청사진을 만들 때 쓰는 원형 객체(original form) |
construnctor | 인스턴스가 초기화될 때 실행하는 생성자 함수 |
this | 함수가 실행될 떄 해당 스코프마다 생성되는 고유한 실행 context. new키워드로 인스턴스 생성했을 때는 해당 인스턴스가 바로 this의 값이 됨 |
하나의 모델(틀)을 만들고 그 틀을 바탕으로 한 객체를 만드는 프로그래밍 패턴
ex) 마들렌 틀 -> 그 틀로 마들렌 계속 찍어내기
객체 지향 프로그래밍 패러다임 등장 전에 있었던 절차 지향 프로그래밍
ex) C, 포트 => 순차적인 명령의 조합
원형(original form), 객체를 생성하기 위한 아이디어나 청사진
클래스의 사례(instance object)
클래스를 통해 만들어진 인스턴스(객체)에 생성자를 통해 세부사항을 넣어줌
데이터(속성, property)와 기능(메서드)를 따로 정의하지 않고 하나의 객체 안에 넣어서 묶는 것
=> 장점: 복잡하지 않은 코드, 재사용성 증가
부모 클래스의 특징을 자식 클래스가 물려받는 것
기본 클래스(base class)의 특징을 파생 클래스(derived class)가 상속받음
ex) 사람이라는 클래스가 있을때 기본적으로 성별, 나이와 같은 속성과 먹다,자다와 같은 메서드가 들어간다. 여기서 학생이라는 클래스를 작성한다고 가정할 때 아예 새로 작성할 필요 없이 사람의 클래스를 상속받을 수 있음
=> 장점: 불필요한 코드 줄여 재사용성 높임
내부 구현은 복잡하지만 실제 노출되는 부분은 단순하게 만든다는 개념
ex) 컴퓨터에서 마우스 또는 단축키를 통해 간단하게 실행시키는 것들이 실제 그 뒤에서는 복잡한 실행과정을 내포하고 있음
=> 클래스를 사용하는 사람에게 필요하지 않은 메서드를 노출시키지 않고 단순한 이름으로 정의함
인터페이스: 클래스 정의 시 메서드와 속성만 정의한 것. 추상화의 본질!
=> 장점: 복잡하지 않은 코드. 단순화된 사용으로 변화에 대한 영향 최소화
같은 이름을 가진 메서드라도 작동이 다른 경우
ex) Textarea(TextBox), Select, Checkbox
=> 장점: 동일한 메서드에 대해 if/else if와 같은 조건문 대신 객체의 특성에 맞게 달리 작성하는 것이 가능해짐