본문 바로가기

iOS/Architecture8

클린아키텍쳐 5부 정리 (22장~28장) 22장 클린 아키텍처 수십년간 아키텍처에 관한 다양한 아이디어가 있었음 육각형 아키텍처(포트와 어댑터) DCI (Data Context and Interaction) BCE (Boundary Control Entitiy) 이들의 공통점은 "관심사의 분리" 소프트웨어를 계층으로 분리하면서 관심사의 목표 달성 프레임워크 독립성: 프레임워크의 제약사항을 시스템이 강제하도록 하지 않는다. 테스트 용이성: 업무 규칙은 UI, 디비, 웹 서버 또는 다른 요소 없이도 테스트 할 수 있다. UI 독립성: 시스템의 나머지 부분을 변경하지 않더라도 UI를 쉽게 변경할 수 있어야 한다. 데이터베이스 독립성 모든 외부 에이전시에 대한 독립성 DI 프레임워크 SwiInject, Needle도 프레임워크인데 그럼 직접 DI wr.. 2022. 4. 28.
클린아키텍쳐 5부 정리 (15장~21장) 15장 아키텍처란 소프트웨어 아키텍트도 프로그래머이다. 아키텍트도 실제 프로그래밍 작업에 지속적으로 참여해야한다. 소프트웨어 아키텍처: 시스템을 구축했던 사람들이 만들어낸 시스템의 형태 시스템이 쉽게 개발, 배포, 운영 유지보수 되도록 하기위해서는 가능한 한 많은 선택지를, 가능한 한 오래 남겨두는 전략을 따라야 한다.좋은 아키텍처의 조건과 저자의 경험들 개발 팀 구조가 다르면 아키텍처 관련 결정에도 차이가 난다. 저자의 경험 썰 배포 운영 유지보수 선택사항 열어두기 장치 독립성 광고 우편 물리적 주소 할당 결론 세부사항에 대한 결정은 가능한 한 오랫동안 미룰 수 있는 방향으로 설계해야 한다. 16장 독립성 좋은 아키텍처는 다음을 지원한다. 시스템의 유즈케이스 시스템의 운영 시스템의 개발 시스템의 배포 .. 2022. 4. 24.
클린 아키텍쳐 4부 정리 (12장~14장) 12장 컴포넌트 SOLID = 벽돌을 벽과 방에 배치하는 방법 컴포넌트 = 빌딩에 방을 배치하는 방법 컴포넌트 배포단위 시스템 구성요소로 배포할 수 있는 가장 작은 단위 여러 컴포넌트를 서로 묶어서 단일 아카이브로 만들 수 있다. 잘설계된 컴포넌트 = 독립적으로 개발, 배포 가능한 능력 우리 프로젝트는 독립적으로 배포가 가능하지 않은데 단일 컴포넌트인가 컴포넌트의 역사 시즌1 초창기 라이브러리는 메모리의 어느 위치에 로드할지 지정해야함 한번 지정되면 재배치가 불가능 소스코드 형태의 라이브러리를 Application 코드에 포함시켜 컴파일 단점) 컴파일 시간이 너무 오래 걸렸다. 시즌2 라이브러리 코드를 분리하여 개별 컴파일 바이너리 형태로 심벌 테이블을 통해 Application코드를 컴파일 단점) 앱이.. 2022. 4. 8.
클린 아키텍쳐 1, 2, 3부 정리 (1장~11장) 1장 설계와 아키텍쳐 설계: 저수준 구조 결정사항 아키텍쳐: 고수준의 무언가 둘은 명확한 경계를 나눌수 없고 고수준에서 저수준으로 가는 의사결정의 연속성만 있다. 의사결정이라는 키워드를 봤을때 좋은 S/W설계를 목표로 하여 의사결정을 진행해야 하고 좋은 S/W 설계는 "필요한 시스템을 만들고 유지보수 하는데 투입되는 '인력'을 최소화 하는데 있다. 약간 인력의 최소화보다는 인력이 늘어남에 따라 생산성이 비례할 수 있는게 적절한것 같다. 결국엔 돈 "경제성" 이다. 현재 우리팀은 사례처럼 엉망진창이 되어가는 신호를 나타내고 있을까? 만약 그렇다면 원인이 무엇일까. 좋은 아키텍쳐를 통해 해결할 수 있을까. 2장 두가지 가치에 대한 이야기 두가지 가치는 행위: 요구사항을 코드로 구체화 구조: 변경이 용의한 프.. 2022. 3. 31.
클린 아키텍쳐를 어떻게 공부하지 클린 아키텍쳐를 읽기 전에 클린 아키텍쳐란 무엇이고 왜 등장하게 되었는지 어떤식으로 Swfit project에 적용할 수 있는지 알아보자. 클린 아키텍쳐 클린 아키텍쳐: 클린코드의 저자 엉클밥이 제시한 아키텍쳐 맨 바깥쪽의 원: 하위레벨의 메커니즘 안쪽으로 갈 수록 상위레벨의 정책적인 부분 밖에서 안으로 가는 화살표: 의존성은 밖에서 안으로 -> 안쪽원은 바깥쪽에 의존해서는 안된다! eg) 밖의 디비를 어떤걸 쓰는지는 안쪽에서 몰라야 한다. 초록색 부분 Interface Adapter의 역할 - 하위 레이어와 상위 레이어 사이 데이터 포메팅, 이벤트를 받아서 사용자에게 전달 - 이벤트 발생 -> 컨트롤러가 받음 -> 인터렉터에게 명령을 내림 -> 인터렉터가 비즈니스 로직 처리 -> 결과를 프리젠터에게 전.. 2022. 3. 26.
Swift 아키텍쳐 노트 아는 형님이 설명해주신 방법이 좋은 것 같아서 정리해 본 페이지 MVC Controller에 코드 다 때려박음 Model View ViewModel MVVM 에서 View와 관련없는 로직은 ViewModel에 위치하게됨 View 와 ViewModel 은 binding이 이루어짐 (rxSwift, Combine 이용) Massive Controller 에서 Massive viewModel된 느낌 Model View ViewModel + Coordinator 화면전환 역할을 ViewController 에서 분리해서 Coordinator에 적용 화면 전환을 해결해 준 Coordinator 패턴 리액티브 프로그래밍(Reactive Programming)을 사용하기 위해, VIPER 패턴으로 되어 있는 앱 구조를.. 2021. 3. 3.
iOS: Repository pattern in Swift [출처] iOS: Repository pattern in Swift A design pattern to abstract data sources from your application medium.com Repository Pattern 리포지토리 패턴은 디자인 패턴으로 데이터의 추상화를 제공하여 어플리케이션이 추상화된 인터페이스로 작업할 수 있게 해준다. 즉 데이터 출처에 관계없이 동일한 인터페이스로 어플리케이션이 데이터를 사용할 수 있게 해준다. 장점으로는 결합도를 낮출 수 있다. 도메인 객체를 persistence ignorant 하게 할 수 있다. 정의된 인터페이스를 구현하는 mock에 DI 할 수 있으므로 테스팅하기 쉽다. 글에서 작성된 예시를 보자면 Tiendo iOS 앱에서 리포지토리 패턴을 .. 2020. 8. 7.
iOS - MVVM Simple look [원문] MVVM in iOS Reduce the size of your massive view controller by moving logic into the view model medium.com 로직부분을 viewmodel 로 옮겨 MVC(Massive view controller) 의 크기를 줄이자. 기본 iOS 아키텍쳐 패턴은 MVC(Model View Controller) 이다. MVC패턴이 잘못된 것은 아니지만 개발하다 보면 view controller의 코드량이 많아진다. MVVM은 .NET 커뮤니티에서 주로 몇년째 사용되었다. .NET WPF 프레임워크와 iOS 프레임워크는 다르다.(WPF는 XAML을 통해 two-way seamless binding 을 지원한다) iOS는 그런거 없고 .. 2020. 4. 22.