TIL

45일차 TIL

h_luz 2024. 4. 30. 21:26
iOS 앱 개발 심화 강의
스파르타 코딩 클럽

 

 

아키텍처 (Architecture)

: 시스템 전체적인 모습을 정의 (기능, 성능 보안 등 비기능적 요소에 대한 해결책 제시)

 

- MVC ( Model - View - Controller )

  Model : 데이터와 데이터 처리 로직 관리 (구조체, 클래스)

  View : 사용자 인터페이스 관리 ( UI Component 포함)

  Controller : Model과 View의 상호작용

 

  장점 : 비교적 간단한 구조 ( 직관적 ) && 세 가지 부분이 분리되어 독립적으로 작동

  단점 : ViewController가 비교적 비대해지는 경향 ( 하나의 ViewController에 많은 역할과 책임 집중 -> 테스트가 어려워질 수 있음 )

 

- MVVM ( Model - View - ViewModel ) 

  Model : MVC와 동일하게 데이터와 비즈니스 로직을 담당

  View : 스토리보드와 컨트롤러 역할 ( UI를 그리고, 사용자 상호작용_interection )

  ViewModel : 모델과 View 간에 중간 매개체 역할 ( View에 데이터를 표시하기 위해 비즈니스 로직 처리, 모델 데이터 가공 )

 

  장점 : MVC의 단점을 보완한다 - 뷰와 로직이 분리되어 가독성 ↑, 유지보수성 ↑ && 테스트 용이성 ( 독립적 테스트 가능 )

  단점 : 초기 이해가 어려울 수 있음 ( Learning Curve ) && 작은 규모의 프로젝트에선 오히려 복잡해 보일 수 있음 (보일러 플레이트)


 

디자인 패턴( Design Pattern )

: 자주 발생하는 문제에 대한 해결책을 재사용 가능한 형태로 정리

    - 클래스나 객체의 작은 규모의 디자인 문제 해결)

    - 클래스나 객체의 상호작용 구조화

    - 구현 단계에서 수시로 적용

 

1) Delegate Pattern

  - 한 객체가 다른 객체의 대리자

  - 다른 객체의 이벤트나 데이터를 처리하는 방식 (객체 간 결합도 ↓, 유연성 ↑, 확장 가능성 ↑)

  - 사용 예시로는 TableView나 CollectionView

 

  특징 : 다중 상속 지원 x ( Protocol을 사용하여 비슷하게 구현 가능 )

            자체적 이벤트 x ( 호출 시 메서드 제공하고, 해당 객체에서 발생한 이벤트 , 데이터 처리 )

 

2) Observer Pattern

    - 하나의 객체 변경 시 해당 객체에 의존하는 다른 객체들에게 알림을 보내 변경사항 적용

    - NotificationCenter : 등록, 발송, 처리 ( 중복 ↓, 관리 수월 )

 

    특징 : 객체 간 결합도 ↓, 유연성 ↑

              변경사항 적용 객체들을 동적으로 관리

              직접 호출을 피할 수 있음

              변경 사항에 대한 응답을 캡슐화 → 유지보수성 ↑

    

    주의할 점 : 통제 불가 && 디버깅 어려움(순서보장 x) && 메모리 누수

 

3) Singleton Pattern

  - 하나의 객체 인스턴스만 생성 → 전역에 제공 ( 앱 전역에 공유되어야하는 상태나 기능을 효율적으로 관리 )

 

  특징 : 객체간 의존성 ↓

 

  주의할 점 : 전역 상태 ( 프로그램 예측이 어려울 수 있음 ) && 테스트가 어려움 && 결합도 ↑

 

* 이외에도 다양한 디자인 패턴이 있음


 

Thread : 프로세스 내에서 실행되는 작은 단위의 실행 흐름

    - 각각 독립적으로 실행 ( 여러 Thread가 동시 작업 수행 )

    - 시스템 자원 효율적 활용

    - 병렬적 작업 처리

 

동기(sync) : 순차적인 작업

비동기(async) : 여러 작업이 동시에 진행 ( 네트워크 요청, 파일 입출력, 사용자 입력 대기 등에 사용됨 )

    - Callback : url이 많아지면 피라미드처럼 계속 적어야 해서 가독성이 떨어짐

    - Concurrency : 코드가 직관적 ( 코드를 동기적으로 작성하면서 비동기적으로 실행 )

    - Reactive Programming : 데이터 스트림과 변화에 반응하여 데이터 처리 수행 ( RxSwift, Conbine 라이브러리 )

 

* Task : 비동기적으로 실행되는 코드 조각

 


 

Instruments : 성능 분석 및 디버깅 도구 ( 메모리 누수 확인 ... )

'TIL' 카테고리의 다른 글

48일차 TIL _codebaseUI  (2) 2024.05.03
46일차 TIL  (0) 2024.05.01
44일차 TIL  (5) 2024.04.30
43일차 TIL  (1) 2024.04.26
42일차 TIL  (0) 2024.04.25