저자의 주장: 디자인 시스템의 퍼블릭 API로서 <Tooltip> 컴포넌트는 존재하면 안 된다.
이유:
<Tooltip>은 너무 저수준 추상화라, API만 주면 반드시 잘못 쓰인다.해법:
<Tooltip> 컴포넌트가 위험한가대표 사례: MUI의 기본 예시
<Tooltip title="Delete">
<IconButton>
<DeleteIcon />
</IconButton>
</Tooltip>
<Tooltip title="Home">
<IconHome />
</Tooltip>
<Tooltip title="Unread Mails">
<Badge badgeContent={4} color="primary">
<IconMail color="action" />
</Badge>
</Tooltip>
IconHome, Badge는 비인터랙티브 요소다.React Aria의 접근:
<Focusable>로 감싸도록 요구.툴팁이 어디에 붙어 있는지 예측 가능해야 한다.
현실에서 자주 보이는 패턴:
문장 한가운데 특정 단어에만 툴팁을 달아놓고,
아무 시각적 표시도 없는 경우.
반대로:
결과:
<Tooltip> 대신 고수준 “패턴 컴포넌트” 전략저자의 결론:
“툴팁을 직접 제공하지 말고,
툴팁을 내장한 고수준 패턴 컴포넌트만 제공하라.”
핵심은 두 가지:
구체적인 패턴 제안:
<Button> / <Link>: 선택적 title prop인터랙티브 요소에만 title을 허용.
내부적으로:
효과:
<IconButton>: 필수 title prop아이콘만 있는 버튼은 텍스트 정보가 없다.
API에서 title을 필수로 요구해서:
→ 이걸 강제하면 “의미 불명 아이콘 버튼”을 시스템 레벨에서 차단 가능.
<InfoIcon> 컴포넌트“ⓘ / ?” 같은 정보 아이콘 + 툴팁을 묶은 전용 컴포넌트.
사용처:
설계 포인트:
<InfoText> 컴포넌트텍스트 안에 추가 설명을 붙이고 싶다면,
무의미한 <Tooltip>이 아니라 전용 패턴으로 제공.
예:
일반 텍스트와 구분되는 스타일
키보드 포커스 가능
호버/포커스 시 설명 표시
→ “텍스트 어디에 툴팁이 숨어 있는지” 찾게 만드는 UI를 피하고,
“여기가 정보 텍스트다”라는 시각적·행동적 일관성을 제공.
툴팁은:
그래서:
저자의 논리:
유연성은 레이아웃·컴포지션 컴포넌트에 써라.
툴팁은 포커스·접근성·UX 일관성이 더 중요하다.
제한이 생기면:
결론:
조직용 디자인 시스템을 만든다면,
API에<Tooltip>를 그냥 던져주지 말고,
툴팁이 녹아든 고수준 패턴 컴포넌트만 노출하라.
하지 말 것
<Tooltip>를 public 컴포넌트로 노출해 “어디나” 붙일 수 있게 만들기할 것
Button/Link/IconButton에 title/description 같은 프로퍼티로만 툴팁 제공
InfoIcon/InfoText 같은 명시적인 “정보 패턴” 컴포넌트 도입
키보드 내비게이션 기준으로 툴팁 노출 여부 테스트
“툴팁으로 해결” 대신 정보 구조·UI 재구성 먼저 고민