14**-1. 객체지향 프로그래밍 소개**

14-1-1. 객체지향 프로그래밍의 개념

**객체지향 프로그래밍(OOP, Object-Oriented Programming)**은 소프트웨어 개발 방법론 중 하나로, 프로그램을 객체들의 집합으로 구성하고, 이 객체 간의 상호작용을 통해 프로그램을 설계하고 구현하는 방식이다. 다시 말해, 현실 세계의 객체와 그 객체들의 상호작용을 모델링하여 소프트웨어를 개발하는 방법이다.

객체(Object)란 사물이나 개념을 나타내는 다른 것들과 구분할 수 있는 것을 의미한다. 각각의 객체는 객체의 특징이나 정보를 나타내는 상태(state)와 특정한 행동을 수행하는 동작(behavior)으로 표현할 수 있다. 예를 들어, 사람은 이름, 나이, 생년월일 등의 상태와 걷다, 먹다 등의 동작이 있다. 자바스크립트에서는 이러한 상태와 동작을 각각 프로퍼티(property)와 메서드(method)라고 부른다.

14-2. 클래스 정의

14-2-1. 클래스의 개념

앞서 10장 프로토타입과 11장 생성자에서 살펴본 것처럼 자바스크립트에서는 생성자 함수와 프로토타입을 기반으로 하여 객체를 생성하고 객체의 상속 구조를 만들어 낸다. 이러한 객체지향 메커니즘은 기존의 Java와 C++ 같은 클래스 기반의 프로그래밍 언어에 친숙한 사용자가 자바스크립트에 접근하는데 있어 어려움과 불편함을 주었다.

하지만 ES6에서 클래스 문법이 추가되면서 자바스크립트에서도 클래스 기반의 언어와 비슷하게, 더욱더 직관적으로 객체지향을 구현할 수 있게 되었다. 클래스와 생성자 함수 모두 프로토타입 기반으로 객체를 생성하지만 동작 방식에서 약간의 차이가 있다.

14-2-2. 클래스 기본 문법

클래스는 class 키워드를 사용하여 선언하고 생성자와 메서드를 포함할 수 있다.

class ClassName {
    constructor() { }
    method1() { }
    method2() { }
}

클래스는 생성자 함수와 마찬가지로 new 키워드를 사용하여 호출할 수 있으며, 인스턴스(instance), 즉 클래스의 객체를 생성한다.

class ClassName { }

const instance = new ClassName();
console.log(instance); // ClassName {}