🛠️ 처음부터 만드는 Once — 함수를 한 번만 실행하게 만들기
# Once 이해하기
Once는 함수를 단 한 번만 실행하도록 보장하는 유틸리티입니다. 이후 호출은 첫 번째 실행 결과를 반환합니다.
초기화 로직 (DB 연결, 리소스 설정)
이벤트 리스너 cleanup
싱글톤 패턴 구현
API 요청 (한 번만 허용)
```javascript
function once(fn) {
let called = false;
let result;
return function(...args) {
if (!called) {
called = true;
result = fn.apply(this, args);
}
return result;
};
}
// 사용 예제
const init = once(() => {
console.log('초기화 시작');
return 'initialized';
});
init(); // '초기화 시작' 출력, 'initialized' 반환
init(); // 아무것도 출력 안 함, 'initialized' 반환
```
```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;
}
```
```javascript
const connectDB = once(async () => {
console.log('DB 연결 중...');
// 실제 연결 로직
return { connected: true };
});
await connectDB(); // 한 번만 실행
await connectDB(); // 첫 번째 결과 반환
```
한 번만 실행되어야 하는 작업에서 중복 호출 방지와 성능 최적화를 동시에 얻을 수 있습니다.
Once는 함수를 단 한 번만 실행하도록 보장하는 유틸리티입니다. 이후 호출은 첫 번째 실행 결과를 반환합니다.
사용 사례
구현
```javascript
function once(fn) {
let called = false;
let result;
return function(...args) {
if (!called) {
called = true;
result = fn.apply(this, args);
}
return result;
};
}
// 사용 예제
const init = once(() => {
console.log('초기화 시작');
return 'initialized';
});
init(); // '초기화 시작' 출력, 'initialized' 반환
init(); // 아무것도 출력 안 함, 'initialized' 반환
```
TypeScript 버전
```typescript
function once
let called = false;
let result: any;
return ((...args) => {
if (!called) {
called = true;
result = fn(...args);
}
return result;
}) as T;
}
```
실전: 비동기 초기화
```javascript
const connectDB = once(async () => {
console.log('DB 연결 중...');
// 실제 연결 로직
return { connected: true };
});
await connectDB(); // 한 번만 실행
await connectDB(); // 첫 번째 결과 반환
```
한 번만 실행되어야 하는 작업에서 중복 호출 방지와 성능 최적화를 동시에 얻을 수 있습니다.
👁 0 views
Comments (0)
💬
No comments yet.
Be the first to comment!