타입스크립트에서 타입스크립트의 코드 리팩토링 방법은 무엇인가요?
_____A1. 리팩토링은 외부 동작(Behavior)을 변경하지 않으면서 내부 구조를 개선하는 작업입니다. 코드 가독성과 유지보수성을 높이고 버그 발생 가능성을 줄이는 것이 목적입니다.
Q2. TypeScript 리팩토링을 시작하기 전 체크리스트는 무엇인가요?
A2.
- tsconfig.json 설정(“strict”, “noImplicitAny”, “strictNullChecks” 등) 확인
- 코드베이스 테스트 커버리지 확보(단위·통합 테스트)
- 린팅/포매팅 도구(ESLint, Prettier) 설정
- 코드 리뷰 프로세스 및 브랜치 전략 정립
Q3. any 타입을 제거하는 방법은?
A3.
1. noImplicitAny 옵션 활성화 후 컴파일 오류 확인
2. any → unknown으로 변경하고 필요한 부분에서 타입 좁히기(type narrowing)
3. 구체적 인터페이스나 유틸리티 타입(Partial, Record 등)으로 대체
4. 대규모 변경 시 ts-morph나 codemod 스크립트 활용
Q4. 인터페이스(interface)와 타입 별칭(type alias) 중 언제 사용해야 하나요?
A4.
- interface
• 상속(extends)을 통한 확장에 최적화
• 선언 병합(declaration merging) 지원
- type alias
• 유니온/튜플/매핑된 타입 등 복잡한 타입 표현이 필요할 때
• 기본 타입이나 제네릭 유틸리티 타입 조합 시 사용
⇒ 둘 다 사용 가능하나 확장성이 중요한 경우 interface를, 복잡 구문 조합엔 type alias를 권장
Q5. 제네릭(Generic)으로 중복 코드를 줄이는 방법은?
A5.
1. 공통 로직의 입력·출력 타입을 제네릭으로 추상화
2. 타입 제약(extends)을 통해 타입 안전성 보장
3. 함수·클래스·인터페이스에 제네릭 적용
예)
```ts
function wrap
return { value };
}
```
Q6. 유틸리티 타입으로 리팩토링하는 팁은?
A6.
- Partial
- Pick
- Record
- Exclude/Extract로 유니온 타입 조작
Q7. 코드 구조(파일·디렉토리) 리팩토링 방법은?
- 기능 단위(Feature-Based) 폴더 구조 채택
- index.ts로 공개 API만 노출(명시적 경로 사용 최소화)
- 레이어 분리(API, service, domain, utils 등)
- 모노레포(Lerna, Nx) 또는 멀티 패키지 설정 고려
Q8. 함수형 스타일로 리팩토링하려면?
A8.
- 순수 함수(Pure Function) 우선 작성
- 불변성 유지(Immutability) – Object.freeze, spread 연산자 사용
- 고차 함수(Higher-Order Function)·커링(Currying) 활용
- 라이브러리(Ramda, Lodash/fp) 도입 검토
Q9. 클래스 기반 코드를 함수·인터페이스 기반으로 바꾸는 방법은?
A9.
1. 메서드를 순수 함수로 추출
2. 상태를 인자로 전달하거나 불변 객체로 관리
3. 인터페이스로 타입 정의 및 의존성 주입(DI)
4. 필요시 Factory 함수로 객체 생성
Q10. 레거시 JavaScript를 TypeScript로 전환할 때 주의할 점은?
A10.
- 단계별 마이그레이션(enable JS + allowJs)
- @ts-ignore 남발 지양, 구체적 타입 선언 우선
- any → unknown → 구체적 타입 순차 적용
- 코드 모듈별로 점진적 strict 모드 활성화
Q11. VSCode·IDE 자동 리팩토링 기능 활용법은?
A11.
- Rename Symbol(Ctrl+F2), Extract Function/Constant
- 인라인(In-line) 및 추출 리팩토링 단축키
- Quick Fix(Alt+Enter)로 타입 제안·자동 import
- ts-morph 기반 스크립트로 대규모 코드 변경 자동화
Q12. 리팩토링 후 검증·배포 파이프라인 구성은?
A12.
- Git Hook(Husky)으로 커밋 전 lint·test 실행
- CI(CircleCI, GitHub Actions)에서 빌드·테스트·릴리즈
- 코드 커버리지 도구(Istanbul, Coveralls)로 리포트
- 배포 전 타입 체크(tsc --noEmit) 및 동적 테스트
Q13. 지속적인 리팩토링을 위한 베스트 프랙티스는?
A13.
- 테스트 주도 개발(TDD)로 리팩토링 안전망 확보
- 코드 리뷰 가이드라인에 리팩토링 룰 포함
- 정기적인 코드 스멜(Code Smell) 점검
- 소규모 변경·커밋 단위로 자주 리팩토링
- 도구(ESLint Rule, SonarQube)로 자동화된 품질 관리
작성자:
최서영 [비회원]
| 작성일자: 1년 전
2024-09-10 05:32:18
조회수: 257 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 257 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.