2022년 10월 24일 월요일

[Flutter] factory 싱글톤 클래스 테스트

 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.


댓글 없음:

댓글 쓰기