๊ฐ์
์ผ๋ฐ์ ์ธ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์๋ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋๋ ์์ฑ์ ํธ์ถ ์ new ํค์๋์ ํจ๊ป ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๋ค.
Flutter ๋ ์ด์ฐฝ๊ธฐ 1.x ๋ฒ์ ๋น์์๋ง ํด๋ ์ด๋ค ํด๋์ค๋ ์์ฑ์๋ฅผ ํธ์ถํ์ฌ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ new ํค์๋๋ฅผ ๋ฐ๋์ ๋ถ์์ด์ผ ํ๋ค.
ํ์ง๋ง ๋๋ถ๋ถ์ Widget ๋ค์ class๋ก ์ ์ธ๋์ด ์ฌ์ฉ๋๊ณ ์๊ธฐ ๋๋ฌธ์ new ํค์๋์ ์ฆ์ ์ฌ์ฉ์ผ๋ก ์ด๋ฅผ ๋ณด์ํ๊ฒ ๋๋ฉด์ new๋ฅผ ์ฌ์ฉํ์ง ์๋๋ผ๋ ์์ฑ์ ํธ์ถ ์ ์๋์ผ๋ก new ์๋ตํ์ฌ ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๊ฒ ๋์๋ค. (์ผ๋ฐ class๋ ์ ์ฉ๋จ)
๊ทธ๋ฌ๋ ๋ง์ฝ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๋ฌด์ํ ๋ง์ด ์์ฑํ๊ฒ ๋๋ค๋ฉด ๊ณผ๋ํ ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๊ฒ ๋ ๊ฒ์ด๋ค.
์ด๋ ์ฑ๊ธํคํจํด์ ๊ฐ์ฒด๋ฅผ ๋ฑ ํ ๋ฒ๋ง ์์ฑํ์ฌ ์ฌ์ฉํ๋๋ก ๋์์ฃผ๋ ํจํด์ด๋ค.
๋ํ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ค์ํ ์์ญ์ ๋์ผํ ์ํ(state)๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ํจํด ์ค์ ํ๋๋ค.
Singleton ํจํด์ ๊ธฐ๋ณธ ๊ฐ๋
- ํ๋์ ์ธ์คํด์ค: ํด๋์ค๋ ์ค์ง ํ๋์ ์ธ์คํด์ค๋ง์ ๊ฐ๋๋ค.
- ์ ์ญ ์ ๊ทผ: ํด๋น ์ธ์คํด์ค๋ ์ด๋์๋ ์ ๊ทผ ๊ฐ๋ฅํด์ผ ํ๋ค.
- ์ง์ฐ ์ด๊ธฐํ: ํ์ํ ๋๋ง ์ธ์คํด์ค๋ฅผ ์ด๊ธฐํํ๋ค.
Flutter์์ Singleton ํจํด ๊ตฌํ
class TestSingleton {
// Singleton ์ธ์คํด์ค๋ฅผ ์ ์ฅํ๋ ๋ณ์
static final TestSingleton _instance = TestSingleton._internal();
// private ์์ฑ์
TestSingleton._internal();
// ์ธ์คํด์ค์ ์ ๊ทผํ ๋ ์ฌ์ฉํ๋ factory ์์ฑ์
factory TestSingleton() {
return _instance;
}
//์ฑ๊ธํคํด๋์ค์์ ๊ด๋ฆฌํ ์ํ
String data = "์ฑ๊ธํค ๋ฒ๊ธํค!";
}
void main() {
// ๋์ผํ ์ธ์คํด์ค๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
var singleton1 = TestSingleton();
var singleton2 = TestSingleton();
// ๋ ์ธ์คํด์ค๋ ๊ฐ์ ๊ฐ์ฒด์์ ํ์ธํ ์ ์์ต๋๋ค.
print(singleton1 == singleton2); // true
print(singleton1.data); // ์ฑ๊ธํค ๋ฒ๊ธํค!
print(singleton2.data); // ์ฑ๊ธํค ๋ฒ๊ธํค!
singleton1.data = "์์ ๋์์ต๋๋ค!";
print(singleton1.data); // ์์ ๋์์ต๋๋ค!
print(singleton2.data); // ์์ ๋์์ต๋๋ค!
}
- TestSingleton._internal() ์ private ์์ฑ์์ด๋ค. ์ธ๋ถ์์๋ ์ ๋๋ก ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํ๋ฉฐ ์ค๋ฅด์ง ํด๋น ํด๋์ค ๋ด๋ถ์์๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
- factory TestSingleton() ์ ์ธ๋ถ์์ ์ด ํด๋์ค์ ์ ๊ทผํ ๋ ์ฌ์ฉ๋๋ฉฐ, ํญ์ ๊ฐ์ ์ธ์คํด์ค๋ฅผ ๋ฐํํ๊ฒ ๋๋ค.
- _instance๋ ์ ์ผํ ์ธ์คํด์ค๋ฅผ ์ ์ฅํ๊ฒ ๋ ๋ณ์๋ค. ๋ฐ๋ผ์ ํด๋์ค๊ฐ ์ฒ์ ํธ์ถ๋ ๋ ๋ฑ ํ ๋ฒ๋ง ์์ฑ๋๊ณ , ๊ทธ ํ๋ก๋ ๊ฐ์ ์ธ์คํด์ค๋ง ๋ฐํํ๊ฒ ๋๋ค.
- singleton1 == singleton2๋ ๊ฐ์ ์๋ก ๊ฐ์ฒด์์ ๋ณด์ฌ์ฃผ๊ณ ์๋ค.
- singleton1.data = "์์ ๋์์ต๋๋ค!"๋ฅผ ํตํด 1๋ฒ ๊ฐ์ฒด๊ฐ ๋ณ๊ฒฝ๋จ์ ๋ฐ๋ผ 2๋ฒ๋ ๋ณ๊ฒฝ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค.