Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Hybrid Blockchain
- ES6 모듈
- solidity
- Private Blockchain
- http 모듈
- Factory Functions
- #유니티
- Relational Database
- 2티어 아키텍처
- 텍스트 가운데 정렬
- #1인게임개발
- 3티어 아키텍처
- SQL
- short-circuiting
- npm
- NoSQL
- CSS
- CLI
- caverjs
- 안정 정렬
- javascript
- UTXO
- react
- Factory 함수
- 명시도
- skip ci
- 불안정 정렬
- 블록체인
- IP
- CSS Specificity
Archives
- Today
- Total
짹뚜 스튜디오
[Javascript] Factory Functions 본문
해당 글은 모든 자바스크립트 개발자가 알아야 하는 33가지 개념에서 열네 번째인 Factories and Classes 항목을 공부하면서 간단하게 작성한 글이다.
기본적으로 객체를 만들려면 다음과 같이 작성하면 된다.
const dog = {
name: 'Max',
eat: function(){
return `Max eats`;
}
}
그리고 만약 dog와 동일한 property를 가지고 있지만 value만 다른 객체를 만들고 싶다면 동일한 코드를 여러 번 작성해주면 된다.
const dogMax = {
name: 'Max',
eat: function(){
return `Max eats`;
}
}
const dogBaduki = {
name: 'Baduki',
eat: function(){
return `Baduki eats`;
}
}
const dogBaekgu = {
name: 'Baekgu',
eat: function(){
return `Baekgu eats`;
}
}
하지만 이런식으로 코드를 작성하면 코드가 길어지고 반복되는 코드가 많아져서 나중에 수정하기가 힘들다. 그래서 나온 개념이 Factory 함수이다. Factory 함수를 간단히 표현하면 객체를 만들고 반환하는 함수이다.
function dogFactoryFunction(name){
return {
name: name,
eat: function() {
return `${this.name} eats`
}
}
}
// 위에 코드를 줄이면 아래와 같다.
function dogFactoryFunction(name){
return {
name,
eat() {
return `${this.name} eats`
}
}
}
const Baekgu = dogFactoryFunction('Baekgu');
const Baduki = dogFactoryFunction('Baduki');
Baekgu.eat(); // 'Baekgu eats'
Baduki.eat(); // 'Baduki eats'
이렇게 작성하면 동일한 로직을 한 번만 작성하고 여러 개의 객체를 쉽게 만들어낼 수 있다.
Factory 함수의 또 다른 장점으로는 Closure를 활용한 Data privacy를 보장한다. 반환되는 객체에 포함되지 않고 Factory 함수 내에서 선언된 변수들은 외부에서 접근이 불가능하다. 위 예제에서는 Baekgu.name에 접근해서 해당 값을 변경을 할 수가 있다. 그래서 아래와 같이 작성을 하면 외부에서 name에 접근을 할 수가 없다.
function dogFactoryFunction(name){
const legs = 4;
return {
eat() {
return `${name} eats`
}
}
}
const Tom = dogFactoryFunction('Baekgu');
Baekgu.name; // undefined
Baekgu.legs; // undefined
Baekgu.eat(); // 'Baekgu eats'
'개발 공부 > javascript' 카테고리의 다른 글
[Javascript] Constructor (생성자 함수) (0) | 2022.02.07 |
---|---|
[Javascript] this (0) | 2022.01.27 |
[Javascript] DOM (0) | 2022.01.21 |
[Javascript] Short-circuiting (단축평가) (0) | 2022.01.09 |
[Javascript] arguments (0) | 2022.01.09 |
Comments