일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- ARM
- BFS
- FastAPI
- system hacking
- pytorch
- Flutter
- 파이토치 트랜스포머를 활용한 자연어 처리와 컴퓨터비전 심층학습
- BAEKJOON
- Image Processing
- ML
- Dreamhack
- Algorithm
- MATLAB
- llm을 활용 단어장 앱 개발일지
- rao
- Widget
- study book
- MDP
- bloc
- 백준
- C++
- Computer Architecture
- Got
- Kaggle
- fastapi를 사용한 파이썬 웹 개발
- PCA
- DART
- Stream
- BOF
- 영상처리
- Today
- Total
Bull
[Flutter] factory 생성자 (.fromJson) 본문
사용 이유
만들고 있는 앱 중, 데이터를 로컬에 저장시키기 위해 인스턴스를 JSON 형태로 직렬화 하고 이를 문자열로 변환하여 shared_preferences 패키지의 클래스에 저장한다. 이를 다시 데이터로 읽을 때, 문자열을 JSON형태로 변환하고 다시 객체로 역직렬화를 시킨다.
그 중, 문자열을 JSON 형태로 변환된 상태를 객체로 역질렬화 시킬 때 factory 키워드 중 (객체).fromJson이 사용된다.
적용 예시 (.fromJson)
import 'dart:convert';
class SongInfo {
String song;
String artist;
String number;
bool isTJ;
bool isKY;
SongInfo({required this.song, required this.artist, required this.number, this.isTJ = false, this.isKY = false});
// JSON으로 객체를 변환하는 메서드
Map<String, dynamic> toJson() {
return {
'song': song,
'artist': artist,
'number': number,
'isTJ': isTJ,
'isKY': isKY,
};
}
// JSON에서 객체로 변환하는 팩토리 생성자
factory SongInfo.fromJson(Map<String, dynamic> json) {
return SongInfo(
song: json['song'],
artist: json['artist'],
number: json['number'],
isTJ: json['isTJ'],
isKY: json['isKY'],
);
}
}
나의 프로젝트 중 데이터 인스턴스를 생성하는 코드 중 일부이다.
일반적인 factory 키워드는?
보통 객체를 생성할 때 간단하게 new 키워드를 사용하여 새로운 인스턴스를 만든다. 그런데 factory 생성자를 사용하면 조금 다른 방식으로 객체를 만들 수 있다.
기본 생성자와 차이점은 일반적인 생성자는 클래스의 새 인스턴스를 만들 때마다 호출된다. 즉, new MyClass()를 호출할 때 마다 MyClasss의 새로운 객체가 메모리에 생성된다. 하지만 factory 생성자는 새 객체를 만들 수도 있고 이미 만들어진 객체를 재사용할 수 있다.
factory 생성자 사용의 싱글톤 패턴을 예
class Singleton {
static Singleton? _instance;
// Private constructor
Singleton._privateConstructor();
// The factory constructor
factory Singleton() {
if (_instance == null) {
_instance = Singleton._privateConstructor();
}
return _instance!;
}
}
위 싱클톤 클래스는 Singleton._privateConstructor(); 를 통해 외부에서 직접 인스턴스를 생성할 수 없게 한다.
대신, factory 생성자 Singleton()을 통해 객체를 요청하면 _instance를 확인하고 이미 있다면 기존의 것을 반환해준다.
장점
- 같은 객체를 여러 번 만들 필요가 없으니 메모리를 효율적으로 사용할 수 있다.
- 객체 생성을 더 세밀하게 제어할 수 있다.
단점
코드가 더 복잡해질 수 있고, 생성자의 동작 방식을 잘 알고 있어야 한다.
결론
factory 생성자는 이미 있는 인스턴스를 재사용할 수 있도록 해주는 것이다.
.fromJson과 같이 특별한 로직이 필요할 경우 사용한다.
'Software Framework > Flutter' 카테고리의 다른 글
[Flutter] Bloc Widget정리 (0) | 2024.07.15 |
---|---|
[Flutter] Font 적용하기 (로컬 저장 방식) (0) | 2024.07.10 |
[Flutter] Bloc 상태 관리 (0) | 2024.07.08 |
[Flutter] Icon 사용하기 (0) | 2024.03.11 |
[Flutter] dart에 upbit api 호출하기 (1) | 2024.01.24 |