• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    해결됨

질문드립니다~

20.12.22 18:42 작성 조회수 219

0

안녕하세요 강사님. 많이 배우고있습니다.

이번에 클래스와 구조체 공부하면서

앱 모든곳에서 참조할 값들을 저장하기위해 싱글톤 패턴을 사용하게되었습니다.

그러다 문뜩 의문점이 생겼는데

아래 사진에 싱글톤 패턴과 정적클래스를

차이를 명확하게 이해하지 못하겠습니다. (필요성, 굳이 왜 싱글톤은 인스턴스 생성하는 과정을 거칠까?)

혹시 시간되신다면 알려주시면 감사하겠습니다.

아 그리고 강사님 혹시 나중에 iOS 디자인패턴 강의도 찍어주셨으면 좋겠습니다. 

사수없이 iOS주니어 개발자로 일하고 있는데

MVC , MVVM, MVP 등등 간략한  구조 설명만있고 제대로 적용해 공부해보기가 어렵네요 ㅠㅠ

답변 1

답변을 작성해보세요.

1

안녕하세요.

질문하신 SingletonHost라는 클래스부터 보시면

 SingletonHost라는 자체 인스턴스는 단한번 만들어지고 계속 유지되죠

이 뜻은 SingletonHost안에 포함된 모든 객체들도 여러개 만들어지지 않고 하나로만 유지하게 됩니다.

  

그런데 우리가  class나 struct를 만들때 때로는 그 안의 모든걸 싱글톤으로 하거나 일부분만 싱글톤으로 사용하고 싶을때가 있습니다.

  

예를들어 아래와 같은 앱을 만들때 별점만 생각을 해봅시다.

 

별점을 보면 어떤 화면에서건 무조건 같은 조건은

별 최대갯수 -> 5개

배경색 -> 회색

칠한색 -> 노란색

 

반대로 화면마다 다른 조건은

점수죠(별이 칠해진것) 어떤건 2점, 어떤건 3점... 이렇게요

 

그럼 별점이 그려지는 디자인을 관장하는 최대한 단순한 클래스를 만든다고 생각합시다.

class StarRateDesign {

    static var starMaxCount = 5

    static var starBackgroundColor = UIColor.lightGray

    static var starFillColor = UIColor.yellow

    var starRating = 0

}

이 클래스는 각각의 여러곳의 화면에서 별점을 그릴때 사용된다고 했을때

어떤화면이건 동일한 상태값을 유지해야 하는건  static으로 했고

화면에 따라 별점은 모두 달라야 하니 starRating은 static이 아닌걸로 만들었습니다.

이때 다크모드일때 별의 색깔을 공통으로 바꾸고 싶으면 한번에 싹 바꿀 수 있겠죠?

만약 실수로 starRating을 static으로 만들었다면 모든 화면의 별점값은 모두 같아질 겁니다.

   

질문하신 MyVariables처럼 모든걸 static으로 만드는 형태는 좋지 못한 방식입니다.

MyVariables안의 모든걸 싱글톤처럼 사용하려면 MyVariables자체를 싱글톤으로 만들어버리는 방법을 사용하는게 좋습니다.

 

정리하자면

인스턴스 자체를 싱글턴으로 만들어지게 만들면 그 인스턴스에 포함된 모든 객체는 싱글톤으로 움직입니다.(어디서든 같은값)

하지만 인스턴스의 일부분만 싱글톤으로 사용하고 싶을때는 그것만 static으로 한다고 생각하면 될 것 같습니다.

 

static은 원래 타입 프로퍼티 라고 표현을 하는데 편의상 싱글톤이라고 설명했습니다.

static을 어떤 상황에서 사용하면 좋은지 컨셉을 설명을 드렸는데 잘 이해가 되셨길 바랍니다.