싱글톤 패턴이란 특정용도로 객체를 하나 생성하여 공용으로 사용하고 싶을 때 사용하는 방법이다. 주로 환경설정, 로그인 정보 등을 특정용도로 생성해둔 객체에 넣어두고 여러 객체에서 접근 가능하도록 하여 데이터를 사용하는 것이다. 이 객체는 임의로 메모리에서 해제해주지 않는 이상 프로그램이 실행되고 끝날 때 까지 메모리에 유지된다.
iOS 개발에서 주로 사용하는 싱글톤 패턴의 객체는 다음과 같은 것들이 있다.
위 코드를 보면 someObject1, someObject2, someObject3은 각각 새로 생성한 NormalClass 타입의 객체로 각각 다른 인스턴스이다. 따라서 그 프로퍼티인 x값도 각자 다르게 5,1,10 으로 출력된다.
초반에 말했듯이 싱글톤패턴은 특정 객체가 앱에서 유일하게 하나만 존재하여 다른 객체들이 그 안의 내용을 공유하는 방식이다.
클래스를 정의할 때 내부에 해당 클래스와 같은 타입의 타입 프로퍼티를 생성하여 객체를 생성하지 않아도 접근이 가능하도록 한다. 이때 static 전역 변수로 선언하는데 이 프로퍼티는 지연생성(lazy)되기 때문에 처음 SingletonClass를 생성하기 전까지는 메모리에 올라가지 않는다.
싱글톤 객체는 여러번 생성되는 것을 의도한 것이 아니라면 그것을 막아서 새로운 객체가 생성되어 유일성이 사라지는 문제를 해결해야 한다. 그 방법으로 해당 클래스 이니셜라이저를 private으로 설정하여 외부에서 또 다른 인스턴을 생성하는 것을 막을 수 있다.
이렇게 되면 하나의 싱글톤 인스턴스가 유지되어 여러 객체가 하나의 인스턴스에 접근하여 데이터를 공유할 수 있다.
위의 코드를 보면 uniqueSingleton1.x의 값을 변경하면 uniqueSingleton2.x로 접근해도 같은 값을 얻을 수 있는 것을 알 수 있다.
NAROTi
덕분에 싱글톤에 대해 알아갑니다 :)