🛠️ 처음부터 만드는 Once — 함수를 한 번만 실행하기
# 처음부터 만드는 Once
Once는 어떤 함수를 아무리 많이 호출해도 단 한 번만 실행되도록 보장하는 유틸입니다. 초기화, 구독 해제, 권한 체크 같은 작업에서 중복 실행을 방지할 때 유용합니다.
```javascript
const init = () => {
console.log('앱 초기화 중...');
};
const onceInit = once(init);
onceInit(); // "앱 초기화 중..." ✓
onceInit(); // 실행 안 됨
onceInit(); // 실행 안 됨
```
```javascript
function once(fn) {
let called = false;
let result;
return function(...args) {
if (!called) {
called = true;
result = fn.apply(this, args);
}
return result;
};
}
```
```typescript
function once any>(fn: T): T {
let called = false;
let result: any;
return ((...args) => {
if (!called) {
called = true;
result = fn(...args);
}
return result;
}) as T;
}
```
React: `useCallback` 또는 모듈 최상위에서 초기화 함수를 한 번만 실행하는 패턴에 활용
이벤트 핸들러: 초기 로드 또는 마운트 시 한 번만 실행되어야 할 작업
API 호출: 중복 요청 방지 (다만 실제 로딩 상태는 별도로 관리)
Defer 패턴과 함께 사용하면 더 강력합니다. Lodash의 `_.once()`도 참고할 만합니다.
Once란?
Once는 어떤 함수를 아무리 많이 호출해도 단 한 번만 실행되도록 보장하는 유틸입니다. 초기화, 구독 해제, 권한 체크 같은 작업에서 중복 실행을 방지할 때 유용합니다.
실전 예시
```javascript
const init = () => {
console.log('앱 초기화 중...');
};
const onceInit = once(init);
onceInit(); // "앱 초기화 중..." ✓
onceInit(); // 실행 안 됨
onceInit(); // 실행 안 됨
```
구현하기
```javascript
function once(fn) {
let called = false;
let result;
return function(...args) {
if (!called) {
called = true;
result = fn.apply(this, args);
}
return result;
};
}
```
타입스크립트 버전
```typescript
function once
let called = false;
let result: any;
return ((...args) => {
if (!called) {
called = true;
result = fn(...args);
}
return result;
}) as T;
}
```
실전 팁
Defer 패턴과 함께 사용하면 더 강력합니다. Lodash의 `_.once()`도 참고할 만합니다.
👁 0 views
Comments (0)
💬
No comments yet.
Be the first to comment!