객체 지향 프로그래밍(프로토타입과 생성자 함수)

객체 지향 프로그래밍(OOP)

객체 지향 프로그래밍은 컴퓨터 프로그래밍 패러다임 중 하나로, 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다.

자바스크립트는 다른 언어(C++, Java 등)와 다르게 클래스 기반의 객체 지향 프로그래밍 언어가 아니고, 프로토타입 기반 객체 지향 프로그래밍 언어이다.

클래스 기반 언어들은 클래스로 객체의 자료구조와 기능을 정의하고 생성자를 통해 객체(인스턴스)를 생성한다. 그러나 자바스크립트는 클래스라는 개념이 없고, 생성자 함수가 그 역할을 대신한다.
(ES6에서 Class가 도입되었다. 그러나 Class는 사실 함수이고, 기존 prototype 기반 패턴의 Syntactic sugar이다.)

객체 지향 프로그래밍(OOP)의 특성 4가지

1. 추상화

공통의 속성이나 기능을 묶어 이름을 붙이는 것

즉, 클래스(JS에서는 사실은 생성자 함수)를 설계하는 것을 의미한다.

2. 캡슐화

관련 있는 속성이나 기능을 한 곳에 모으는 것

캡슐화를 통해 코드를 재활용할 수 있고, 정보를 은닉할 수 있다.
JS에서는 public, private 등의 키워드를 제공하지 않으므로 클로저를 이용해 정보 은닉을 구현한다.

3. 상속

부모의 속성과 기능을 그대로 이어받아 사용할 수 있게 하는 것

JS에서는 프로토타입(체인)을 통해 상속을 구현한다.

4. 다형성

하나의 변수명, 함수명 등이 상황에 따라 다른 의미로 해석될 수 있는 것

JS에서는 오버라이딩을 통해 다형성을 구현한다. (JS에서 오버로딩은 불가능하다.)

  • 오버라이딩 : 부모의 메서드를 재정의하는 것
  • 오버로딩 : 동일한 이름의 함수를 여러 개 정의하고, 매개변수의 타입과 개수를 다르게 하여 다르게 호출할 수 있게 하는 것

프로토타입

모든 객체는 프로토타입이라는 다른 객체를 가리키는 내부 링크를 가지고 있다. 즉, 프로토타입을 통해 직접 객체를 연결할 수 있는데 이를 프로토타입 체인이라 한다.

자바스크립트의 모든 객체는 부모 역할을 담당하는 객체와 연결되어 있다. 그래서 부모 객체의 프로퍼티와 메서드를 사용할 수 있다. 이러한 부모 객체프로토타입이라 한다.

생성자 함수

일반 함수와 동일한 방법으로 생성자 함수를 정의하고 new 연산자와 함께 호출하면 해당 함수는 생성자 함수로 동작한다.

자바스크립트는 생성자 함수와 new 연산자를 통해 인스턴스를 생성할 수 있다. 이때 생성자 함수클래스이자 생성자의 역할을 한다.

클래스

클래스는 다른 글에서 따로 다루기로 하자.

참고


Written by정선아
🌱 공부한 것을 기록하여 성장하기 위한 블로그입니다.

GitHubGmail