티스토리 뷰

반응형

안녕하세요 Pingu입니다.🐧

 

지난 글에서는 Prototype Pattern에 대해 알아봤는데요, 이번 글에서는 또 다른 Creational Pattern 중 하나인 Singleton Pattern(싱글턴)에 대해 알아보도록 하겠습니다!

 

싱글턴 패턴이란?

싱글턴 패턴은 하나의 프로그램에서 단 하나의 객체만 있어도 되는 경우 해당 객체를 한 번만 생성하고, 모든 곳에서 접근 가능하게 해주는 패턴입니다.

 

싱글턴 패턴을 사용할 객체는 한 번만 생성되어야 하며 프로그램의 모든 곳에서 접근이 가능한 전역 변수여야 합니다. 한 번만 생성되어야 하므로 생성자를 private 접근 수준으로 만들어야 하고 이를 생성하기 위해서 static 생성 메서드를 만들고 static 변수에 할당해주면 됩니다.

 

저는 iOS 개발을 하다 싱글턴 객체를 많이 발견할 수 있었는데요, 예를 들어 UIApplication의 싱글턴 객체인 shared라던가 UIDevice.current 객체 등 정말 다양한 곳에서 사용하고 있습니다.

싱글턴 패턴은 언제 쓰나요?

싱글턴 패턴은 어떤 클래스의 인스턴스가 두 개 이상 존재하면 문제가 있거나 뭔가 논리에 맞지 않을 때 사용합니다. 예를 들어 DB를 관리하는 객체라던가 File Manager 객체같이 굳이 두 개 이상 존재할 필요도 없을 때 싱글턴 패턴을 사용할 수 있어요.

싱글턴 패턴의 결과

  • 하나의 인스턴스만 존재하는 것을 보장할 수 있습니다.
  • 한 번의 생성만 필요하기 때문에 불필요한 코드를 줄일 수 있고 메모리를 절약할 수 있습니다.
  • 싱글턴 패턴은 남용하기 쉬운 패턴으로 주의해서 사용해야 합니다. 전역 객체에 상태가 저장되어 있다면 테스트 순서에 문제가 생길 수 있습니다. 또한 굳이 싱글턴 패턴을 사용하지 않아도 되는 데 사용하는 경우도 지양해야 합니다.

예제

그럼 이제 Swift로 간단하게 싱글턴 패턴을 구현해보겠습니다.

이번 코드에서는 DB를 관리하는 DBManager 객체라는 녀석을 싱글턴 객체로 간단하게 만들어보겠습니다.

class DBManager {
	// Singleton Instance
    static let shared = DBManager()
    
    private var database: [String]
    
    private init() {
        database = []
    }
    public func addData(data: String) {
        self.database.append(data)
    }
    public func deleteData(data: String) {
        if let index = self.database.firstIndex(of: data) {
            self.database.remove(at: index)
        } else {
            print("데이터가 없습니다.")
        }
    }
}

위와 같이 DBManager 클래스를 만들고 static 변수에 자기 자신을 생성하여 할당합니다.

또한 DBManager의 생성자를 private으로 선언한 것을 볼 수 있는데요, 이 때문에 클래스 내부에서 말고는 객체 생성이 불가능하게 만들어 전체 프로그램에서 해당 객체가 단 하나만 존재할 수 있는 것을 보장해줍니다.

예를 들어 일반적으로 생성하려고 한다면..

이렇게 생성자의 접근 수준이 private이라며 생성할 수 없다고 합니다.

따라서 DBManager를 사용하기 위해서는 클래스의 static 변수로만 사용이 가능합니다.

따라서 위와 같이 사용해주면 프로그램의 어디서든 동일한 객체에 접근할 수 있게 됩니다.

 

이렇게 싱글턴 패턴에 대해 알아보고 간단하게 구현도 해봤습니다.

혹시라도 틀린 부분이 있다면 알려주시면 감사하겠습니다.😞

전체 코드는 여기에서 볼 수 있습니다.

 

이번 글을 끝으로 GoF의 생성 패턴을 모두 공부했어요.

생성패턴 중에서는 이번 글에서 알아본 싱글턴 패턴이 가장 익숙해서인지 이해하기 쉬웠던 거 같습니다.

 

다음 글부터는 Structural Pattern (구조 패턴)에 대해 알아보도록 하겠습니다.

 

감사합니다.

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   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
글 보관함