JavaScript의 팩토리 함수와 생성자 함수

객체를 하나씩 생성하는 것은 잘못된 방식입니다.

만약 100명의 반 친구들이 있고 각 친구를 위한 객체를 만들어야 한다면, 개별적으로 객체를 작성하는 것은 문제를 일으킵니다. 로직을 너무 여러 번 반복하게 되며, 버그가 발생할 위험도 있습니다. 예를 들어, 나중에 코드에서 실수로 속성 이름을 덮어쓸 수도 있습니다.

로직을 재사용할 수 있는 더 나은 방법이 필요합니다.

팩토리 함수 (Factory Functions)

공장을 떠올려 보세요. 원재료를 넣으면 완제품이 나옵니다. 팩토리 함수도 마찬가지입니다. 매개변수를 받아 새로운 객체를 반환합니다.

예시:

function classFactory(name) {
    return {
        reply() {
            return `${name} is present`
        }
    }
}

이 방식은 name을 안전하게 보호합니다. name이 함수 스코프 내부에 머물기 때문에 실수로 이름을 변경할 수 없습니다. 로직을 한 번만 작성하고 여러 번 재사용할 수 있습니다.

생성자 함수 (Constructor Functions)

생성자 함수 또한 객체를 생성합니다. 이 함수들은 this 키워드와 new 키워드를 사용합니다. 관례적으로 이러한 함수들은 대문자로 시작합니다.

예시:

function Classmate(name) {
    this.name = name
    this.reply = function() {
        return `${this.name} is present`
    }
}

new 키워드를 사용하면 JavaScript가 대신 작업을 수행합니다. 새로운 객체를 생성하고, 이를 this에 할당한 뒤 자동으로 반환합니다. 별도의 return 문이 필요하지 않습니다.

코드 확장하기 (Scaling your code)

이러한 메서드들을 배열과 결합하여 대량의 데이터를 처리할 수 있습니다.

const names = ['Kali', 'Andrew', 'Pearl', 'Percy']
const classmates = names.map(name => new Classmate(name))

classmates.forEach(c => console.log(c.reply()))

이를 통해 코드를 깔끔하고 확장 가능하게 만들 수 있습니다.

주요 목표는 간단합니다:

출처: https://dev.to/pearlodi/factory-functions-and-constructor-functions-in-javascript-lmb