-
[iOS] 상수를 어떻게 관리해야할까 (Feat. struct, enum?)IT Study/iOS 2024. 12. 8. 13:55728x90
상수룩... 조크로 시작합니다...
iOS 앱 개발을 하다 보면 화면에 표시할 텍스트, 아이콘 이름, 컬러 값 등 변하지 않는 상수를 코드에서 자주 사용하게 됩니다. 이를 효율적으로 관리하기 위해 Swift에서 자주 사용하는 두 가지 방식이 있습니다. struct와 enum. 이번 글에서는 이 두 가지 방식의 차이점과 각각의 장단점을 비교해 보며, 어떤 상황에서 어떤 방식을 선택하는 것이 적합한지 알아보겠습니다.
1. 상수 관리를 왜 해야 할까?
상수를 잘 관리하면 다음과 같은 이점이 있습니다.
- 코드 가독성 향상 : 상수 이름만 보고도 의미를 쉽게 파악할 수 있다.
- 재사용성 증가 : 중복 코드 제거, 수정 시 한 곳만 변경할 수 있다.
- 유지보수 편의성 : 값 변경 시 모든 파일에서 검색하지 않아도 된다.
"편하게 관리할 수 있다."는 이점이 가장 크다고 생각합니다.
하지만 상수를 관리하는 방식이 일관되지 않거나 비효율적이면, 오히려 코드가 복잡해지고 유지보수가 어려워질 수 있습니다. 이를 방지하기 위해 적합하고 일관된 방식으로 상수를 관리하는 것이 중요합니다.
2. 상수 관리 방법: struct와 enumSwift에서는 보통 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를 사용하는 것이 더 유리합니다.
'IT Study > iOS' 카테고리의 다른 글
[iOS] 테스트 플라이트 "수출규정 문서 누락" 한 번에 해결하기 (Feat. 암호화 알고리즘? ) (0) 2024.12.08 [iOS] 최소 지원 버전 (Feat. arm, CPU 아키텍처, 프레임워크 아키텍처) (2) 2024.11.10 [iOS] 디바이스에 데이터 저장하기 1탄 (Feat. UserDefaults) (1) 2024.10.19 [iOS] SwiftUI의 상태 관리 (Feat. @State, @StateObject, @ObservedObject, @Published) (0) 2024.09.22