2.9 KiB
2.9 KiB
코드 스타일 가이드
SodaLive iOS 코드 작성 시 따르는 스타일 규칙이다. 기존 코드 관례와 충돌하면 더 가까운 주변 코드의 패턴을 우선한다.
아키텍처/레이어
- 기본 흐름은
View -> ViewModel -> Repository -> Api(TargetType)를 따른다. - API는
enum ...Api: TargetType, 저장소는final class ...Repository형태를 우선 사용한다. - 상태 모델은
struct/enum중심으로 두고, 화면 상태는ObservableObject에서 관리한다.
임포트 규칙
- 시스템 프레임워크(
Foundation,SwiftUI,Combine)를 먼저 배치한다. - 서드파티(
Moya,CombineMoya, SDK들)는 이후 배치한다. - import 그룹 사이에는 한 줄 공백으로 의미 단위를 분리한다.
포맷/구조
- 들여쓰기는 4칸 스페이스를 사용한다.
- 프로퍼티 선언, 비즈니스 로직, 헬퍼 메서드는 공백 줄로 구획한다.
- 클로저 체인은 줄바꿈해 가독성을 유지한다.
타입/상태 관리
- ViewModel은
final class ...: ObservableObject패턴을 우선한다. - View가 소유하는 객체는
@StateObject, 외부 주입 객체는@ObservedObject를 사용한다. - 네트워크 반환은
AnyPublisher<Response, MoyaError>패턴을 기본으로 따른다.
네이밍 규칙
- 타입명은 PascalCase (
HomeViewModel,UserRepository,UserApi). - 변수/함수는 camelCase (
errorMessage,getMemberInfo). - 역할을 이름에 반영한다 (
*View,*ViewModel,*Repository,*Api,*Request,*Response).
비동기/Combine 규칙
- 비동기 처리는 Combine의
sink,receiveValue,.store(in: &subscription)패턴을 따른다. sink완료 블록에서.failure를 반드시 처리한다.- 클로저 캡처는 상황에 맞게
[weak self]또는[unowned self]를 선택한다.
에러 처리 규칙
- 사용자 노출 오류는
errorMessage와 팝업 플래그(isShowPopup)로 일관되게 처리한다. - JSON 파싱은
do/catch + JSONDecoder패턴을 따른다. - 신규 코드에서 빈
catch는 금지하고, 최소한 로깅 또는 명시적 무시 사유를 남긴다.
로깅 규칙
- 디버그 로그는
DEBUG_LOG, 오류 로그는ERROR_LOG를 사용한다. print는 임시 디버깅 목적 외 신규 코드에서 지양한다.
네트워크/헤더 규칙
- 공통 Moya 플러그인(
AuthPlugin,AcceptLanguagePlugin) 흐름을 유지한다. - 언어 헤더는
LanguageHeaderProvider.current를 기준으로 사용한다.
문자열/다국어
- 신규 사용자 노출 문자열은 가능하면
I18n경로를 우선 사용한다. - 다국어 기능 수정 시
Settings/Language모듈과Accept-Language헤더 흐름을 함께 점검한다.
주석/문서화
- 자명한 코드에는 주석을 남기지 않는다.
- 복잡한 분기, 외부 제약, 부작용이 있는 로직에만 주석을 추가한다.