@Heebeom Kim
#All#architecture#swift#design pattern#dev#ios

iOS Clean Architecture with TDD #1. Concept & Structure

아키텍처를 위해 투쟁하라. — Robert C. Martin의 클린 아키텍처 중 소프트웨어와 아키텍처 소프트웨어software라는 단어에 나타나듯이 과 이라는 의미를 가진 것이 소프트웨어이다. 소프트웨어를 만드는 이유는 행위(기능)를 쉽게 변경할 수 있도록 하기 위해서다. 기억해야 할 것은 소프트웨어의 첫 번째 가치가 라면 두 번째 가치는 이다. 사용자…

Meet async/await in Swift

스위프트로 개발하면 많은 비동기 코드를 다루게 되지만, 클로저나 Completion Handler로 구성된 API들이 다루기 까다로운 것은 사실이다. 특히나 로직이 조금 복잡해지거나 에러 처리가 필요한 시점이 되면 문제가 발생한다. 이러한 이유로 스위프트 5.5에도 코루틴 모델이 도입되었다. 함수 자체를 비동기로 선언할 수 있고, 프로퍼티도 비동기 접근이…

방문자 패턴 (Visitor Pattern in Swift)

방문자 패턴 알고리즘과 데이터 모델을 분리시켜서 할 수 있도록 하는 행동 디자인 패턴이다. 구조 구체 타입의 인스턴스를 인자로 받을 수 있는 함수를 선언한다. 오버로딩을 지원하는 언어라면 동일한 이름을 가질 수 있지만, 매개변수의 타입은 달라야 한다. 구체 방문자 클래스는 를 구현한다. 방문자 인스턴스에 대한 accepting 메서드를 정의한다. 인터페…

템플릿 메서드 패턴 (Template Method Pattern in Swift)

템플릿 메서드 패턴 알고리즘의 과정을 추상화하여 상위 클래스로 정의하고, 행동 패턴이다. Doc 포맷의 파일을 입력으로 받아 데이터 분석을 하는 애플리케이션을 만들었다고 하자. Doc 포맷만 지원했던 초기 버전에 CSV, PDF 포맷 또한 지원해야 하는 상황이 되었다. 기존의 클래스를 변경하지 않은 체 새로운 포맷에 대한 클래스를 추가하면 이처럼 구현할…

전략 패턴 (Strategy Pattern in Swift)

전략 패턴 전략 패턴은 하고, 하게 만드는 행동 디자인 패턴이다. 길찾기 알고리즘은 교통수단과 비용, 시간이라는 변수값에 따라 전략이 달라진다. 전략 패턴을 사용한다면 아래처럼 각 변수값에 따른 알고리즘을 개별적인 클래스로 분리하게 될 것이다. 구조 전략을 가진 객체이다. 구체 전략들이 가지는 공통 메서드를 정의한다. 각기 다른 알고리즘으로 구현된, …

상태 패턴 (State Pattern in Swift)

상태 패턴 객체 행동 디자인 패턴이다. 상태 패턴은 과도 밀접한 관련이 있다. 주요 아이디어는, 어떤 순간에도 는 것에서 출발한다. 각 상태에 따라 프로그램은 동일하게 동작할 수도, 다르게 동작할 수도 있다. 그리고 하나의 상태에서 다른 상태로 바뀌는 ‘전환’ 규칙도 유한하고 미리 정해져 있다. 이 개념을 문서 객체에 적용하면 아래처럼 된다. 문서는…

옵저버 패턴 (Observer Pattern in Swift)

옵저버 패턴 특정 객체에서 발생하는 이다. 구독자는 여러 객체가 될 수 있다. 옵저버의 핵심은 나에게 필요한 정보를 내가 매번 확인하는 것이 아니라, 정보 생산자에게 알려달라고 부탁하는 것이다.  옵저버 패턴에서는 우리가 관심이 있는 대상을 라고도 하지만 상태변화에 대한 정보를 다른 객체들에게 전달하기 때문에 라고도 부른다. 발행자의 상태 변화를 추적하는…

메멘토 패턴 (Memento Pattern in Swift)

메멘토 패턴 메멘토 패턴은 행동 디자인 패턴이다. 구현 세부 사항은 외부로 드러내지 않는다. 구조 중첩 클래스 기반 구현 자신의 하고 필요할 때 하고 할 수 있다.  Originator 상태의 스냅샷 역할을 하는 이다. 메멘토를 불변으로 만들고 생성자를 통해 데이터를 한 번만 전달하는 것이 일반적이다. Originator의 상태를 언제, 왜 저장해야 …

중재자 패턴 (Mediator Pattern in Swift)

중재자 패턴 유용한 행동 디자인 패턴이다. 이 패턴은 하게 된다. 구조 을 포함하는 여러 클래스들이다. 중재자 인터페이스에 대한 참조를 갖고 있다. 하며 일반적으로 notify 메서드를 하나 포함한다. 컴포넌트는 이 메서드에 자신을 포함한 컨텍스트를 메서드의 인자로 전달할 수 있지만 수신 컴포넌트와 커플링이 발생하지 않는 방식으로만 전달할 수 있다. …

반복자 패턴 (Iterator Pattern in Swift)

반복자 패턴 반복자는 데이터의 타입(리스트, 스택, 트리 등)을 드러내지 않고 할 수 있는 행동 디자인 패턴이다. 컬렉션은 데이터 집합이 되는 자료구조이자 굉장히 많이 사용하는 데이터 타입이다. 간단한 리스트나 상대적으로 복잡한 스택, 트리, 그래프 모두 여기에 속한다. 컬렉션에서 데이터를 저장하는 것만큼 중요한 것이 각 요소들에 액세스 하는 것이다. 동…