0Pricing
Angular Academy · 강의

순수 파이프와 비순수 파이프

파이프의 변경 감지 동작을 이해합니다.

순수 파이프와 비순수 파이프은(는) CoddyKit의 무료 Angular Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Angular Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Angular Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

기본적으로 순수 파이프

모든 파이프는 기본적으로 순수 파이프입니다. 순수 파이프는 입력 값이나 인수의 참조가 변경될 때만 다시 실행됩니다.

순수 파이프가 빠른 이유

입력 참조가 변경되지 않으면 Angular는 변경 감지 중에 순수 파이프 호출을 건너뜁니다. 따라서 순수 파이프는 효율적으로 동작합니다.

@Pipe({ name: "exclaim", standalone: true })
export class ExclaimPipe implements PipeTransform {
  transform(value: string) { return value + "!"; }
}
// pure: only re-runs when value changes

참조 변경과 값 변경

순수 파이프는 참조 변경을 감지합니다. 배열을 제자리에서 수정해도 배열 참조는 그대로이므로 순수 파이프가 실행되지 않습니다.

// this will NOT re-run a pure pipe:
this.items.push("new");

// this WILL, new reference:
this.items = [...this.items, "new"];

비순수 파이프 선언하기

@Pipe 데코레이터에서 pure: false로 설정하면 파이프가 비순수가 됩니다. 비순수 파이프는 모든 변경 감지 주기마다 실행됩니다.

@Pipe({ name: "filter", standalone: true, pure: false })
export class FilterPipe implements PipeTransform {
  transform(items: string[], term: string) {
    return items.filter(i => i.includes(term));
  }
}

비순수 파이프를 사용하는 경우

배열을 제자리에서 수정하면서 필터링하는 경우처럼 변환이 변경 가능한 데이터에 의존하거나 새 참조를 만들지 않고 변경되는 값에 의존할 때 비순수 파이프를 사용하세요.

비순수 파이프의 비용

비순수 파이프는 모든 변경 감지 주기마다 매우 자주 실행됩니다. 내부에 무거운 로직을 넣으면 성능이 저하될 수 있으므로 가볍게 유지하세요.

async 파이프는 비순수입니다

내장 async 파이프는 비순수 파이프입니다. Observable 또는 Promise를 구독하고 새 값이 도착하면 뷰를 업데이트합니다.

<p>{{ data$ | async }}</p>

// component
data$ = this.http.get("/api/data");

async 파이프의 자동 구독 해제

async 파이프의 큰 장점은 컴포넌트가 제거될 때 자동으로 구독을 해제하여 메모리 누수를 방지한다는 것입니다.

@Component({
  template: "<p>{{ count$ | async }}</p>"
})
export class DemoComponent {
  count$ = interval(1000);
}

순수 파이프에서 변경 피하기

컬렉션에서도 순수 파이프가 제대로 동작하게 하려면 데이터를 불변으로 다루세요. 기존 배열과 객체를 수정하는 대신 새로 만드세요.

// good for pure pipes:
this.users = this.users.concat(newUser);
this.user = { ...this.user, name: "Ada" };

순수 파이프와 비순수 파이프 선택하기

예측 가능하고 빠른 동작을 위해 순수 파이프를 우선 사용하세요. 변경에 반응해야 할 때만 비순수 파이프를 사용하세요. 불변 데이터를 사용하도록 설계를 바꾸면 비순수 파이프가 전혀 필요하지 않은 경우가 많습니다.

비순수 파이프 모범 사례

비순수 파이프를 반드시 사용해야 한다면 결과를 메모이제이션하여 입력이 변경되지 않았을 때 다시 계산하지 않도록 하세요.

@Pipe({ name: "memoFilter", standalone: true, pure: false })
export class MemoFilterPipe implements PipeTransform {
  private last = "";
  private cache: string[] = [];
  transform(items: string[], term: string) {
    if (term === this.last) return this.cache;
    this.last = term;
    this.cache = items.filter(i => i.includes(term));
    return this.cache;
  }
}

빠른 확인

순수 파이프와 비순수 파이프에 대한 이해도를 확인해 보세요.

복습

순수 파이프는 참조가 변경될 때만 실행되므로 빠르고, 비순수 파이프(pure: false)는 모든 주기에 실행되므로 변경 가능한 데이터에 적합합니다. async 파이프는 비순수 파이프이며 자동으로 구독을 해제합니다.

순수 파이프의 효율을 유지하려면 불변 데이터를 우선 사용하세요.

자주 묻는 질문

“순수 파이프와 비순수 파이프” 강의는 무료인가요?

네 — “순수 파이프와 비순수 파이프” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Angular Academy 강의 전체를 잠금 해제할 수 있습니다. Angular Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“순수 파이프와 비순수 파이프”에서 뭘 배우나요?

파이프의 변경 감지 동작을 이해합니다. 브라우저에서 직접 실행하는 실습 코드로 Angular Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Angular Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Angular Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“순수 파이프와 비순수 파이프” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Angular Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Angular Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 내장 파이프 사용
  2. 파이프 연결 및 매개 변수화
  3. 사용자 지정 파이프 만들기
  4. 순수 파이프와 비순수 파이프
← Angular Academy(으)로 돌아가기