Logo

Material UI 아이콘 사용하기

지난 포스팅에서는 Material UI의 <Typography/> 컴포넌트를 사용하여 텍스트를 표현하는 방법에 대해서 알아보았습니다. 이번 포스팅에서는 텍스트와 더불어 UI에서 감초같은 역할을 하는 아이콘을 Material UI에서 어떻게 사용할 수 있는지 알아보도록 하겠습니다.

Material UI의 기본적인 셋업에 대한 부분은 관련 포스팅를 참고 바랍니다.

Material Icons

Material UI는 @material-ui/icons 패키지를 통해서 1,000 여종의 SVG 아이콘을 제공하고 있습니다. 그래서 아이콘을 엄청 많이 쓰는 앱이 아니라면 다른 아이콘 패키지가 필요가 없는 경우가 대부분일 것입니다.

$ npm install @material-ui/icons

사용 방법은 정말 간단합니다. Material Icons 페이지에서 원하는 아이콘을 검색합니다. 그 다음, 해당 아이콘 컴포넌트를 불러와서, React 컴포넌트 안에서 바로 사용하면 됩니다.

import React from "react";
import EcoIcon from "@material-ui/icons/Eco";

export default () => <EcoIcon />;

아이콘의 색상은 color prop으로 바꿀 수 있습니다.

<EcoIcon color="primary" />
<EcoIcon color="secondary" />
<EcoIcon color="action" />
<EcoIcon color="disabled" />
<EcoIcon color="error" />

아이콘의 크기는 fontSize prop으로 바꿀 수 있습니다.

<EcoIcon fontSize="small" />
<EcoIcon />
<EcoIcon fontSize="large" />

커스텀 아이콘 사용하기

Material UI는 커스텀 SVG 아이콘을 사용할 수 있도록 <SvgIcon/> 컴포넌트를 제공하고 있습니다. <SvgIcon/> 컴포넌트는 @material-ui/core 패키지의 일부이므로, @material-ui/icons 패키지를 설치할 필요가 없습니다.

import React from "react";
import { SvgIcon } from "@material-ui/core";

export default () => (
  <SvgIcon color="primary">
    <path d="M17,8C8,10 5.9,16.17 3.82,21.34L5.71,22L6.66,19.7C7.14,19.87 7.64,20 8,20C19,20 22,3 22,3C21,5 14,5.25 9,6.25C4,7.25 2,11.5 2,13.5C2,15.5 3.75,17.25 3.75,17.25C7,8 17,8 17,8Z" />
  </SvgIcon>
);

Material Design Icons은 2,000 여종의 커스텀 아이콘을 제공하고 있습니다. 이 방대한 종류의 아이콘을 위와 같은 방법으로 Material UI와 함께 사용할 수 있습니다.

폰트 아이콘 사용하기

Material Icons은 SVG 아이콘으로 사용하는 것이 성능이나 화질 측면에서 권장되지만, SVG 아이콘을 사용할 수 없는 특수한 경우라면 웹폰트 아이콘으로도 사용할 수 있습니다. 이 경우에는 @material-ui/icons 패키지를 설치하는 대신에, index.html 파일의 <head/>에 아래 코드를 추가하여, Material Icons을 웹폰트로 불러와야 합니다.

<link
  rel="stylesheet"
  href="https://fonts.googleapis.com/icon?family=Material+Icons"
/>

그 다음, @material-ui/core 패키지에서 제공하는 <Icon/> 컴포넌트에 아이콘 이름을 넘겨주면 폰트 아이콘을 사용할 수 있습니다.

import React from "react";
import { Icon } from "@material-ui/core";

export default () => (
  <Icon color="secondary" fontSize="large">
    eco
  </Icon>
);

전체 코드

본 포스팅에서 작성한 코드는 아래에서 확인하실 수 있습니다.

마치면서

이상으로 Material UI에 제공하는 Material Icons 컴포넌트와 <SvgIcon/> 또는 <Icon/> 컴포넌트를 활용해서 어떻게 아이콘을 표현할 수 있는지 살펴보았습니다. 다음 포스팅에서는 Material UI를 사용하면 자주 사용할 수 밖에 없는 <Button/> 컴포넌트에 대해서 알아보겠습니다.