고급 TypeScript - 유틸리티 타입: Partial
유틸리티 타입: Partial
유틸리티 타입은 TypeScript에서 제공하는 내장된 타입 변환 도구로, 객체의 속성을 쉽게 조작할 수 있게 해줍니다. 그 중에서도 Partial은 특정 인터페이스의 모든 속성을 선택적으로 만들 수 있는 기능을 제공합니다. 즉, 어떤 객체가 특정 인터페이스를 따르더라도 일부 속성만 정의해도 괜찮도록 허용합니다.
1. Partial의 개념
- 기본 아이디어: Partial
는 제네릭 타입으로, T라는 인터페이스를 받아서 모든 속성을 선택적으로 만듭니다. - 목적: 이 기능은 주로 객체를 업데이트하거나 변경할 때 유용합니다. 예를 들어, 사용자의 프로필 정보를 업데이트할 때 전체 정보를 제공하지 않고 필요한 부분만 보낼 수 있습니다.
2. 사용 예제
다음은 User
라는 인터페이스와 이를 기반으로 한 Partial<User>
예제입니다.
interface User {
id: number;
name: string;
email: string;
}
// Partial<User>를 사용하는 함수
function updateUser(id: number, userUpdates: Partial<User>) {
// 여기서 userUpdates는 User의 일부 속성만 포함될 수 있습니다.
console.log(`Updating user with ID ${id}...`);
if (userUpdates.name) {
console.log(`New Name: ${userUpdates.name}`);
}
if (userUpdates.email) {
console.log(`New Email: ${userUpdates.email}`);
}
}
// 사용자 정보 업데이트 호출
updateUser(1, { name: "Alice" }); // 이름만 업데이트
updateUser(2, { email: "bob@example.com" }); // 이메일만 업데이트
위 코드에서 updateUser
함수는 Partial<User>
를 통해 name
이나 email
중 하나 또는 둘 다 없이 호출될 수 있음을 보여줍니다. 이는 매우 유연한 방법이며 특히 대규모 애플리케이션에서 데이터 관리에 큰 도움이 됩니다.
3. 실전 활용 사례
-
API 요청 처리:
-
RESTful API에서는 PATCH 메소드를 사용할 때 전체 리소스를 보내지 않고 수정하고자 하는 필드만 전송하는 경우가 많습니다.
// API 응답 처리 함수 예시 function handleApiResponse(responseData: Partial<User>) { // responseData에는 필요 없는 필드는 포함되지 않을 수 있음 }
-
-
폼 처리:
-
사용자 입력을 기반으로 폼 데이터를 구성할 때도 각 필드에 대해 선택적으로 값을 설정할 수 있습니다.
type FormFields = { username?: string; password?: string; }; // 폼 제출 시 호출되는 함수 function submitForm(fields: Partial<FormFields>) { // fields는 username과 password 중 일부만 가질 수도 있음 }
-
4. 요약
Partial