Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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
Tags
more
Archives
Today
Total
관리 메뉴

coding etude

[flutter] factory(singleton의 이해) 본문

Flutter(Dart)

[flutter] factory(singleton의 이해)

코코리니 2022. 10. 12. 11:05

같은 객체의 생성자를 호출 하면 호출 할 때마다 인스턴스가 생성 된다.

하지만 Singleton을 사용하면 하나의 인스턴스만을 생성하기 때문에 메모리와 속도 측면에서 장점을 가지고 있다.

 

class Singleton {
	int count;
	static final Singleton _instance = Singleton._internal(); // 인스턴스를 싱글톤으로 생성
    
    Singleton._internal() {
    	count = 0;
    	//변수를 가지고 있다면 이렇게 초기화 해주면 된다.
    }
    // Songleton._internal(); 없다면 단순하게 실행만..
    
    factory Singleton() => _instance; // factory는 실글톤 생성의 키워드
    
    void functionEx(){
    	count++;
        // 메소드 생성
    }
}

// 이렇게 실글톤을 생성 후 사용만 하면 된다.

void main() {
	var a = Singleton().functionEx();
    var b = Singleton().functionEx();
    
    print('$a'+ '$b');
    // 이런 식으로 어느 곳에서도 이미 생성된 싱글톤을 사용 할 수 있다.
}

위에서 실행된 값은 원래 1 1 이 나와야 하지만 싱글톤으로 호출 시 22가 호출 되서어 하나의 인스턴스가 호출 된것을 알 수 있다.

위의 Singleton 생성자를 계속 호출해도 이미 메모리에 생성되어 있기 때문에 데이터의 연속성으로 공유가 쉬다는 것과 속도측면에서도 장점이 있는것다.

 

하지만, 싱글톤의 단점 역시 존재한다.

1. 인스턴스가 하나만 생성되기 때문에 여러곳에서 동시에 호출되면 동시성의 문제가 발생하기 때문에 호출 순서를 신경써서 만들어야 한다.

(멀티 스레드환경의 동기화 처리를 해주어야 한다)

2.싱글톤 내에서 너무 많은 일을 하거나 많은 데이터를 공유한다면 유지보수가 힘들고 유닛 테스트가 힘들어 지기 때문에 개발 후반에 어려움이 생길 수 있다.

 

싱글톤은 보통 manager or controller 등에 사용하여 환경을 및 데이터를 컨트롤 하는 용도로 사용하기 좋은 방법이고 그외에 사용 하려한다면 충분한 고려가 필요해 보인다.