10. 생성자

10-1. 생성자는 왜 쓰는가?

생성자를 사용하면 비슷한 객체를 찍어내어 사용할 수 있다.
  • 첫 글자는 대문자로 시작한다.
  • 유사한 객체를 생성할 때 사용한다.
  • 객체 생성 시 키워드 new를 이용한다.
 
생성자는 붕어빵 틀과 같다. 모든 붕어빵을 만들 때는 재료가 필요하다. 붕어빵의 종류에 따라 팥을 넣을 수도 있고 피자를 넣을 수도 있다.
아래는 생성자 함수의 기본적인 코드 예시이다.
function Taiyaki(filling, shape) { this.filling = filling; this.shape = shape; } let 붕어빵 = new Taiyaki('팥', '붕어모양'); let 잉어빵 = new Taiyaki('슈크림', '잉어모양');
위 코드에서 Taiyaki은 생성자 함수이다. filling과 shape라는 속성을 가진 객체를 생성하기 위해 사용된다. new 키워드를 사용하여 Taiyaki 생성자 함수를 호출하고 객체를 생성할 수 있다. 붕어빵과 잉어빵은 Taiyaki 생성자 함수를 사용하여 생성된 객체이다.

10-2. 생성자의 아규먼트

다음은 생성자를 사용할 때 추가적인 옵션을 알아보자.
Constructor(arg1 = 'default1', arg2 = 'default2') { this.arg1 = arg1; this.arg2 = arg2; }
생성자는 기본적으로 위와 같이 아규먼트의 기본값을 넣을 수 있다.
 

10-2-1. 가변적인 수의 아규먼트를 처리하는 방법

가변적인 수의 아규먼트를 받아야 하는 경우 스프레드를 사용하여 문제를 해결할 수 있다.
스프레드는 아규먼트를 배열로 변환해 주는 연산자로, 이를 사용하면 유연하게 함수를 작성할 수 있다.
function Constructor(...args) { this.arg1 = args[0] || 'default1'; this.arg2 = args[1] || 'default2'; // 필요한 만큼 args를 처리할 수 있다. } // 예시 사용법 let obj = new Constructor('value1', 'value2', 'value3'); console.log(obj.arg1); // 'value1' console.log(obj.arg2); // 'value2'
위 로직은 많은 값을 많이 받아 온다고 하여도 첫 번째 두 번째 인자만 받아서 처리한다.
 
가변적인 아규먼트가 들어올 때 아규먼트의 개수에 따라 다르게 처리하는 방법으로 추천하는 것은 조건문을 이용하여 유연하게 대응하는 방법이다. 이러한 조건문을 사용하여 여러 가지 상황의 범용적으로 연산을 할 수가 있다. 다음은 조건문을 사용하여 아규먼트 개수에 따라 다르게 처리하는 예시이다.
sub: function (x, y) { // 입력값이 하나이면 {x.x x.y} 두 개이면 {x, y} if (arguments.length === 1) { // 값이 하나이면 아래 로직 실행 this.x -= x.x; this.y -= x.y; } else if (arguments.length === 2) { // 값이 두개이면 아래 로직 실행 this.x -= x; this.y -= y; } return this; }