파이프를 사용하면 문자열을 원하는 형태로 가공하여 출력할 수 있다.
문자열바인딩에서 호출하는 함수와 같이 어떤 값을 입력받아서 가공된 데이터를 반환하는 별도정의된 함수다.
특징
파이프는 한번선언으로 어플리케이션 어느곳에서도 자유롭게 사용가능하다.
앵귤러는 자체적으로 기본 파이프들을 제공한다.
DatePipe, UpperCasePipe, LowerCasePipe, CurrencyPipe, DecimalPipe, PercentPipe
문자열바인딩, 템플릿 표현식변수는 화면이 갱신될때마다 새롭게 평가되기때문에 값이 변경되었다면 DOM에 반영되고 뷰가 갱신된다.
표현식에 파이프가 적용상태에서 화면이 갱신될때마다 파이프가 실행된다면 성능저하가 발생된다.
그래서 앵귤러는 파이프가 적용된 표현식에는 다른 변화감지 알고리즘을 사용한다.
기본적으로 파이프는 순수한 상태로 정의되며 앵귤러는 입력받은 값이 정말 변경된 것임을 확인할때만 파이프를 실행한다.
원시값일때는 값이 변경되고 객체는 객체주소가 변경되었을때를 변경된것으로 간주하는데 객체프로퍼티 변경을 변경되지 않은 것으로 처리한다는 것이다.
따라서 순수함수로 만들어진 파이프는 객체프로퍼티 변경을 무시한다.
객체 프로퍼티 변경감지를 위해 파이프 데코레이터 메타데이터 pure:false를 사용한다.
옵저버블을 파이프와 같이 사용하면 효과가 있다.
this.message$ = interval(1000).pipe(
map(i=>this.messages[i]),
take(this.messages.length)
)
메세지배열을 옵저버블스트림으로 만들고
<p>Message: {{ message$ | async }}</p>
async 파이프를 사용하면 앵귤러가 구독,방출,구독해지를 자동으로 처리해주기 때문에 편리하게 사용할 수 있다.
pure:false 는 가급적 사용하지 않는것이 좋다.
뷰가 갱신될때마다 Impure파이프는 실행되므로 성능저하가 발생할 수 있다.