๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป Frontend/Angular

[Angular] Pipe๋ž€? (feat. Built-in Pipe)

by Fomagran ๐Ÿ’ป 2022. 5. 24.
728x90
๋ฐ˜์‘ํ˜•

Pipe๋ž€?

 

Angular ๊ณต์‹ ๋ฌธ์„œ์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์†Œ๊ฐœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

์ง๋…ํ•˜๋ฉด "ํด๋ž˜์Šค๋ฅผ ํŒŒ์ดํ”„๋กœ ํ‘œ์‹œํ•˜๊ณ  ๊ตฌ์„ฑ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ" ์ž…๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฐ๋ฐ ์ด๋ ‡๊ฒŒ ๋งํ•˜๋ฉด ๋ฌด์Šจ ๋ง์ธ์ง€ ์ดํ•ด๊ฐ€ ์•ˆ๋˜์ฃ ?

 

์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋ง์”€ ๋“œ๋ฆฌ๋ฉด HTML์—์„œ ๋ฌธ์ž๋‚˜ ์ˆซ์ž๋ฅผ ์›ํ•˜๋Š” ๊ฒƒ์— ๋งž๊ฒŒ ๋ณ€ํ˜•ํ•  ๋•Œ ์“ฐ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

์•„๋ž˜๋Š” Angular์—์„œ built-in์œผ๋กœ ์ œ๊ณต๋˜๋Š” Pipe API List ์ธ๋ฐ์š”.

 

ํ•˜๋‚˜์”ฉ ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

1. ๋ฌธ์ž ํŒŒ์ดํ”„

 

๋จผ์ € ๊ฐ€์žฅ ์‰ฌ์šด ๊ฒƒ๋ถ€ํ„ฐ ๋ฌธ์ž๋ฅผ ๋ณ€ํ˜•์‹œํ‚ค๋Š” ํŒŒ์ดํ”„์ž…๋‹ˆ๋‹ค.

 

UpperCasePipe,LowerCasePipe, TitleCasePipe ๋“ฑ์ด ์žˆ๋Š”๋ฐ ๋ง ๊ทธ๋Œ€๋กœ ๋ฌธ์ž๋ฅผ ๋ณ€ํ˜• ์‹œ์ผœ์ฃผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‚˜ํƒ€๋‚ด๊ณ  ์‹ถ์€ ๋ฌธ์ž๋ฅผ '|' ๊ฒƒ๊ณผ ํ•จ๊ป˜ ํŒŒ์ดํ”„ ์ด๋ฆ„์„ ์ ์–ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

์šฐ์„  tsํŒŒ์ผ์— ์•„๋ž˜์™€ ๊ฐ™์ด name์„ ์ •ํ•ด์ฃผ์‹œ๊ณ  (์˜ค ํ‹ฐ์Šคํ† ๋ฆฌ์— TypeScript๋„ ์ด์ œ ์ง€์›๋˜๋„ค)

 

 name: string = 'Fomagran';

 

HTML ํƒœ๊ทธ์— ์ ์šฉํ•ด ์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

<div>{{ name | uppercase }}</div>
<div>{{ name | lowercase }}</div>
<div>{{ name | titlecase }}</div>

 

๊ทธ๋Ÿผ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฌธ์ž๊ฐ€ ๋ณ€ํ˜•๋ผ์„œ ๋‚˜ํƒ€๋‚˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

 

2. ์ˆซ์ž ํŒŒ์ดํ”„

 

๊ทธ ๋‹ค์Œ์œผ๋ก  ์ˆซ์ž์™€ ๊ด€๋ จ๋œ ํŒŒ์ดํ”„๋ฅผ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๋จผ์ € ์†Œ์ˆ˜์ ์ด ์žˆ๋Š” ์ˆซ์ž๋ฅผ ์›ํ•˜๋Š” ํ˜•์‹์— ๋งž๊ฒŒ ๋‚˜ํƒ€๋‚ด๊ณ  ์‹ถ๋‹ค๋ฉด DecimalPipe๋ฅผ ์ด์šฉํ•˜๋ฉด ๋˜๋Š”๋ฐ์š”.

 

