Factory 패턴
객체를 생성하는 팩토리 함수를 사용한다.
📜 원문: patterns.dev - factory pattern
📜 번역: https://patterns-dev-kr.github.io/design-patterns/factory-pattern/
팩토리 패턴을 사용하면 함수를 호출하는 것으로 객체를 만들어낼 수 있습니다.
new 키워드를 사용하는 대신 함수 호출의 결과로 객체를 만들 수 있는 것이죠.
앱에 다수의 사용자를 추가해야 한다고 가정해 보겠습니다. 사용자는 firstName, lastName, email 속성을 갖게 됩니다.
이 때 팩토리 함수를 사용해 fullName 메서드를 가진 객체를 만들어 반환합니다.
const createUser = ({ firstName, lastName, email }) => ({
firstName,
lastName,
email,
fullName() {
return `${this.firstName} ${this.lastName}`
},
})
아래 예제에서는 위에서 만든 createUser 팩토리 함수를 사용하고 있습니다.
팩토리 패턴은 상대적으로 복잡한 객체 혹은 환경이나 설정에 따라 키와 값을 다양하게 설정해야 하는 객체를 만들어야 할 때 유용하게
사용할 수 있습니다. 팩토리 패턴을 사용해 특정한 키나 값을 가진 객체를 쉽게 만들 수 있죠.
const createObjectFromArray = ([key, value]) => ({
[key]: value,
})
createObjectFromArray(['name', 'John']) // { name: "John" }
장점
팩토리 패턴은 동일한 프로퍼티를 가진 여러 작은 객체를 만들어낼 때 유용합니다.
현재의 환경이나 사용자 특징적인 설정을 통해 원하는 객체를 쉽게 만들 수 있습니다,
단점
자바스크립트에서 팩토리 함수는 new 키워드 없이 객체를 만드는 것에서 크게 벗어나지 않습니다.
ES6의 화살표 함수를 이용하면 간결하게 작은 팩토리 함수를 만들 수 있습니다.
하지만 대부분의 상황에서 객체를 일일히 만드는 것 보다 클래스를 활용하는 편이 메모리를 절약하는데 더 효과적이죠.
class User {
constructor(firstName, lastName, email) {
this.firstName = firstName
this.lastName = lastName
this.email = email
}
fullName() {
return `${this.firstName} ${this.lastName}`
}
}
const user1 = new User({
firstName: 'John',
lastName: 'Doe',
email: 'john@doe.com',
})
const user2 = new User({
firstName: 'Jane',
lastName: 'Doe',
email: 'jane@doe.com',
})
참조
- JavaScript Factory Functions with ES6+ - Eric Elliott
'프로그래밍(Basic) > Javascript(TS,Node)' 카테고리의 다른 글
[바미] Node 그리고 장, 단점. (1) | 2023.01.08 |
---|---|
[바미] Promise와 async/await (0) | 2022.11.11 |
[바미] Flyweight 패턴 (2) | 2022.10.05 |
[바미] Javascript Micro task queue. (0) | 2022.08.08 |
[바미] 콜 스택, 태스크 큐, 이벤트 루프 (0) | 2022.07.30 |