ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Swift 상수, 구조체가 좋을까 Enum이 좋을까?
    Swift 2021. 2. 13. 16:32

    하하, 여러분 안녕하십니까? 갈릭입니다.

     

    오늘은 코드를 작성하다 보면 한번 쯤은 생각해 봤을 법한 것에 대해 작성을 해보고자 합니다.

     

    바로! global하게 접근하고자 하는 상수를 정의하고자 했을때 어떤 방법이 좋을까? 입니다. 

     

     

    당연하게 첫번째로 생각나는 것은 그냥 전역으로 상수를 하나 선언해주는 것입니다.

    외로워 보입니다 ㅠㅜ

    하지만 이렇게 사용하게 된다면, 인스턴스 프로퍼티와 이름이 혼동될 경우가 발생할 수도 있습니다! 이는 매우 위험하죠. 

     

     

    이를 고려하게 되면, 두번째로는 타입 프로퍼티가 생각이 납니다.

     

    왜냐하면 타입 프로퍼티는 각각의 인스턴스가 아닌 "타입 자체에 속하는 프로퍼티" 이기 때문에 인스턴스 생성 여부와 관계 없이 타입 프로퍼티의 값은 하나이기 때문이죠. (초기화와 관계없이 모든 인스턴스에서 공통으로 사용할 수 있음!!!) 

     

    무엇보다 중요한 것은!!! 타입 프로퍼티는 "단 한 번만 초기화된다는 보장"을 받습니다!!!!! 

    후보군 2개!

    오케이! 타입 프로퍼티라는 키워드를 찾은 것 같군요! 이젠 타입 프로퍼티를 담을 그릇이 필요해 보입니다!

    후보군은 struct, enum 이렇게 두가지로 준비해보죠. (class 대신 struct를 후보로 잡았습니다)

     

    struct VS enum 차이점 (공통점 아닙니다!)

    Struct Enum
    초기화 O 초기화 X
    데이터를 용도에 맞게 묶어 표현하고자 할 때 유용 제한된 선택지를 주고 싶을 때 유용

     

    위 표와 같이 구조체와 열거형의 차이점을 기억하시고 다음을 해석해봅시다! (출처 : github.com/raywenderlich/swift-style-guide#constants)

     

    Note: The advantage of using a case-less enumeration is that it can't accidentally be instantiated and works as a pure namespace.
    해석: case(=항목) 없는 enum(=열거형) 사용함에 있어서 이점은 실수로라도 초기화할 없고 그저 순수한 *namespace로서 동작한다.

     

    말 그대로 enum을 사용함으로서 실수로라도 초기화 되지 않고 그저 이름을 표시하기 위한 공간으로서만 사용할 수 있다.

     

    제가 생각한 바로는

    1. 쓸데없이 메모리를 낭비하지 않을 수 있고,

    2. 열거형의 "제한된 선택지를 주고 싶을 때 유용" 이라는 목적에 더 부합

    하다고 생각이 들었습니다.

     

    결론 : 나는 enum을 사용할거다.

Designed by Tistory.