--- title: createFactory --- 이 API는 향후 React의 주요 버전에서 제거될 예정입니다. [대안들을 살펴보세요.](#alternatives) `createFactory`는 특정 type의 React 엘리먼트를 만드는 함수를 생성합니다. ```js const factory = createFactory(type) ``` --- ## 레퍼런스 {/*reference*/} ### `createFactory(type)` {/*createfactory*/} 주어진 `type`의 React 엘리먼트를 만들어 내는 팩토리 함수를 생성하기 위해 `createFactory(type)`를 호출하세요. ```js import { createFactory } from 'react'; const button = createFactory('button'); ``` 이후 JSX 없이 React 엘리먼트를 만들기 위해, 해당 함수를 사용할 수 있습니다. ```js export default function App() { return button({ onClick: () => { alert('Clicked!') } }, 'Click me'); } ``` [아래에서 더 많은 사용법을 확인하세요.](#usage) #### 매개변수 {/*parameters*/} * `type`: `type`은 반드시 유효한 React 컴포넌트 type이어야 합니다. 예를 들어 태그 이름 문자열(`'div'` 나 `'span'`) 혹은 React 컴포넌트(함수 컴포넌트, 클래스 컴포넌트, [`Fragment`](/reference/react/Fragment)와 같은 특별한 컴포넌트)가 될 수 있습니다. #### 반환값 {/*returns*/} 팩토리 함수를 반환합니다. 이 함수는 자식 인수의 리스트에 뒤이어, 첫 번째 인수로 `props` 객체를 받으며, 주어진 `types`, `props` 그리고 `자식`을 가진 React 엘리먼트를 반환합니다. --- ## 사용법 {/*usage*/} ### 팩토리 함수로 React 엘리먼트 만들기 {/*creating-react-elements-with-a-factory*/} 비록 대부분의 React 프로젝트들은 [JSX](/learn/writing-markup-with-jsx)를 사용하여 사용자 인터페이스를 표현하지만, JSX가 필수는 아닙니다. 과거에는 `createFactory`를 JSX 없이 사용자 인터페이스를 표현하는 방법의 하나로 사용하였습니다. `button`과 같이 특정 엘리먼트 type을 반환하는 *팩토리 함수*를 생성하기 위해 `createFactory`를 호출합니다. ```js import { createFactory } from 'react'; const button = createFactory('button'); ``` 그 다음, 제공된 props와 자식으로 React 엘리먼트를 만들어내는 팩토리 함수를 실행합니다. ```js src/App.js import { createFactory } from 'react'; const button = createFactory('button'); export default function App() { return button({ onClick: () => { alert('Clicked!') } }, 'Click me'); } ``` 이는 `createFactory`을 JSX의 대안으로 사용하는 방법입니다. 하지만 `createFactory`는 더 이상 사용하지 않으며, 이후 새로운 코드를 작성할 때 `createFactory`를 사용하지 않아야 합니다. 아래에서 `createFactory` 대신 다른 방법을 사용하는 방식을 살펴보세요. --- ## 대안 {/*alternatives*/} ### 프로젝트에 `createFactory` 복사하기 {/*copying-createfactory-into-your-project*/} 만약 프로젝트에 `createFactory`가 많이 사용된다면, 다음의 `createFactory.js` 내용을 프로젝트 내부에서 사용할 수 있도록 복사하세요. ```js src/App.js import { createFactory } from './createFactory.js'; const button = createFactory('button'); export default function App() { return button({ onClick: () => { alert('Clicked!') } }, 'Click me'); } ``` ```js src/createFactory.js import { createElement } from 'react'; export function createFactory(type) { return createElement.bind(null, type); } ``` 이러한 작업을 통해, import 문을 제외하고 다른 코드를 바꾸지 않은 상태로 유지할 수 있습니다. --- ### `createFactory`를 `createElement`로 대체하기 {/*replacing-createfactory-with-createelement*/} 직접 옮겨와도 무방할 정도로 `createFactory`를 몇 개만 호출하고 있고 JSX를 사용하고 싶지 않다면, [`createElement`](/reference/react/createElement)를 실행하여 팩토리 함수를 대체할 수 있습니다. 예를 들어 이 코드는, ```js {1,3,6} import { createFactory } from 'react'; const button = createFactory('button'); export default function App() { return button({ onClick: () => { alert('Clicked!') } }, 'Click me'); } ``` 아래와 같이 바꿀 수 있습니다. ```js {1,4} import { createElement } from 'react'; export default function App() { return createElement('button', { onClick: () => { alert('Clicked!') } }, 'Click me'); } ``` 최종적으로 JSX 없이 React를 사용하는 예시입니다. ```js src/App.js import { createElement } from 'react'; export default function App() { return createElement('button', { onClick: () => { alert('Clicked!') } }, 'Click me'); } ``` --- ### `createFactory`를 JSX로 대체하기 {/*replacing-createfactory-with-jsx*/} 마지막으로 `createFactory` 대신 JSX를 사용할 수 있습니다. 이는 React를 사용하기 위해 가장 흔하게 사용하는 방법입니다. ```js src/App.js export default function App() { return ( ); }; ``` `button`과 같은 상수 대신 `type`을 특정 변수로 사용할 수도 있습니다. ```js {3} function Heading({ isSubheading, ...props }) { const type = isSubheading ? 'h2' : 'h1'; const factory = createFactory(type); return factory(props); } ``` JSX를 사용해 같은 방식으로 구현한다면 `Type`처럼 대문자로 시작하는 변수 이름을 새롭게 설정해야 합니다. ```js {2,3} function Heading({ isSubheading, ...props }) { const Type = isSubheading ? 'h2' : 'h1'; return ; } ``` 그렇게 하지 않는 경우 React는 소문자로 작성된 ``을 내장된 HTML 태그로 해석할 것입니다.