티스토리 뷰

iOS

iOS Architecture, Design Pattern

malrang-malrang 2022. 7. 15. 23:02

iOS Architecture, Design Pattern

지금까지 알고 있는 아키텍쳐는 MVC 가 전부였다.
MVP, MVVM 등등 이름만 들어봤을 뿐 공부해서 적용해본적은없다.

OpenMarket 프로젝트를 진행하며 ViewController 가 굉장히 무거워지고 작성한 코드가 어디에있는지 찾기어렵고 대체로 정리되어있지 않다라는 느낌을 받아 이를 개선하기위해 아키텍쳐를 공부해보려한다.


Architecture

영어단어로써의 아키텍처는 건축학 이라는 뜻이다.

건축으로 치면 건물의 평면도에 해당한다고 할수있다.

소프트웨어아키텍처는 소프트웨어 요소와 이들 요소의 외부 속성 그리고 이들 사이 의 관계를 구성하는 시스템의 구조이다.

간단히 말하자면 소프트웨어 의 구조 라고 할수있을것 같다.

  • 포토샵 으로 예를 들자면 도형그리기, 색칠하기, 저장하기, 글씨쓰기 등 다양한 기능들이 존재한다.
  • 이 수많은 기능 하나하나의 부품들을 어떻게 연결시켜 관계를 맺었는지 각각의 요소들간의 관계를 표현하는것 이라 할수있다.

소프트웨어를 구성하고있는 작은 기능 하나하나를 모듈 이라 하며
모듈을 기능별로 묶어 놓은 집합을 컴포넌트 라고 한다.

그리고 모듈, 컴포넌트 이 전체를 라이브러리라 한다.

소프트웨어 개발을 할때 이 모듈들을 어떻게 분할하고 배치할지 파일메뉴에는 어떤 기능을 넣을지 편집에는 어떤 기능을 넣을것인지 결정할때 참고하는것이 Software Architecture 이고 건물로 따지면 설계도 평면도에 해당하는 것이다.

소프트웨어 아키텍처 설계의 기본 원리에는 모듈화, 추상화, 단계전 분해, 은닉화 가 있다.

  • 모듈화: 소프트웨어 성능 향상 및 유지보수 등이 용이하도록 시스템의 기능을 모듈 단위로 나누는것.
  • 추상화: 전체적이고 포괄적인 개념을 설계한 후에 구체화시켜 나가는것.
  • 단계전 분해: 상위 개념부터 하위 개념으로 구체화 시키는 분할 기법 하향식 설계 전략.
  • 은닉화: 모듈 내부에 정보와 자료들을 숨겨서 다른 모듈이 접근하거나 수정 하도록 하는 기법.

구조를 생각하지 않고 프로그램을 작성한다고해서 프로그램이 돌아가지 않는것은 아니다.

하지만 이러한 프로그램은 가독성이 떨어지며 유지 보수에 굉장히 많은 비용이든다.

테스트 단계에서 테스트 자체가 불가능하거나 효과를 볼 수 없는 상황이 올수 있다.

단순히 모듈(클래스)을 역할별로 나누어 관리하는것은 아키텍쳐라고 할수 없으며 특정 기준으로 역할을 정의하며 역할별로 나누어진 모듈(클래스) 간의 관계를 유기적으로 형성시키는것을 아키텍쳐라 할 수 있다.

아키텍쳐에 정답은 없다.
각 프토젝트의 성격에 맞게 아키텍쳐 를 선택해야 한다.

좋은 아키텍쳐의 기준과 특징이 존재하며 이는 다음과 같다.

  • Balanced Distribution :

    • 객체들의 역할이 확실하며 이런 역할들이 균형잡혀 분배되어 있는지, 즉 각 모듈(클래스)이 독립적인지
    • 이러한 확고한 역할의 분배는 프로그램의 복잡도를 낮춘다.
    • 객체지향의 5원칙인 SOLID의 하나의 객체는 하나의 역할만을 가져야 한다는 원칙
    • 모듈(클래스)의 독립성이 떨어지면 테스팅을 진행하는데 어려움이 있다.
  • Testability :

    • 테스트를 진행할 수 있는지
    • 테스팅 과정은 런타임 중 발생하는 이슈를 사전에 찾아내기 위해 필요한 단계
    • 테스팅에 있어서 그 자체가 문제라기보다는 테스팅을 진행하려는 아키텍쳐가 문제인 경우 많다.
  • Easy of Use :

    • 사용하기 쉬운지
    • 사용하기 쉬운지는 개발 속도와 관계가 있을 수 있다.
  • Unidirectional Data Flow :

    • 단순한 데이터의 흐름은 코드를 쉽게 이해할 수 있게 해주며 쉬운 디버깅을 제공한다. 여러 객체들을 오가는 데이터의 흐름은 옳지 않다.
    • Shared Resource의 사용도 기피해야한다. 에러가 발생하면 원인을 찾기 힘들어진다.
  • 위의 기준들을 완벽하게 충족 시키는 아키텍쳐는 없다.

  • 그렇기 때문에 진행하고있는 프로젝트의 성격에 맞게 선택적으로 도입해야한다.

위에서 언급한 Balanced Distribution 은 크게 세가지의 카테고리로 나누어진다.

  • Model :
    • 프로그램에서 사용되는 데이터의 조작이 일어나고 이를 담당하는 역할
  • View :
    • 시각적인 부분으로 UI에 해당. (UI 접두어가 붙은 모든 것들이 이에 해당)
  • Controller / Presenter / ViewModel :
    • Model과 View 사이의 중재자로 일반적으로 View를 통해 발생한 사용자의 액션을 다루며 필요시 이에 따른 Model에 값의 조정을 요청하며 Model 값의 변화에 맞게 View 를 갱신하는 역할

이렇게 3가지의 기준으로 나누어 진행하게 되면 재사용성이 증가하며 각각 독립적으로 테스팅할 수 있게 된다.

Design Pattern

디자인 패턴은 건축으로치면 공법에 해당하는 것으로 소프트웨어의 개발 방법을 공식화 한 것이다.

소수의 뛰어난 엔지니어가 해결한 문제를 다수의 엔지니어들이 처리 할 수 있도록 한 규칙이면서, 구현자들 간의 커뮤니케이션의 효율성을 높이는 기법이다.

참고한 문서및 자료

protocorn93

'iOS' 카테고리의 다른 글

MVC (Model-View-Controller)  (0) 2022.07.15
Date Picker  (0) 2022.07.08
App's Life Cycle  (0) 2022.07.05
객체지향 프로그래밍 과 SOLID 원칙  (0) 2022.07.01
iOS App 특정 HTTP 접근 허용방법  (0) 2022.06.28
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함