[NAROTi][iOS 개발] Singleton Pattern

NAROTi·2019년 12월 7일
0

Singleton Pattern에 대해 알아보자

싱글톤 패턴이란 특정용도로 객체를 하나 생성하여 공용으로 사용하고 싶을 때 사용하는 방법이다. 주로 환경설정, 로그인 정보 등을 특정용도로 생성해둔 객체에 넣어두고 여러 객체에서 접근 가능하도록 하여 데이터를 사용하는 것이다. 이 객체는 임의로 메모리에서 해제해주지 않는 이상 프로그램이 실행되고 끝날 때 까지 메모리에 유지된다.

iOS 개발에서 주로 사용하는 싱글톤 패턴의 객체는 다음과 같은 것들이 있다.

스크린샷 2019-12-07 오전 11.52.43.png

  • 싱글톤을 사용하지 않는 경우

    스위프트를 이용한 iOS개발에서 클래스를 사용하여 생성한 객체들은 레퍼런스 타입으로 참조에 의한 값의 전달이 이루어지지만, 객체를 새로 생성하는 경우에는 각각 개별적인 객체이며 소유하고 있는 프로퍼티의 값 또한 각자 다르다.

스크린샷 2019-12-07 오전 11.55.32.png

위 코드를 보면 someObject1, someObject2, someObject3은 각각 새로 생성한 NormalClass 타입의 객체로 각각 다른 인스턴스이다. 따라서 그 프로퍼티인 x값도 각자 다르게 5,1,10 으로 출력된다.

  • 싱글톤을 사용한 경우

초반에 말했듯이 싱글톤패턴은 특정 객체가 앱에서 유일하게 하나만 존재하여 다른 객체들이 그 안의 내용을 공유하는 방식이다.

스크린샷 2019-12-07 오후 12.10.53.png

클래스를 정의할 때 내부에 해당 클래스와 같은 타입의 타입 프로퍼티를 생성하여 객체를 생성하지 않아도 접근이 가능하도록 한다. 이때 static 전역 변수로 선언하는데 이 프로퍼티는 지연생성(lazy)되기 때문에 처음 SingletonClass를 생성하기 전까지는 메모리에 올라가지 않는다.
스크린샷 2019-12-07 오후 12.14.42.png

싱글톤 객체는 여러번 생성되는 것을 의도한 것이 아니라면 그것을 막아서 새로운 객체가 생성되어 유일성이 사라지는 문제를 해결해야 한다. 그 방법으로 해당 클래스 이니셜라이저를 private으로 설정하여 외부에서 또 다른 인스턴을 생성하는 것을 막을 수 있다.
스크린샷 2019-12-07 오후 12.16.33.png

이렇게 되면 하나의 싱글톤 인스턴스가 유지되어 여러 객체가 하나의 인스턴스에 접근하여 데이터를 공유할 수 있다.
스크린샷 2019-12-07 오후 12.18.21.png

위의 코드를 보면 uniqueSingleton1.x의 값을 변경하면 uniqueSingleton2.x로 접근해도 같은 값을 얻을 수 있는 것을 알 수 있다.

NAROTi

profile
iOS Developer

1개의 댓글

comment-user-thumbnail
2021년 3월 22일

덕분에 싱글톤에 대해 알아갑니다 :)

답글 달기