자바스크립트에서의 객체지향

흔한 감자·2022년 11월 18일
0

코드스테이츠

목록 보기
11/18

클로저 모듈패턴, 생성자 함수 그리고 class

클로저 모듈 패턴

자바스크립트는 다른 언어와 다르게 접근 제한자 키워드가 제공되지 않습니다. 클로저 모듈 패턴을 사용하여 변수와 함수를 직접 접근을 제한할 수 있습니다.

function makeCounter() {
  let count = 0;
  
  return {
    increase: function() {
      count++;
    },
    decrease: function() {
      count--;
    },
    getValue: function() {
      return count;
    }
  }
}

클로저 모듈 패턴 구현시 주의할 점은 화살표 함수 표현(arrow function expression)는 메서드(methods)로 사용할 수 없기 때문에 사용하면 안됩니다.

클래스

자바스크립트에서는 class 키워드가 ES6에서 처음 도입되었기 때문에, 클래스를 사용하는 방식이 ES5와 ES6에서 다릅니다.

ES5 - 생성자 함수를 이용한 클래스 사용

생성자 함수는 일반 함수와 차이는 없지만 일반적으로 아래와 같이 사용합니다.

  • 함수 이름의 첫 글자는 대문자로 지정한다.
  • 'new' 연산자를 붙여 실행한다.

또 하나 알아두어야 할 점은 메소드 선언시 'prototype' 사용하여 할당한다는 점입니다.'prototype'을 사용하는 이유는 생성자 함수에 의해 생성된 각각의 객체에 프로퍼티를 공유하기 위해서 입니다. 'prototype'에 대해서는 여기서 다루지 않고 따로 정리하여 다루도록 하겠습니다.

function Person(name, age) {
	// 인스턴스 생성시 실행할 코드 작성
  this.name = name;
  this.age = age;
  
  Person.prototype.kick = function() {
  }
  
  Person.prototype.walk = function() {
  }
}

ES6 - class 키워드 사용

함수형식 클래스와 다른 점은 생성시 실행할 코드를 constructor 생성자 키워드로 감싸야합니다. 그리고 클래스의 prototype 없이 바로 메소드 함수를 선언하면 됩니다.

class Person {
  constructor(name, age) {
    // 인스턴스 생성시 실행할 코드 작성
	this.name = name;
	this.age = age;
  }
  
  kick() {
  }
  
  walk() {
  }
}

new와 this 키워드

클래스 사용에서 알아두어야 할 키워드는 this인데요. 자바스크립트에서 new 키워드로 생성된 생성자 함수 암시적으로 this를 반환합니다.

function Person(name, age) {
  // this = {};  (빈 객체가 암시적으로 생성)

  this.name = name;
  this.age = age;

  // return this;  (this가 암시적으로 반환)
}

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

위와 같이 클래스를 사용하는 프로그래밍을 객체 지향 프로그래밍이라고도 부를 수 있는데 이를 좀더 자세히 알아보겠습니다.

절차적 언어? 객체 지향언어?

절차적 언어는...

  • 순차적인 명령의 조합으로 되어 있는 언어를 말합니다.
  • 대표적인 절차지향 언어로는 c언어, 포트란이 있습니다.

객체 지향 언어

  • 일반적으로 클래스를 사용한 언어를 객체지향 언어라고 합니다.
  • 대표적인 객체지향 언어로는 자바, c++, c# 등이 있습니다.
  • 자바스크립트도 객체 지향으로 작성할 수 있습니다.

객체 지향이 갖는 4가지 특성

  • 캡슐화(Encapsulation): 객체지향은 데이터와 기능을 하나의 단위로 묶어 객체안에 생성함으로써 느슨하게 결합(Loose coupling)하도록 만듭니다. 이러한 특징을 캡슐화라고 합니다. 캡슐화를 통해 외부로부터 내부의 보호함으로써 데이터를 은닉화(hiding)할 수 있게 됩니다.

  • 추상화(abstration): 추상화는 객체에서 특징들만 뽑아 단순화하여 만든 것을 말합니다. 이를 통해 인터페이스가 단순해지는 효과를 볼 수 있습니다.

  • 상속(Inheritance): 상속은 부모 클래스(기본 클래스)의 내용을 자식 클래스(파생 클래스)가 물려받는 것을 의미합니다.

  • 다형성(Polymorphsim): 동일한 클래스로 생성한 여러 객체에서 동일한 이름의 메소드를 실행하더라도 서로 다르게 동작할 수 있습니다. 이를 다형성이라고 합니다.

이와 같은 특징들로 객체 지향 프로그래밍은 코드를 단순하게 만들 뿐만 아니라 재사용성이 높아지게 만듭니다.

자바스크립트에서의 객체 지향의 한계

자바스크립트에서느 생성자 함수 또는 class 키워드를 통해 객체 지향 프로그래밍을 할 수는 있지만, 다른 언어와 다르게 접근 제한자와 추상화를 지원하지 않습니다.

profile
프론트엔드 개발자

0개의 댓글