NameSpace
란?
관련 있는 값들을 묶어 놓은 공간을 nameSpace 라고 하는데, swift에서는 namespace를 아직 지원하지 않고 있다. (SwiftUI에서는 nameSpace를 지원하고 있는 듯 하다)
프로젝트 파일 안에서 사용되고 있는 메시지들을 묶어서 한곳에서 관리하면 나중에 메세지를 변경해야 할 일이 있을 때 일일이 고쳐주지 않고 nameSpace를 수정하고 프로그램 상에서 호출하여 사용하면 유지보수 측면에서 좋을 것 같아 찾아보았다.
일반적으로 사용되는 방식은 Struct
를 사용하거나 Enum
을 활용하는 방법으로 해결할 수 있다.
struct 구조체를 이용하는 방법
|
|
프로그램 안에서 사용되는 텍스트를 묶어서 GameMessages
라는 구조체를 만들어 주고 static
키워드를 이용하여 타입 프로퍼티
로 생성해 주었다.
사용할 때에는
|
|
으로 선언하여 사용한다.
struct로 nameSpace를 사용할 때의 문제점은 다른 개발자가 실수로 인스턴스를 생성할 수 있다는 점이다.
인스턴스 생성을 막기 위해 private init() {}
을 써주어서 인스턴스화 할 수 없도록 만들어준다.
enum 열거형을 이용하는 방법
다른 방법으로는 enum을 이용하여 nameSpace를 설정해주는 방법이다.
case를 설정하지 않고 enum을 만들 수 있나요? 네! 방법이 있습니다.
|
|
case가 없는 열거형을 사용하면 실수로 인스턴스화를 할 수 없고 nameSpace의 역할을 할 수 있도록 설정가능하다.
유지보수의 측면에서는 한 곳에서 여러개의 리터럴을 관리하고 수정할 수 있어서 nameSpace를 사용하는 편이 좋겠지만, 메모리 측면에서는 프로그램이 실행되면 모든 static 상수가 메모리에 탑재되므로 메모리 관리 측면에서는 좋은 방법이 아닐 수도 있다는 생각이 들었다.
Reference
-
nameSpace
https://cocoacasts.com/namespaces-in-swift
https://onelife2live.tistory.com/15
https://sujinnaljin.medium.com/namespace-%EC%A7%80%EC%A0%95%ED%95%98%EA%B8%B0-struct-vs-enum-ce86d5717d95
https://zeddios.tistory.com/353 -
Type property(static)
https://varyeun.tistory.com/entry/%EC%8A%A4%EC%9C%84%ED%94%84%ED%8A%B8%EC%97%90%EC%84%9C-static-%ED%82%A4%EC%9B%8C%EB%93%9C%EB%9E%80-static-in-swift