불필요한 library 이름 규칙

불필요한 library 이름 규칙 (unnecessary_library_name)

library 선언에 이름을 붙이는 게 정말 필요한지 되묻는 린트 규칙이에요. 사실 라이브러리 이름은 현대 Dart에서는 거의 필요가 없어요. 이름을 붙이면 오히려 이름 충돌 위험만 커지고, 읽기에도 별로 도움이 안 되거든요.

출처: unnecessary_library_name

본문

library 선언에는 라이브러리 이름을 두지 마세요.

라이브러리 이름은 꼭 필요한 게 아니에요. 라이브러리 선언 자체는 필수가 아니지만, 라이브러리 문서(문서 주석)나 메타데이터를 붙이려면 선언 하나는 추가할 수 있어요. 그럴 때 library;라고만 선언해도 충분해요.

라이브러리 이름이 유일하게 쓰이는 경우는 part 파일이 자기 소속 라이브러리를 가리킬 때인데, part 파일은 라이브러리 이름 대신 문자열 URI로 돌아가는 걸 선호해야 해요.

그리고 라이브러리 이름을 선언에 추가하면 이름 충돌(name conflict) 위험이 생겨요. 같은 프로그램 안에 같은 이름의 라이브러리가 두 개 있으면 컴파일 타임 에러가 나거든요. 그걸 피하려고 사람들은 패키지 이름과 경로까지 포함한 긴 이름을 쓰곤 하는데, 그럼 읽기도 어렵고 문서 역할도 제대로 못 해요.

먼저 좋지 않은 예를 볼게요. 이렇게 길고 장황한 이름은 읽기 어렵죠.

/// This library has a long name.
library magnificator.src.helper.bananas;

이건 좀 짧지만 그래도 충돌 위험이 있어요.

library utils; // Not as verbose, but risks conflicts.

좋은 예를 볼게요. 문서 주석과 함께 이름 없이 library;라고만 선언하고, part에서는 문자열 URI로 연결해요.

/// This library is awesome.
library;

part "apart.dart"; // contains: `part of "good_library.dart";`

활성화하기

unnecessary_library_name 규칙을 켜려면 analysis_options.yaml 파일의 linter > rules 아래에 unnecessary_library_name을 추가하면 돼요.

linter:
  rules:
    - unnecessary_library_name

린트 규칙을 설정할 때 YAML 맵 문법을 쓰고 있다면, linter > rules 아래에 unnecessary_library_name: true처럼 넣어 주면 돼요.

linter:
  rules:
    unnecessary_library_name: true

더 알아보기

  • 이 규칙은 Dart 3.4에서 추가됐고, 권장(Recommended) 단계로 자동 수정(Fix)이 제공돼요.
  • library 지시문 자체를 언제 쓰면 되는지 궁금하다면 unnecessary_library_directive 규칙도 같이 살펴보세요.