본문 바로가기

CS/디자인 패턴

[디자인 패턴] 싱글톤 패턴에 대해 알아보기 (Swift)

반응형

1. 싱글톤 패턴이란?

하나의 클래스에 오직 하나의 인스턴스를 갖는 디자인 패턴입니다.

Dog라는 클래스를 하나 만들고, 인스턴스를 생성해주었습니다.
dog1과 같은 인스턴스를 참조하기 위해 dog2라는 변수를 두었고, 참조가 같은지 확인하였습니다.

dog2의 name도 변경해보고 dog1의 name이 변경되었는지 확인을 해보았습니다.

같은 인스턴스에 접근을 하고있다는 것을 확인할 수 있습니다.

Dog 클래스를 통해 인스턴스를 하나 더 생성을 하고 dog3라는 변수로 두었습니다.
당연하게도 dog3는 dog1과 dog2와는 다른 인스턴스 일 것입니다.

싱글톤 패턴을 사용하면 하나의 클래스에 오직 하나의 인스턴스를 갖기 때문에 Dog 클래스로 생성한 인스턴스는 다 같은 인스턴스가 될 것입니다.

Swift에서는 싱글톤 패턴을 어떻게 적용할 수 있을까요?

2. Swift에서의 싱글톤 패턴

먼저 클래스 안에 인스턴스로 사용될 저장 타입 프로퍼티를 작성해주어야 합니다.
저장 타입 프로퍼티static let 키워드로 작성할 수 있습니다.
프로퍼티 명은 대부분 shared, defaults를 많이 사용합니다.

shared로 접근하면 모두 같은 인스턴스에 접근하겠네요.

하나의 클래스에 오직 하나의 인스턴스만 갖게 되니깐 끝 아닐까요?

아닙니다.

init으로 생성하게 되면 여러개의 인스턴스를 생성할 수 있습니다.

따라서 이를 막아주기 위해 init에 private 접근 제어자를 붙여서 인스턴스를 생성할 수 없도록 막아주어야 합니다.
또한, 상속을 막기 위해 final 키워드를 붙였습니다.

이렇게 된다면 이제 Dog 클래스의 인스턴스는 모두 같은 인스턴스를 기반으로 사용되겠죠?

3. 장단점

싱글톤 패턴의 장단점은 무었이 있을까요?

장점

싱글톤 패턴은 하나의 인스턴스를 만들어 놓고 해당 인스턴스를 다른 클래스나 모듈에서도 공유하면서 사용되기 때문에, 인스턴스를 생성하는 비용이 줄어든다는 장점이 있습니다. 또한 생성하기도 쉽고.. 값도 변경하기도 쉽습니다.

단점

하지만 사용하기 쉽고 값의 변경도 쉬우며 인스턴스를 서로 공유하기 때문에 결합도가 강하다는 단점이 있습니다.
또한, 단위 테스트를 하는데 어려움이 있습니다.
단위 테스트는 테스트가 서로 독립적이여야 하는데, 싱글톤 패턴은 하나의 인스턴스가 공유되기 때문에 각 테스트마다 독립적인 인스턴스를 만들기가 어렵습니다.

장점 1. 인스턴스 생성 비용 감소
2. 사용하기 쉬움
3. 다른 클래스와 모듈끼리 인스턴스를 공유하기 쉬움
단점 1. 결합도가 강함
2. TDD에 어려움
반응형