tsํŒŒ์ผ์— pi๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆซ์ž๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๊ณ 

 

pi: number = 3.14159265359;

 

HTML ํƒœ๊ทธ์— number ํŒŒ์ดํ”„๋ฅผ ์ ์šฉํ•ด ์ค๋‹ˆ๋‹ค.

 

<div>{{ pi | number }}</div>
<div>{{ pi | number: "1.4-5" }}</div>

 

๊ทธ๋ƒฅ number๋งŒ ์‚ฌ์šฉํ•˜์˜€์„ ๊ฒฝ์šฐ default๊ฐ€ ์†Œ์ˆ˜์  3์ž๋ฆฌ๊นŒ์ง€ ๋‚˜ํƒ€๋‚˜๊ณ , ์ •์ˆ˜์ธ ๋ถ€๋ถ„ x. ์†Œ์ˆ˜์ธ ๋ถ€๋ถ„์˜ ๊ธธ์ด n~m๊นŒ์ง€๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

3. ๊ธฐํ˜ธ ํŒŒ์ดํ”„

 

ํ™”ํ์˜ ๋‹จ์œ„๋ฅผ ๋’ค์— ๋ถ™์ผ ์ˆ˜๋„ ์žˆ๊ณ  ํผ์„ผํŠธ๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜๋„ ์žˆ๋Š”๋ฐ์š”.

 

tsํŒŒ์ผ์— percent์™€ money๋ฅผ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค.

 

  percent: number = 0.259;
  money: number = 0.35;

 

HTML ํƒœ๊ทธ์— ์•„๋ž˜์™€ ๊ฐ™์ด ์ ์šฉํ•ด ์ค๋‹ˆ๋‹ค.

 

<div>{{ percent | percent }}</div>
<div>{{ percent | percent: "2.3" }}</div>
<div>{{ money | currency }}</div>
<div>{{ money | currency: "KRW":"symbol":"1.2" }}</div>

 

์œ„ DecimalPipe์—์„œ ์‚ฌ์šฉํ•œ ์ •์ˆ˜ ๋ฐ ์†Œ์ˆ˜์ ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฉ๋ฒ•๋„ ๋˜‘๊ฐ™์ด ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

4. ๋‚ ์งœ ํŒŒ์ดํ”„

 

DatePipe๋ฅผ ์ด์šฉํ•ด์„œ ๋‚ ์งœ ํ˜•์‹์— ๋งž๊ฒŒ ๋‚˜ํƒ€๋‚ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

 

tsํŒŒ์ผ์— ํ˜„์žฌ date๋ฅผ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค.

 

  date: number = Date.now();

 

HTMLํƒœ๊ทธ์— ์•„๋ž˜์™€ ๊ฐ™์ด ์ ์šฉํ•ด ์ค๋‹ˆ๋‹ค.

 

<div>{{ date | date: "medium" }}</div>
<div>{{ date | date: "YYYY/MM/dd" }}</div>

 

Angular์—์„œ ์ด๋ฏธ ๋งŒ๋“ค์–ด ๋†“์€ short, medium, long์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๊ณ 

 

(์—ฌ๊ธฐ ๊ฐ€์‹œ๋ฉด ๋” ์ž์„ธํžˆ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)

 

 

์›๋ž˜ ์‚ฌ์šฉํ•˜๋˜๋Œ€๋กœ YYYY/MM/dd์™€ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ๋„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

5. ๊ฐ์ฒด ํŒŒ์ดํ”„

 

tsํŒŒ์ผ์— object์™€ json๊ฐ์ฒด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” jsonObject๋ฅผ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค.

 

  object: { [key: number]: string } = { 1: 'one', 2: 'two', 3: 'three' };
  jsonObject: Object = {
    foo: 'bar',
    baz: 'qux',
    nested: { xyz: 3, numbers: [1, 2, 3, 4, 5] },
  };

 

์•„๋ž˜์™€ ๊ฐ™์ด HTMLํƒœ๊ทธ์— ์ ์šฉํ•ด ์ค๋‹ˆ๋‹ค.

 

