7 가지 함수 형태로 JavaScript와 TypeScript 코드를 더 읽기 쉽고 사용하기 쉽게 만들기
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
JavaScript/TypeScript 개발자 (중급~고급)
- 코드 가독성과 유지보수성을 높이려는 개발자에게 유용
- 설계 패턴과 코드 품질 향상을 목표로 하는 프로젝트에 적합
핵심 요약
- 순수 변환(Pure transformation) 함수는 입력값을 변환하여 결과를 반환하며 부작용 없이 일관된 동작을 보장
- 런타임 타입 검증(Runtime type validation)을 통해 타입 안전성을 확보하고 예기치 못한 오류 방지
- 비동기 작업(Async tasks)은 비동기 처리를 명확히 구분하여 코드의 예측 가능성 향상
섹션별 세부 요약
1. 순수 변환(Pure transformation)
- 입력값만 의존하고 상태를 변경하지 않음
- 예:
function square(x: number): number { return x * x; }
- 테스트 용이성과 재사용성 향상
2. 런타임 타입 검증(Runtime type validation)
- 입력값의 타입을 동적으로 검증하여 타입 오류 방지
- 예:
function isNumber(value: any): boolean { return typeof value === 'number'; }
- TypeScript의
typeof
와instanceof
활용 권장
3. 부작용 트리거(Side-effect triggers)
- 외부 상태 변경(예: 로깅, 네트워크 요청)을 명확히 분리
- 부작용은 함수 이름에
trigger
또는log
접두사 사용 권장
4. 비동기 작업(Async tasks)
async/await
또는Promise
로 비동기 로직을 명확히 표현- 예:
async function fetchData(): Promise
{ ... } - 비동기 함수는 명확한 이름과 분리된 처리 로직 필요
5. 팩토리 패턴(Factory patterns)
- 객체 생성 로직을 별도 함수로 추출하여 재사용성 향상
- 예:
function createPerson(name: string, age: number): Person { ... }
- 의존성 주입과 테스트 용이성 지원
6. 함수 조합(Function composition)
- 작은 함수들을 조합하여 복잡한 로직 구현
- 예:
const result = pipe(add, multiply)(2, 3);
- 함수 조합은 모듈성과 유연성 향상
7. 오류 안전 실행(Error-safe execution)
try/catch
또는Promise.catch
로 예외 처리 로직 명시- 예:
function safeParse(json: string): any { try { return JSON.parse(json); } catch (e) { return null; } }
- 예외 처리는 명확한 오류 메시지와 복구 로직 포함 권장
결론
- 코드의 가독성과 신뢰성을 높이기 위해 각 상황에 맞는 함수 형태 선택
- 순수 함수, 비동기 처리, 예외 처리 등 핵심 패턴을 적용하여 일관된 코드 품질 유지
- 실무에서는 함수의 목적과 책임을 명확히 정의하고, 각 형태가 문제 해결에 기여하는 방식을 검증하는 것이 중요