콘텐츠로 이동

Flutter Linter Rules in analysis_options.yaml

머리말

Flutter 개발을 하다 보면 IDE에서 노란색 경고선이나 린터(Linter) 메시지들이 많이 나타납니다. 이런 경고들이 모두 필요한 것은 아니고, 개발 중에는 오히려 방해가 될 수 있어요. 특히 개발 초기나 빠른 프로토타이핑을 할 때는 이런 경고들을 끄는 것이 도움이 됩니다.

analysis_options.yaml 파일 위치

Flutter 프로젝트의 루트 폴더analysis_options.yaml 파일을 수정합니다.

1
2
3
4
5
6
your-flutter-project/
├── lib/
├── android/
├── ios/
├── pubspec.yaml
└── analysis_options.yaml  ← 여기에 파일 수정

권장 Linter 규칙 설정

개발을 편하게 하기 위해 다음 5가지 규칙을 끄는 것을 권장합니다:

1
2
3
4
5
6
7
linter:
  rules:
    prefer_const_constructors: false
    prefer_const_literals_to_create_immutables: false
    prefer_const_constructors_in_immutables: false
    avoid_print: false
    use_build_context_synchronously: false

각 규칙별 상세 설명

1. const 관련 규칙들 (1-3번째 줄)

1
2
3
prefer_const_constructors: false
prefer_const_literals_to_create_immutables: false
prefer_const_constructors_in_immutables: false

이 규칙들이 하는 일:

  • Flutter에서 성능 최적화를 위해 const 키워드 사용을 권장하는 경고를 보여줍니다
  • const를 쓸 수 있는 곳에 쓰지 않으면 노란색 줄이 나타납니다

끄는 이유:

  • 개발 중에는 코드가 자주 바뀌기 때문에 const를 매번 추가/제거하기 번거로워요
  • 기능 구현에 집중하고, 나중에 최적화 단계에서 한꺼번에 처리하는 것이 효율적입니다

예시:

// Linter 켜져 있을 때: 경고 표시
Container(
  child: Text('Hello'),  // ← 여기서 const 권장 경고
)

// Linter 꺼져 있을 때: 경고 없음
Container(
  child: Text('Hello'),  // ← 깔끔!
)

2. print 사용 규칙 (4번째 줄)

avoid_print: false

이 규칙이 하는 일:

  • print() 함수 사용을 피하고 정식 로깅 패키지 사용을 권장합니다

끄는 이유:

  • 개발자들은 빠르고 간단한 디버깅을 위해 print() 를 자주 사용해요
  • 로깅 패키지(logger, dio 등)는 좋지만, 간단한 확인용으로는 print가 더 편리합니다

예시:

// Linter 켜져 있을 때: 경고 표시
print('디버깅: 사용자 ID = $userId');  // ← 경고

// Linter 꺼져 있을 때: 경고 없음
print('디버깅: 사용자 ID = $userId');  // ← 자유롭게 사용!

3. BuildContext 동기화 규칙 (5번째 줄)

use_build_context_synchronously: false

이 규칙이 하는 일:

  • 비동기 작업 후에 BuildContext를 사용할 때, 위젯이 아직 마운트되어 있는지 확인하라고 경고합니다

끄는 이유:

  • 간단한 앱에서는 대부분 문제가 되지 않아요
  • 매번 mounted 체크를 하는 것이 번거로울 수 있습니다

예시:

// Linter 켜져 있을 때: 경고 표시
Future<void> loadData() async {
  await Future.delayed(Duration(seconds: 1));
  Navigator.pop(context);  // ← 경고: context 사용 전 mounted 체크 권장
}

// Linter 꺼져 있을 때: 경고 없음
Future<void> loadData() async {
  await Future.delayed(Duration(seconds: 1));
  Navigator.pop(context);  // ← 자유롭게 사용!
}

설정 적용하기

  1. 파일 저장 후 IDE를 재시작하거나
  2. Hot Reload (r 키)를 실행하면 적용됩니다

적용 확인

기존에 노란색 경고선이 있던 코드들이 사라지면 정상적으로 적용된 것입니다!

언제 이 설정을 사용하면 좋을까요?

✅ 사용하면 좋은 경우:

  • 개발 초기 단계: 기능 구현에 집중하고 싶을 때
  • 빠른 프로토타이핑: 아이디어를 빠르게 테스트할 때
  • 학습 중: Flutter를 배우는 중에 경고에 신경쓰고 싶지 않을 때
  • 소규모 프로젝트: 간단한 개인 프로젝트

❌ 사용하지 않는 것이 좋은 경우:

  • 배포 준비 단계: 앱스토어 출시 전 최적화가 필요할 때
  • 대규모 팀 프로젝트: 코드 품질 관리가 중요할 때
  • 성능이 중요한 앱: 최적화가 필수적일 때

추가 팁

나중에 최적화하기

배포 전에는 이 설정들을 다시 켜서 최적화를 진행하세요:

1
2
3
4
5
6
7
linter:
  rules:
    prefer_const_constructors: true
    prefer_const_literals_to_create_immutables: true
    prefer_const_constructors_in_immutables: true
    avoid_print: true
    use_build_context_synchronously: true

선택적 적용

모든 규칙을 끌 필요는 없어요. 필요한 것만 선택적으로 끄세요:

1
2
3
4
5
6
7
8
linter:
  rules:
    # 개발 중에만 끄고 싶은 것들
    prefer_const_constructors: false
    avoid_print: false

    # 항상 지키고 싶은 것들은 그대로 두기
    # use_build_context_synchronously: true (기본값)

마무리

이렇게 5가지 규칙만 꺼도 Flutter 개발이 훨씬 편해집니다!

핵심 포인트:

  • 개발 중에는 편의성을 우선시하고
  • 배포 전에는 최적화를 진행하고
  • 프로젝트 성격에 맞게 선택적으로 적용하세요

개발이 더 즐거워질 거예요! 🚀