<div *ngFor="let item of object | keyvalue">
  {{ item.key }}. {{ item.value }}
</div>
<div>
  <pre>{{ jsonObject | json }}</pre>
</div>

 

์•„๋ž˜์™€ ๊ฐ™์ด ๊ฐ์ฒด๋ฅผ ํ‚ค,๋ฐธ๋ฅ˜ ๊ฐ’์— ๋งž๊ฒŒ ์›ํ•˜๋Š” ํ˜•ํƒœ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜๋„ ์žˆ๊ณ , JSON ํ˜•์‹์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒ ๋‚˜ํƒ€๋‚ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

 

6. ๋ฐฐ์—ด ํŒŒ์ดํ”„

 

slice๋ฅผ ์ด์šฉํ•ด์„œ ๋ฐฐ์—ด์„ ์ž˜๋ผ์„œ ๋ณด์—ฌ์ค„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

 

tsํŒŒ์ผ์— ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด ์ฃผ๊ณ ,

 

array: number[] = [1, 2, 3, 4, 5, 6, 7];

 

HTML ํƒœ๊ทธ์— slice๋ฅผ ์ ์šฉํ•ด ์ค๋‹ˆ๋‹ค.

 

<div>{{ array | slice: 0:4 }}</div>
<div>{{ array | slice: -2 }}</div>

 

์•„๋ž˜์™€ ๊ฐ™์ด slice๊ฐ€ ์ ์šฉ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

7. ๋น„๋™๊ธฐ ํŒŒ์ดํ”„

 

๋งˆ์ง€๋ง‰์œผ๋กœ ๋‚˜์ค‘์— ๋ฐ”๋€Œ๊ฒŒ ๋˜๋Š” ๋น„๋™๊ธฐ ํŒŒ์ดํ”„์— ๋Œ€ํ•ด์„œ ์•Œ์•„ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

tsํŒŒ์ผ์— 1์ดˆ์— ํ•œ๋ฒˆ์”ฉ ๋ฐ”๋€Œ๋„๋ก ํ•˜๋Š” Observable์„ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค.

 

time = new Observable<string>((observer: Observer<string>) => {
    setInterval(() => observer.next(new Date().toString()), 1000);
  });

 

HTML ํƒœ๊ทธ์— asyncํŒŒ์ดํ”„๋ฅผ ์ ์šฉํ•ด ์ค๋‹ˆ๋‹ค.

 

<div>Time: {{ time | async }}</div>

 

์•„๋ž˜์™€ ๊ฐ™์ด ์ดˆ์— ๋”ฐ๋ผ ์—…๋ฐ์ดํŠธ ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 


์˜ค๋Š˜์€ ์ด๋ ‡๊ฒŒ ์ง์ ‘ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๊ณ ๋„ ํŽธ๋ฆฌํ•˜๊ฒŒ HTML์—์„œ ์›ํ•˜๋Š” ํ˜•ํƒœ๋กœ ๋ณ€ํ˜•ํ•˜์—ฌ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋Š” ํŒŒ์ดํ”„์— ๋Œ€ํ•ด ์•Œ์•„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

 

๋•๋ถ„์— ์ด์ œ ํŽธํ•˜๊ฒŒ HTML์—์„œ ์›ํ•˜๋Š” ๋ฌธ์ž๋‚˜ ์ˆซ์ž๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

์ œ๊ฐ€ ์ •๋ฆฌํ•œ ๊ฒƒ ์™ธ์—๋„ ๋” ๋‹ค์–‘ํ•œ ํŒŒ์ดํ”„๋“ค์ด ์žˆ์œผ๋‹ˆ ๊ถ๊ธˆํ•˜์‹  ๋ถ„๋“ค์€ ๊ณต์‹ Angular ํ™ˆํŽ˜์ด์ง€์—์„œ ํ™•์ธํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

ํ˜น์‹œ๋ผ๋„ ํ‹€๋ฆฐ ์ ์ด ์žˆ๊ฑฐ๋‚˜ ๊ถ๊ธˆํ•˜์‹  ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€๋กœ ์•Œ๋ ค์ฃผ์„ธ์š”!


Reference

 

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€