객체지향 프로그래밍 part1. 클래스와 인스턴스

holang-i·2023년 3월 15일
0
post-thumbnail

객체 지향 프로그래밍

객체 지향 프로그래밍은

   하나의 모델이 되는 청사진(blueprint) -> Class 를 만들고,
   그 청사진을 바탕으로 한 객체를 만드는 -> Instance 프로그래밍 패턴이다.

  예를 들어서 청사진은 커피머신 생산을 위한 설계도에 비유된다. 커피머신이 기능하기 위해서는 원두를 갈고, 추출하고, 우유를 스팀하는 것 등이 필요한데 이러한 기본적인 설계는 커피머신의 종류와는 상관없이 대체적으로 동일하게 적용된다.

이런 설계도를 바탕으로 각각의 객체가 특정한 커피머신으로 만들어지게 된다.

  Class(청사진)를 바탕으로 한 객체는 인스턴스 객체(Instance Object) 줄여서 인스턴스(instance)라고 부른다.


객체를 만드는 방법

1. 객체는 일반적인 함수를 정의하듯이 만든다. 단 함수를 이용하는 방법에서 조금 다른 차이점이 있는데 new 키워드를 사용해서 만들게 된다. 이는 새로운 인스턴스를 만드는 방법이다.


2. 일반적인 다른 함수와 구분하기 위해 클래스는 보통 대문자로 시작하고, 일반 명사로 만든다. (일반적인 함수는 적절한 동사를 포함하고 소문자로 시작된다.)


3. ES5에서는 클래스를 함수로 정의할 수 있다.

  • ES5는 prototype이라는 키워드를 사용해야 메서드를 정의할 수 있다.
  • CoffeeMachine 클래스에 메서드를 추가하기 위해서는 CoffeeMachine.prototype.grind과 같이 prototype을 이용해야 한다.

4. ES6에서는 class라는 키워드를 이용해서 정의할 수 있다.

여기서 위의 함수는 객체지향 프로그래밍에서 생성자(constructor) 함수라고 부르는데 인스턴스가 만들어 질 때 실행되는 코드이고, 생성자 함수는 return 값을 만들지 않는다.

ES6에서는 생성자 함수와 함께 class 키워드 안쪽에 묶어서 정의할 수 있다. grind() {}, extract() {}, steam() {}와 같이 작성되어 있는 부분이다.

new 키워드를 통해 클래스의 인스턴스를 만들어 낼 수 있다.
인스턴스를 만들 때 new 키워드를 사용하여 만들면 즉시 생성자 함수가 실행되고, 변수에 클래스의 설계를 가진 새로운 객체, 인스턴스가 할당된다.
각각의 인스턴스에는 클래스에서 정의한 고유한 속성과 메서드를 갖게 된다.


prototype, constructor, this

종류설명
prototype모델의 청사진을 만들 때 사용하는 원형 객체(original form)
constructor인스턴스가 초기화 될 때 실행되는 생성자 함수
this함수가 실행될 때, 해당 scope마다 생성되는
고유한 실행 context(execution context)
new 키워드로 인스턴스를 생성했을 때는 해당 인스턴스가 this가 된다.

배열은 Array의 인스턴스이다.

class의 유용한 예제로 배열을 살펴볼 수 있다.
배열은 전부 Array의 인스턴스로 속성, 메서드 사용법이 동일하다.

배열 메서드(pop, push, reduce...)등을 mdn에서 살펴보면 메서드들이 대부분 Array.prototype.{해당 메서드명}과 같이 되어있는 것을 확인할 수 있는데 이는 모든 메서드들이 클래스의 원형 객체(prototype)에 정의되어 있기 때문이다.

profile
🌿 주니어 프론트엔드 개발자입니다! 부족하거나 잘못된 정보가 있다면 알려주세요:)

0개의 댓글