Concept 14. 팩토리와 클래스

2020. 11. 3. 15:2333-js-concepts-reveiw

팩토리와 클래스

이번 Concept은 자바스크립트를 사용하면 누구나 한 번씩은 사용해본 경험이 있는 팩토리와 클래스에 대해 다뤄보겠습니다. :)

Factory Function은 무엇일까요?

말 그대로 객체를 만들어내는 공장 같은 느낌인데요

객체를 여러 개 만들어 내야 한다고 가정해봅시다.

여기에 원이라는 객체를 만들어 보겠습니다.

const circle = {
  radius: 1,
  location: {
    x: 1,
    y: 1
  },
  isVisible: true,
  draw: function() {
    console.log('draw');
  }
}

이렇게 circle이라는 객체를 하나 만들어 냈습니다.
circle을 하나 더 만들어 볼까요?

const circle2 = {
  radius: 2,
  location: {
    x: 2,
    y: 2
  },
  isVisible: true,
  draw: function() {
    console.log('draw');
  }
}

오.. 벌써부터 복붙하기 너무 귀찮군요 ㅋ.ㅋ
그렇다면 이번엔 공을 1000개를 찍어봅시다.
코드가 어떻게 될까요?
작성해보지 않아도 매우 헤비해진다는 것을 알 수 있습니다.



보는 것과 같이 객체를 여러 개 만들어 내야 한다면 많이 골치 아파질 수 있습니다.

여기서 Factory Function이라는 개념이 등장합니다.
앞에서 말씀드렸다시피 객체를 만들어내는 공장함수라고 생각하시면 될 것 같습니다.

// Factory Function
function createCircle(radius, locationX, locationY) {
  return {
    radius,
    locationX,
    locationY,
    draw() {
      console.log('draw');
    }
  };
}

Factory Function을 만들었습니다.
여기서 원을 2개 만들어볼까요?

const circle = createCircle(1, 1, 1);
const circle2 = createCircle(2, 2, 2);

짜잔!
함수를 하나 만든 것으로 객체를 단 1줄로 만들 수 있게 되었습니다.

이게 Factory Function이 필요한 이유입니다 :)

그 후 ES6보다 더 위에 있는 모던한 자바스크립트 표준이 나오면서 최근에는 Class라는 것이 생겼는데 이는 Factory Function과 매우 비슷한 역할을 합니다.

class Circle {
  constructor(radius, locationX, locationY) {
    this.radius = radius;
    this.locationX = locationX;
    this.locationY = locationY;
  }

  draw() {
    console.log('draw');
  }
}

const circle = new Circle(1, 1, 1);
const circle1 = new Circle(2, 2, 2);

이것이 최근에 나온 자바스크립트 클래스이며 더 이상 Factory Function을
만들지 않아도 되며 더 간편하게 객체를 찍어낼 수 있습니다.

클래스를 사용하면 유용한 웹 api를 더 활용할 수 있습니다.

예를 들어 get & set과 같은…

이번 MD에서는 이 내용에 관해선 다루지 않겠습니다.

더 자세한 것이 알고 싶다면 -> dream-coding__js를 활용하시길 바랍니다 :)


이 MD는 밑의 글과 영상을 참고하여 만들었습니다 :)

Written

Video