Part 와 import 차이
3개의 파일의 간단한 예시를 통해 알아보겠습니다.
1. library_main.dart
library counter;
export 'package:flutter/material.dart';
part 'library_part.dart';
class Counter extends AbstractCounter {
// we can access library private variable _count even though it is in a different
// file because we made it part of the same library
reset() => _count = 0;
}
첫번째 줄은 이 라이브러리의 이름을 명시해줍니다 -> counter
이것은 part 로부터 참조될 이름으로 사용해줄 수 있습니다. (아래의 library_part.dart 파일에서 "part of counter" 로 사용하는 등)
세번째 줄은 이 라이브러리의 part 로 사용되는 파일들을 나타냅니다.
Counter Class 안에 있는 _count 를 유심히 지켜보며, 아래의 파일(library_part.dart) 을 봅시다.
2. library_part.dart
part of counter;
abstract class AbstractCounter {
// this is a library private variable (_varName)
// if this file were not made part of the counter library, this variable
// would not be accessible to the Counter class in library_main.dart
int _count = 0;
get count => _count;
increment() => ++_count;
}
_count 는 이 파일에 선언되어 있는 것을 볼 수 있습니다.
만약 첫번째 줄처럼 "part of counter" 처럼 선언을 안해줬다면 이 변수는 library_main.dart 파일의 Counter class 에서 접근하지 못했을 겁니다.
3. library_example.dart
// note that 'material.dart' does not need to be imported
// because it has been exported with the counter library
import 'library_main.dart';
class LibraryExample extends StatefulWidget {
@override
_LibraryExampleState createState() => _LibraryExampleState();
}
class _LibraryExampleState extends State<LibraryExample> {
final _counter = Counter();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Library Example'),
),
body: Center(
child: Text('You have pressed the button ${_counter.count} times.'),
),
floatingActionButton: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
FloatingActionButton(
child: Text('Reset'),
onPressed: () => setState(() => _counter.reset()),
),
SizedBox(width: 10),
FloatingActionButton(
child: Icon(Icons.add),
onPressed: () => setState(() => _counter.increment()),
),
],
),
);
}
}
위와 같이 사용할 수 있습니다.
dart 에서는 이렇게 설명합니다.
In Dart, private members are accessible within the same library. With import you import a library and can access only its public members. With part/part of you can split one library into several files and private members are accessible for all code within these files.
즉, 간단히 말해서 import 는 라이브러리를 임포트하고 오직 public 멤버에 대해서만 접근할 수 있습니다 (참고로, private 는 _ 이런 걸로 선언된 것)
그러나 Part 는 한 라이브러리를 여러 개의 파일로 쪼갤 수 있으며 이 파일들 안에서 private 멤버들을 모두 접근할 수 있게 됩니다.
'🐦 Flutter' 카테고리의 다른 글
[Flutter] 푸시 알람 눌렀을 때 다른 페이지로 이동 (4) | 2022.11.17 |
---|---|
[Flutter] Statusbar color 화면마다 다르게 적용 (0) | 2022.09.26 |
[Flutter] 자동 생성 JSON 직렬화 코드와 비교 (0) | 2022.08.20 |
Dart Named Constructor (0) | 2022.08.12 |
Flutter 생명주기 (0) | 2022.07.05 |