[049] 플러터 (Flutter) 배우기 - Singleton (싱글톤) 개념 이해하기

2023. 4. 4. 13:52모바일어플개발/Flutter

반응형

안녕하세요~ totally 개발자입니다.

 

Singleton (싱글톤)

 

저번 포스팅에서는 Factory(팩토리) 패턴에 대해 살펴보면서 싱글톤의 개념을 일부 언급했지만 이번 포스팅을 통해 조금 더 자세하게 살펴보고자 합니다. 물론 factory 키워드는 여기에서도 사용되기 때문에 저번 포스팅을 보시고 이번 포스팅을 보시면 더욱 이해가 될 것이라 생각합니다. 

 

 

싱글톤의 특징

 

1) 클래스의 static 멤버를 선언하고 인스턴스를 할당해줍니다.

2) public으로 접근이 되지 않도록 생성자에 대한 접근을 private로 제한합니다. 

3) 인스턴스를 return해줄 수 있는 메소드를 만들어줍니다.

4) 하나의 클래스에서 하나의 인스턴스만 생성하여 사용합니다.

5) factory 생성자에서는 this에 접근할 수 없습니다.

 

이를 기반으로 실습으로 들어가보도록 하겠습니다.

 

Step 1: 주석을 상세하게 달아놓았는데 먼저 처음으로 Singleton 클래스의 인스턴스에서 사용될 변수를 선언해줍니다. 저는 Map 형식으로 key와 value값을 담을 수 있는 변수를 선언하였습니다. 그 후에 Singleton 클래스의 인스턴스를 private 생성자 형태로 _internal()를 사용하여 선언합니다. 만약 이 작업이 없다면 public으로 자동 생성됩니다. 그리고 9번째 줄에서 factory 키워드를 사용하여 factory 생성자를 만들어주고 인스턴스가 아직 만들어지지 않았다면 생성해서 return하며 이미 존재하는 경우에는 기존의 인스턴스를 그대로 return하게 됩니다. 12~14번째 줄에서는 6번째 줄의 Singleton._internal() private 생성자를 통해 초기화 작업을 진행해줄 수 있습니다. 마지막으로 17, 18번째 줄의 set과 get 메소드를 통해 인스턴스의 변수인 _data에 접근 가능해서 데이터를 주고 받을 수 있도록 선언해줍니다.

 

 

 

Step 2: 메인 함수를 작성해줍니다. 여기에서 22~24번째 dataList1을 만들고 26-28번째 줄처럼 dataList2 변수를 만들어서 Singleton 인스턴스를 만들어주었습니다. 위에서 이해를 제대로 하셨다면 이 dataList1과 dataList2는 같은 인스턴스인 것을 알 수 있으며 dataList1에 set으로 데이터를 추가하던지 dataList2에 set으로 데이터를 추가하던지 같은 값이 리턴되는 것을 알 수 있습니다. 그것에 대한 확인은 30-32번째 라인을 통해 확인해볼 수 있습니다. 그리고 dataList1과 dataList2를 출력해보는 과정을 통해 그것을 정확하게 알 수 있습니다.

 

 

 

Step 3: 직접 실행해서 테스트해보도록 합니다. (dart Singleton.dart를 터미널에 입력)

 

 

위와 같이 나온다면 제대로 Singleton이 적용된 것입니다. 직접 실습을 해보시면 바로 이해가 될 것이라고 생각되며 memory 절약 및 성능 개선 등의 여러 장점이 있기 때문에 활용해보시는 것을 권장드립니다. 감사합니다.

 

[전체 소스 코드]

 

 

반응형