엔터티와 사용자 지정 기능
withEntities로 컬렉션을 관리합니다.
엔터티와 사용자 지정 기능은(는) CoddyKit의 무료 Angular Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Angular Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Angular Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
컬렉션 관리하기
레코드 목록(할 일, 사용자, 제품)은 매우 흔하게 사용되므로 NgRx는 정규화된 상태와 바로 사용할 수 있는 업데이트 함수를 제공하는 withEntities를 제공합니다.
withEntities
withEntities는 ID를 키로 사용해 entityMap에 항목을 저장하고, 순서가 있는 ids 배열을 관리하며, 목록을 나타내는 entities 계산 신호를 노출합니다.
import { withEntities } from '@ngrx/signals/entities';
export const TodoStore = signalStore(
withEntities<Todo>()
);
// store.entities() -> Todo[]엔터티 업데이트 함수
patchState와 함께 업데이트 도우미를 사용하세요: setAllEntities, addEntity, updateEntity, removeEntity. 이 함수들은 맵과 ID 순서를 일관되게 유지합니다.
import { addEntity, removeEntity, updateEntity } from '@ngrx/signals/entities';
patchState(store, addEntity({ id: '1', title: 'A', done: false }));
patchState(store, updateEntity({ id: '1', changes: { done: true } }));
patchState(store, removeEntity('1'));컬렉션 로드하기
가져온 후 전체 컬렉션을 setAllEntities로 교체하세요. 배열이 맵과 ID 목록으로 정규화됩니다.
import { setAllEntities } from '@ngrx/signals/entities';
load: rxMethod<void>(pipe(
switchMap(() => api.getTodos()),
tap(todos => patchState(store, setAllEntities(todos)))
))사용자 지정 idKey
엔터티의 식별자가 id가 아니라면 선택자를 전달하세요. 그러면 스토어는 해당 필드를 기준으로 맵의 키를 지정합니다.
withEntities<User>(); // expects user.id
// custom key:
patchState(store, addEntity(user, { selectId: (u: User) => u.uuid }));엔터티에서 값 도출하기
withEntities를 withComputed와 조합하여 컬렉션을 기반으로 필터링하거나 개수를 계산하는 읽기 모델을 만드세요.
withComputed(({ entities }) => ({
remaining: computed(() => entities().filter(t => !t.done).length)
}))사용자 지정 기능이란 무엇인가요
사용자 지정 기능은 여러 스토어에 추가해 사용할 수 있는 상태, 계산된 값, 메서드의 재사용 가능한 묶음입니다. signalStoreFeature로 만들 수 있습니다.
import { signalStoreFeature, withState } from '@ngrx/signals';
export function withLoading() {
return signalStoreFeature(
withState({ loading: false })
);
}기능 재사용하기
내장 기능과 같은 방식으로 모든 스토어에 사용자 지정 기능을 추가하세요. 로딩 플래그나 페이지 매김처럼 여러 곳에서 필요한 관심사를 공유할 때 사용하는 방식입니다.
export const TodoStore = signalStore(
withLoading(),
withEntities<Todo>()
);
// store.loading() now exists메서드를 포함한 기능
사용자 지정 기능에는 withMethods를 포함하여 setLoading 도우미 같은 재사용 가능한 동작을 노출할 수 있습니다.
export function withLoading() {
return signalStoreFeature(
withState({ loading: false }),
withMethods((store) => ({
setLoading(loading: boolean) { patchState(store, { loading }); }
}))
);
}조합 가능성
기능은 기능 설명자를 반환하는 함수일 뿐이므로 여러 기능을 쌓을 수 있습니다. withLoading(), withEntities()와 앱별 상태를 모두 하나의 강력한 타입 스토어로 병합할 수 있습니다.
제네릭 기능
엔터티 유형에 관계없이 작동하도록 기능을 제네릭으로 만드십시오. 형식 매개변수가 계속 전달되므로 사용하는 쪽에서도 완전한 형식 안전성을 유지할 수 있습니다.
export function withSelected<T>() {
return signalStoreFeature(
withState({ selected: null as T | null })
);
}빠른 확인
엔터티와 기능에 대한 지식을 확인해 보십시오.
복습
withEntities를 사용해 컬렉션을 관리하고(정규화된 맵, 갱신 도우미, 파생 읽기 모델), 여러 저장소에서 상태, 계산값, 메서드를 공유할 수 있는 재사용 가능한 제네릭 signalStoreFeature 묶음을 만들었습니다.
자주 묻는 질문
“엔터티와 사용자 지정 기능” 강의는 무료인가요?
네 — “엔터티와 사용자 지정 기능” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Angular Academy 강의 전체를 잠금 해제할 수 있습니다. Angular Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“엔터티와 사용자 지정 기능”에서 뭘 배우나요?
withEntities로 컬렉션을 관리합니다. 브라우저에서 직접 실행하는 실습 코드로 Angular Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Angular Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Angular Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“엔터티와 사용자 지정 기능” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Angular Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Angular Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- SignalStore 만들기
- 계산된 상태와 메서드
- 비동기 작업을 위한 rxMethod
- 엔터티와 사용자 지정 기능