ABOUT ME

작디집(작은 디테일에 집착하는) 개발자, 김한슬 입니다.

Today
Yesterday
Total
  • [iOS] 상수를 어떻게 관리해야할까 (Feat. struct, enum?)
    IT Study/iOS 2024. 12. 8. 13:55
    728x90

    출처 : https://namu.wiki/w/%EC%83%81%EC%88%98%EB%A3%A9

     

    상수룩... 조크로 시작합니다...

     

    iOS 앱 개발을 하다 보면 화면에 표시할 텍스트, 아이콘 이름, 컬러 값 등 변하지 않는 상수를 코드에서 자주 사용하게 됩니다. 이를 효율적으로 관리하기 위해 Swift에서 자주 사용하는 두 가지 방식이 있습니다. structenum. 이번 글에서는 이 두 가지 방식의 차이점과 각각의 장단점을 비교해 보며, 어떤 상황에서 어떤 방식을 선택하는 것이 적합한지 알아보겠습니다.

     


     

    1. 상수 관리를 왜 해야 할까?

    상수를 잘 관리하면 다음과 같은 이점이 있습니다.

    • 코드 가독성 향상 : 상수 이름만 보고도 의미를 쉽게 파악할 수 있다.
    • 재사용성 증가 : 중복 코드 제거, 수정 시 한 곳만 변경할 수 있다.
    • 유지보수 편의성 : 값 변경 시 모든 파일에서 검색하지 않아도 된다.

    "편하게 관리할 수 있다."는 이점이 가장 크다고 생각합니다.

    하지만 상수를 관리하는 방식이 일관되지 않거나 비효율적이면, 오히려 코드가 복잡해지고 유지보수가 어려워질 수 있습니다. 이를 방지하기 위해 적합하고 일관된 방식으로 상수를 관리하는 것이 중요합니다.

     




    2. 상수 관리 방법: struct와 enum

    Swift에서는 보통 struct와 enum을 사용해 상수를 관리합니다. 아래 예제를 통해 각각의 방식을 알아보겠습니다.



    2-1. struct 방식

    struct는 Swift에서 주로 데이터 묶음을 정의하는 데 사용됩니다. 상수 관리에도 자주 활용되며, 다음과 같은 형태로 작성합니다.

    struct Constants {
        struct Chat {
            static let placeholderMessage = "이 창을 나가면 모든 내용이 사라집니다"
            static let modalSaveButton = "Save"
        }
        struct Icon {
            static let sendMessage = "paperplane.fill"
        }
    }

     

     

    특징

    • struct는 값 타입(Value Type)입니다.
    • 필요한 경우 인스턴스를 생성할 수 있으며, 동적으로 값을 변경하거나 테스트할 때 유용합니다.

     

    2-2. enum 방식

    enum은 유한한 값의 집합을 표현할 때 사용됩니다. 상수 관리에 활용할 경우 다음과 같은 형태로 작성합니다.

    enum Constants {
        enum Chat {
            static let placeholderMessage = "이 창을 나가면 모든 내용이 사라집니다"
            static let modalSaveButton = "Save"
        }
        enum Icon {
            static let sendMessage = "paperplane.fill"
        }
    }

     

     

    특징

    • enum은 인스턴스화할 수 없습니다.
    • 내부 값을 static let으로 정의하여 불변성을 보장합니다.
    • 특히, 상수를 오직 상수 관리 목적으로만 사용하고자 할 때 적합합니다.

     


     

    3. struct vs enum 비교

    두 가지 방식의 차이를 다음 표로 정리할 수 있습니다.

    특징 struct enum
    인스턴스화 가능 여부 가능 불가능
    불변성 보장 선택적 (mutable, 변경 가능) 불변 (강제적으로 static let만 사용 가능)
    용도 데이터 표현, 테스트 용, 동적 값 사용 시 상수 집합, 불변 데이터 표현
    유연성 동적 값, 인스턴스화 가능 고정된 값만 허용

     


     

    4. 언제 어떤 방식을 선택할까?

    4-1. struct를 사용하는 경우

    • 동적 데이터를 상수로 관리해야 할 때 (앱 실행 중 변경되는 값을 관리할 경우, 유닛 테스트를 위해 mock 데이터를 설정해야 하는 경우)
    • 상수를 관리하면서도 인스턴스화가 필요한 경우

     

    사용 예시

    struct APIConfig {
        static let baseURL = "https://api.example.com"
        static var apiKey = "api-key"  // 변경 가능
    }

     

    4-2. enum을 사용하는 경우

    • 상수 값이 변하지 않으며, 고정된 값으로 관리하고 싶을 때
    • 인스턴스를 생성할 필요가 없는 경우

     

    사용 예시

    enum DateGroup {
        static let today = "오늘"
        static let yesterday = "어제"
        static let currentYearFormat = "MM월"
        static let previousYearFormat = "yyyy년"
    }

     


     

    5. 실제 프로젝트에서의 적용 예시

    5-1. struct 사용 사례

    동적으로 변경 가능한 설정값을 관리할 때 struct가 적합합니다.

    struct UserSettings {
        static let defaultTheme = "light"
        static var selectedTheme = "dark" // 사용자가 변경 가능
    }

     

     

    5-2. enum 사용 사례

    불변의 상수를 관리할 때 enum을 사용하는 것이 더 적합합니다.

    enum AppText {
        static let welcomeMessage = "환영합니다!"
        static let logoutMessage = "로그아웃 하시겠습니까?"
    }

     

     


     

    6. 마무리

    상수를 관리하는 방식은 프로젝트의 특성과 요구사항에 따라 선택해야 합니다.

    불변 데이터를 상수로만 관리하고 싶다면 enum을 추천합니다.

    동적 값이나 유닛 테스트가 필요하다면 struct를 사용하는 것이 더 유리합니다.

     

Designed by Tistory.