아직은 개린이

[iOS] Singleton Design Pattern 본문

Swift + iOS/iOS

[iOS] Singleton Design Pattern

jiyeonlab 2019. 11. 18. 17:50

[ios] Singleton Design Pattern

Edwith Boostcourse의 2번째 과제를 수행하며, Singleton 패턴을 직접 적용해보고 있다.

예전에 Unity에서도 자주 썼던 것 같은데, 굉장히 편리하게 데이터를 공유할 수 있는 장점이 있다!

 

Boostcourse에서 실행한 예제를 통해 다시 정리하고자 한다.

 


Singleton 디자인 패턴이란?

 

소프트웨어 디자인 패턴에서 싱글턴 패턴(Singleton pattern)을 따르는 클래스는, 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다. (위키백과)

 

Singleton을 사용하면, 인스턴스 생성시 얻은 메모리를 계속 쓰기 때문에 메모리가 낭비되지 않고, 인스턴스가 전역 인스턴스이기 때문에 다른 클래스의 인스턴스들이 데이터를 공유하기 쉽다!

 


예제

 

FirstViewController의 textField에 입력한 정보를 Singleton 패턴을 따르는 클래스의 인스턴스에 저장해두고, SecondViewController에 있는 Lable에 띄워보는 예제이다.

 

 

1. 화면 구성

  • FirstViewController에 추가할 것

    • SecondViewController로의 화면 전환을 위한 "Go to SecondView" 버튼 추가 및 Segue를 연결

    • 이름과 나이를 입력받을 TextField를 추가

    • Singleton 클래스의 인스턴스에 이름과 나이를 저장하기 위한 "Save Information" 버튼 추가

  • SecondViewController에 추가할 것

    • Singleton 클래스의 인스턴스에 저장된 이름과 나이를 보여주기 위한 Label 추가

  • FirstViewController와 SecondViewController는 Navigation Controller로 묶어준다.

 

 

2. Singleton 클래스 작성

 

  • UserInformation 클래스 생성

    • File > New > File에서 Swift File을 선택하고, UserInformation 이라는 클래스를 만든다.

    • 이 클래스 안에서 인스턴스를 생성하고, shared라는 이름의 static 변수에 이 인스턴스를 저장한다.

    • 이름과 나이를 저장할 수 있는 String 타입의 옵셔널 변수를 선언해준다.

UserInformation 클래스

 

 

3. FirstViewController, SecondViewController 코드 작성

 

  • FirstViewController

    • View에 있는 TextField와 "Save Information" 버튼을 Outlet과 Action으로 각각 코드에 연결한다.

    • "Save Information" 버튼이 눌리면, 현재 textField에 있는 내용이 UserInformation 클래스의 인스턴스인 shared에 저장된다.

FirstViewController 클래스

  • SecondViewController

    • View에 있는 2개의 Label을 코드에 Outlet으로 연결한다.

    • View가 나타나면 실행되는 viewWillAppear(_animated: Bool) 함수에서 UserInformation 클래스의 인스턴스인 shared에 있는 name, age 값을 가져와서, 각각 label의 text로 넣어준다.

SecondViewController 클래스

 

 

4. 결과 확인

 

 이름과 나이를 입력한 후, Save Information 버튼을 눌러 Singleton 인스턴스에 내용을 저장한 후, SecondViewController로 가면 저장된 정보가 Label에 뜬다!

 

 


정리

위 처럼 간단한 예제에서도 singleton의 편리성을 느낄 수 있다!

이곳저곳에서 활용할 일이 많을 것 같다 :)

 


참고자료

https://www.edwith.org/boostcourse-ios/lecture/16855/

https://ko.wikipedia.org/wiki/%EC%8B%B1%EA%B8%80%ED%84%B4_%ED%8C%A8%ED%84%B4