객체 지향 프로그래밍이란?
- 하나의 모델이 되는 청사진(blueprint)을 만들고, 그 청사진을 바탕으로 한 객체를 만드는 프로그래밍 패턴. 자동차 틀을 만들고, 그 틀로 수많은 자동차를 찍어내는 것과 같다. 다른 포스팅에서 더 자세히 다룰 예정
- 여기서 자동차 틀을 클래스(class), 자동차를 인스턴스(instance object / instance)라고 부른다.
클래스 정의 방법
function Car(brand, name, color) {
}
class Car{
constructor(brand, name, color) {
}
}
- 최근에는 ES6 방법을 더 많이 사용함
- 생성자(constructor) 함수란 인스턴스가 만들어질 때 실행되는 코드를 뜻함
- 생성자 함수는 return 값이 없음
new 키워드
let avante = new Car('hyundai', 'avante', 'black')
- new 키워드를 사용하여 인스턴스를 만듦. 이때 즉시 생성자 함수가 실행되며, 변수에 클래스의 설계를 가진 새로운 객체, 즉 인스턴스가 할당됨
- 각각의 인스턴스는 클래스의 고유한 속성과 메서드를 가짐
속성과 메서드?

- 혹자는 객체 지향 프로그래밍을 '사람이 세계를 보고 이해하는 방법을 흉내낸 방법론'이라고도 말한다. 즉 실제 세계의 사물에 빗대면 훨씬 이해하기 쉬워진다.
- 속성은 객체가 가진 특징이다. 자동차의 브랜드, 이름, 색 등이 이에 해당한다.
- 메소드는 "객체에 딸린 함수", 즉 객체와 관련된 행위이다. 자동차에 연료를 주입하고, 속력을 설정하고, 운전을 하는 등.
this
class Car{
constructor(brand, name, color) {
this.brand = brand;
this.name = name;
this.color = color;
}
}
- 함수가 실행될 때, 해당 scope마다 생성되는 고유한 실행 context
- 즉 위 예시에서 this는 인스턴스 객체를 의미함. parameter로 넘어온 브랜드, 이름, 색상 등은 인스턴스 생성 시 지정하는 값.
- 위와 같이 this에 할당한다는 것은 만들어진 인스턴스에 해당 브랜드, 이름, 색상을 부여하겠다는 의미
메서드의 정의
function Car(brand, name, color) {
Car.prototype.refuel = function(){
};
}
class Car{
constructor(brand, name, color)
refuel() {
}
}
- ES5는 prototype을 이용하여 메서드를 정의함(다른 포스팅에서 자세히 다룰 예정)
- ES6에서는 생성자 함수와 함께 class 키워드 안쪽에 묶어서 정의함
한 장 정리
