 Apple Lover Developer & Artist

영속적인 디자인에 현대의 공감을 채워넣는 공방입니다

 Apple/iOS Dev Challenges

[Challenge] 🛠️ iOS 앱 설계 퓨전 레시피 4부- Global Rule

singularis7 2023. 2. 21. 18:19
반응형

Overview

MVC, MVVM 등의 앱 아키텍처는 구성 요소들 간의 소통 질서를 확립하여 클린하고 유지보수하기 좋은 코드를 작성하도록 도와주었다. 이번엔 프로젝트의 개발이 진행될수록 늘어나는 소스 파일의 용이한 관리를 위해 글을 적어본다.

Project Organization

본질인가 현상인가?

필자가 프로그래밍을 처음 배웠을 때의 일화를 소개한다. 앱의 아키텍처와 프로젝트 파일을 구조화하는 것을 동격으로 생각했었다. 이는 곧 소스 코드 파일과 디렉터리의 구조를 개선함으로써 더 좋은 앱 아키텍처를 얻을 수 있을 것이라는 생각으로 이어졌다.

숙련된 개발자 분께 코드 리뷰를 부탁드리면서 A 소스 파일을 B 폴더에 넣는 것이 좋은지 혹은 C 폴더에 넣은 것이 좋은지?라고 여쭤보았다. 리뷰어 개발자 분은 프로젝트 파일을 정리하는데 정답은 없다면서 이는 본질이 아닌 일종의 현상이라고 조언해 주셨다. 짧은 조언은 필자의 착각을 부숴줄 정도의 강력한 한마디였다.

Organization Style

대한민국 국민은 국가의 법을 따르면서도 자신만의 개성을 갖을 수 있다. 프로그래밍 디자인 패러다임 규칙 속에서도 이와 유사한 개성이 생겨날 수 있다고 생각한다. 예를 들어, 디자인 패러다임에 각 개발자만의 개성 있는 스타일을 담을 수 있으며 개발 환경이나 조직 등의 특성을 녹여낸 프로젝트 스타일을 창조할 수 있다고 생각한다.

지금 이 시점에서도 우리는 인터넷에서 MVC로 부터 파생된 다양한 스타일의 아키텍처들을 찾아볼 수 있다. MVC를 아키텍처의 아키텍처로써 무엇이 정답이고 오답인지를 떠나 일종의 예술 작품처럼 감상해 보는 것은 어떨까? 😄

Basic Guideline

소스 코드를 작성하는 것부터 파일 이름을 짓고 디렉토리를 활용해 구조화하는 것까지를 관통하는 핵심적인 관리 철학을 생각해 볼 수 있다. 처음부터 구체적인 규칙을 결정하여 이를 매번 생각하며 개발하는 것이 쉽지만은 않을 수 있기에 공리를 잡고 가는 것이 매우 중요하다고 생각한다.

기본 철학은 먼 미래의 자신이나 프로젝트에 관계없는 낯선 사람이 와도 "읽어낼 수 있는 코드"를 작성하는 것이다.

Readability

Swift API Guideline을 준수하기 위해 노력한다. 핵심적인 네이밍 및 컨벤션 규칙을 규정하고 있다. Fundamental 섹션을 보면 Clarity 키워드가 강조되어 보인다.

예를 들어, 각종 정의 코드를 선언하는 부분도 중요하지만 메서드나 프로퍼티가 사용될 때의 Clarity를 중요하게 여긴다. 코드를 짧게 작성하는 것보다 Clarity한 것이 더욱 중요하다. 또한 코드의 선언부에 문서화 코멘트를 적을 것을 권장한다.

특히, API의 기능을 간단한 용어로 정의하기 어렵다면 잘못된 API를 디자인하고 있는 것이라고 경고하기도 한다.

Descriptive

소스 파일의 이름을 서술적(descriptive)으로 설정한다. 예를 들어 View Controller 파일의 이름을 축약식 표현인 VC 등으로 표현하지 않고 View Controller 전체 이름을 묘사한다.

Swift의 클래스, 구조체, 프로토콜, 함수, 프로퍼티 등에서도 마찬가지로 축약형이 아닌 명시적인 네이밍을 사용한다. 어떤 관점에서는 코딩의 양이 증가하지 않을까? 걱정할 수 있지만 Xcode의 자동 완성 기능을 사용하면 가독성과 생산성을 잡을 수 있다고 생각한다.

Navigable

하나의 파일에 하나의 타입을 구현한다. 예를 들어 하나의 Model.swift에 모든 모델 타입을 한꺼번에 구현하는 것 대신 각 파일에는 모델 타입 자신의 정의만 담기게 된다. 이를 통해 달성코자 하는 것은 파일 구조를 통해 타입 코드에 손쉽게 접근하기 위함이다. Xcode의 단축키 command + shift + o를 통해 바로 찾을 수도 있다.

MVC 및 MVVM 앱 아키텍처에 기반하여 객체의 역할과 Swift 타입 특성에 따라 다음과 같이 분류해보았다.

Reference

반응형