**객체지향 프로그래밍(OOP, Object-Oriented Programming)**은 소프트웨어 개발 방법론 중 하나로, 프로그램을 객체들의 집합으로 구성하고, 이 객체 간의 상호작용을 통해 프로그램을 설계하고 구현하는 방식이다. 다시 말해, 현실 세계의 객체와 그 객체들의 상호작용을 모델링하여 소프트웨어를 개발하는 방법이다.
객체(Object)란 사물이나 개념을 나타내는 다른 것들과 구분할 수 있는 것을 의미한다. 각각의 객체는 객체의 특징이나 정보를 나타내는 상태(state)와 특정한 행동을 수행하는 동작(behavior)으로 표현할 수 있다. 예를 들어, 사람은 이름, 나이, 생년월일 등의 상태와 걷다, 먹다 등의 동작이 있다. 자바스크립트에서는 이러한 상태와 동작을 각각 프로퍼티(property)와 메서드(method)라고 부른다.
앞서 10장 프로토타입과 11장 생성자에서 살펴본 것처럼 자바스크립트에서는 생성자 함수와 프로토타입을 기반으로 하여 객체를 생성하고 객체의 상속 구조를 만들어 낸다. 이러한 객체지향 메커니즘은 기존의 Java와 C++ 같은 클래스 기반의 프로그래밍 언어에 친숙한 사용자가 자바스크립트에 접근하는데 있어 어려움과 불편함을 주었다.
하지만 ES6에서 클래스 문법이 추가되면서 자바스크립트에서도 클래스 기반의 언어와 비슷하게, 더욱더 직관적으로 객체지향을 구현할 수 있게 되었다. 클래스와 생성자 함수 모두 프로토타입 기반으로 객체를 생성하지만 동작 방식에서 약간의 차이가 있다.
클래스는 class 키워드를 사용하여 선언하고 생성자와 메서드를 포함할 수 있다.
class ClassName {
constructor() { }
method1() { }
method2() { }
}
클래스는 생성자 함수와 마찬가지로 new 키워드를 사용하여 호출할 수 있으며, 인스턴스(instance), 즉 클래스의 객체를 생성한다.
class ClassName { }
const instance = new ClassName();
console.log(instance); // ClassName {}