IT Study/iOS

[iOS] 상수를 어떻게 관리해야할까 (Feat. struct, enum?)

three kim 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를 사용하는 것이 더 유리합니다.