factory를 사용해서 싱글톤 클래스를 만들어 테스트 해보기.
생성자에 factory 문구 추가
class DB {
static final Map<String, dynamic> _table = <String, dynamic>{};
static final DB _db = DB._internal();
DB._internal();
factory DB() {
return _db;
}
set(String key, dynamic value) => _table[key] = value;
get(String key) => _table[key];
}
main 함수에서 위 DB클래스를 테스트
DB db1 = DB();
db1.set('id', '1');
db1.set('lang', 'korean');
print('db1_id: ${db1.get('id')}, db1_lnag: ${db1.get('lang')}');
DB db2 = DB();
print('db2_id: ${db2.get('id')}, db2_lnag: ${db2.get('lang')}');
실행 결과
I/flutter ( 7655): db1_id: 1, db1_lnag: korean
I/flutter ( 7655): db2_id: 1, db2_lnag: korean
_table은 DB 클래스에서 데이터 저장하는 static final Map 변수입니다.
_db는 DB 객체화 하며 내부 함수 호출하여 실행
main() 에서 DB객체 1번을 만들어 set 으로 데이터 넣어주고,
print출력하고
DB 객체 2번을 만들어서 다시한번 print출력으로 DB 2번객체의 get 값을 확인하면,
DB객체1 번에 저장한 값이 가져옮을 알수 있다.
DB객체를 계속 생성해도, 처음 사용된 객체를 사용하고 있음을 확인할 수 있다.
--- english ---
Create and test a singleton class using factory.
Add factory statement to constructor
class DB {
static final Map<String, dynamic> _table = <String, dynamic>{};
static final DB _db = DB._internal();
DB._internal();
factory DB() {
return _db;
}
set(String key, dynamic value) => _table[key] = value;
get(String key) => _table[key];
}
Test the above DB class in the main function
DB db1 = DB();
db1.set('id', '1');
db1.set('lang', 'korean');
print('db1_id: ${db1.get('id')}, db1_lnag: ${db1.get('lang')}');
DB db2 = DB();
print('db2_id: ${db2.get('id')}, db2_lnag: ${db2.get('lang')}');
Execution result
I/flutter ( 7655): db1_id: 1, db1_lnag: korean
I/flutter ( 7655): db2_id: 1, db2_lnag: korean
_table is a static final map variable that stores data in DB class.
_db is a DB object and executed by calling an internal function
Create DB object No. 1 in main() and put data as set,
print out
If you create DB object 2 and check the get value of DB 2 object again with print output,
You can see that the value stored in DB object 1 can be moved.
Even if you continue to create DB objects, you can confirm that the first used object is being used.
댓글 없음:
댓글 쓰기