분류 전체보기

    [Rx + MVVM] Input과 Output을 사용한 MVVM

    iOS의 MVVM패턴에는 표준이 없고 구현하는 사람마다 패턴이 조금씩 다르다. 그 중에 Kickstarter에서 사용하는 Input과 Output Protocol을 사용하는 방식이 있다. 방법 1. transform을 이용하여 입력을 넣어주고 출력을 받는 방법 Protocol with Input & Output protocol ViewModelType{ associatedtype Input associatedtype Output var disposeBag: DisposeBag { get set } func transform(input: Input) -> Output } ViewModel에서 사용할 Protocol을 만들어준다. import Foundation import RxSwift import RxC..

    카드 역배치

    카드 역배치(정올 기출) 1부터 20까지 숫자가 하나씩 쓰인 20장의 카드가 아래 그림과 같이 오름차순으로 한 줄로 놓 여있다. 각 카드의 위치는 카드 위에 적힌 숫자와 같이 1부터 20까지로 나타낸다. 이제 여러분은 다음과 같은 규칙으로 카드의 위치를 바꾼다: 구간 [a, b] (단, 1 ≤ a ≤ b ≤ 20)가 주어지면 위치 a부터 위치 b까지의 카드를 현재의 역순으로 놓는다. 예를 들어, 현재 카드가 놓인 순서가 위의 그림과 같고 구간이 [5, 10]으로 주어진다면, 위치 5부터 위치 10까지의 카드 5, 6, 7, 8, 9, 10을 역순으로 하여 10, 9, 8, 7, 6, 5로 놓는다. 이제 전체 카드가 놓인 순서는 아래 그림과 같다. 이 상태에서 구간 [9, 13]이 다시 주어진다면, 위치 ..

    [디자인 패턴] 팩토리 메서드 패턴(Factory Method Pattern)

    팩토리 패턴(Factroy Pattern) 팩토리 패턴은 어떤 객체를 생성할 때, 그 객체를 사용하는 객체에서 직접 객체의 인스턴스를 생성하는게 아니라, 팩토리라는 객체에게 그 작업을 맡겨 의존성을 주입받는 방법이다. 팩토리패턴의 장점은 객체의 생성을 한 번 캡슐화 할 수 있다는 것이다. 그 효과로 첫 번째는 인스턴스의 생성에 비즈니스 로직이 끼어있을 때, 이 로직을 의존성을 가지는 객체로부터 분리할 수 있다는 것이고, 두 번째 효과는 다형성을 통해 언제든지 인스턴스를 생성하는 팩토리를 유연하게 변경할 수 있다는 것이다. 구체적인 객체의 생성방식에 대해 알 필요가 없어지며 객체 생성 로직의 중복을 제거하고 유지보수성을 향상시킨다. 만약 어떤 인스턴스를 만드는 과정이 바뀐다 하더라도 의존성을 가지는 개체는..

    Swinject

    Swinject https://github.com/Swinject/Swinject GitHub - Swinject/Swinject: Dependency injection framework for Swift with iOS/macOS/Linux Dependency injection framework for Swift with iOS/macOS/Linux - GitHub - Swinject/Swinject: Dependency injection framework for Swift with iOS/macOS/Linux github.com DI(Dependency Injection)는 종속성을 해결하기 위해 IoC(Inversion of Control)을 구현하는 소프트웨어 디자인 패턴이다. Swinject는 ..

    DI Container

    Dependency와 injection & SOLID의 의존관계 역전 원칙(DIP)의 사전지식이 필요하다. https://clamp-coding.tistory.com/447 Dependency Container란 무엇인가. 의존성 주입을 해줄 때는 외부에서 인스턴스를 만들어서 주입해준다. 외부에서 인스턴스를 만들어서 주입해주는 곳은 여러곳일 수 있다. 즉 인스턴스를 만드는 위치가 분산되어있다. 근데 Container라는 것이 있고 Container가 모든 인스턴스를 다 가지고 있고, 관리한다고 생각해보자.. Container에 앞으로 내가 사용할 모든 인스턴스를 다 만들어서 등록해두고 => register 필요한 시점에 Container에게 특정 타입의 인스턴스를 달라고하면 Container가 꺼내주는 ..

    [iOS] Coordinator Pattern

    Coordinator Pattern Coordinator 패턴은 ViewController가 보유하던 책임 중 Navigation과 관련된 부분을 다른 인스턴스에서 책임지도록 하는 패턴이다. 기존의 ViewController에서 직접 화면 전환 방식 기존의 방식은 ViewController에서 직접적으로 화면 전환을 시행하고, 다음에 띄워질 다른 ViewController에대해 기존 ViewController가 알고있어야 하는 구조이다. 이는 ViewController간에 심한 커플링을 발생시킨다. 이를 해결한 것이 Coordinator 패턴이다. Coordinator 패턴 모든 ViewController는 Coordinator 인스턴스만 보유할 뿐, 다른 ViewController 인스턴스를 직접적으로..

    [iOS] Static/Dynamic Library

    Library Xcode Target의 일부로 빌드되지 않은 코드 및 데이터 조각을 정의한 것. 라이브러리는 다른 프로젝트에서 재사용 할 수 있는 코드 및 리소스 모음을 나타낸다. 여기에는 특정 기능을 제공하거나 일반적인 프로그램이 문제를 해결하는 미리 작성된 함수, 클래스 및 기타 구성 요소가 포함되어있다. 단순히 코드 및 데이터 조각을 정의했고 이걸 내 앱 코드에 가져다 쓰고싶다. 라이브러리와 앱의 소스코드 파일을 병합(merge)하는 프로세스를 Link라고 한다. 라이브러리는 앱에 Link되는 방식에 따라 두 가지로 나뉘게 된다. Static Library - ".a" 접미사를 가진다 Dynamic Library - "dylib" 접미사를 가진다 Static Library Static Library..

    [iOS] Class의 성능을 향상시킬 수 있는 방법들

    final, private키워드를 사용해 성능을 향상시킬 수 있다. 여러 방법이 있지만 메서드 디스패치(Method Dispatch)와 관련이 있다. https://clamp-coding.tistory.com/364 [Swift]. Method Dispatch Method Dispatch 실제로 Method는 CPU에대한 명령어이며, 실제론 코드 영역에만 존재한다. 그렇기 때문에 코드 영역에 있는 메서드를 실행시키려면 메서드 주소가 필요하다. 그런데 그 메서드 주소를 clamp-coding.tistory.com final final이 붙은 클래스는 상속이 불가하기 때문에 하위 클래스에서 이들을 오버라이딩 될 수 없게 되므로 자연스럽게 Static Dispatch로 동작하게 된다. private(접근제어)..

    [iOS] Boudns와 Frame

    Bouns: 뷰의 위치가 뷰 자신의 좌표계에 의해 결정된다. Frame: 뷰의 위치가 부모뷰에 의해 결정된다. Frame Frame은 뷰의 좌표가 부모뷰를 기준으로 결정된다. Bounds Bouns는 본인의 좌표계에 의해 위치가 정해지기 때문에 어느 위치에 있던 (0, 0)을 유지한다. 왜 굳이? 이유를 알기 위해 Frame을 이해해야한다. Frame은 단순히 만드려는 뷰를 나타내는 것이 아니라 만드려는 뷰를 감싸는 사각형 모양의 뷰이다. 그리고 Frame의 좌표와 크기도 이렇게 감싸는 사각형의 좌표와 크기를 나타낸다. Frame은 감싸고 있는 뷰가 회전한다면 그에 맞춰 크기와 좌표가 바뀌게된다. 하지만 Bounds는 본인의 크기와 좌표 (0, 0)을 유지하게 된다. 용도의 차이 Frame: 좌표를 기준..

    [Clean Architecture] Clean Architecture에서 Entity, Use case, Presenter등 구성요소가 무엇인가.

    Clean Architecture + MVVM에대한 글을 읽다보면 아무 지식 없이는 이해할 수 없는 부분이 있다. Entity, Usecase, Repository등 단어자체의 개념적인 이해가 정확히 정리되어있지 않다보니 완벽하게 이해할 수 없다. 이런 용어들을 정리한 블로그를 너무 찾기 힘들기 때문에 이에대한 용어의 정리가 필요하다고 느껴 정리해보려한다. 혹시 틀린점이 있다면 정중히 댓글 부탁드립니다. Entity Entity( = Enterprize Business Rules): Actor가 필요로 하는 데이터의 모델을 의미한다. 특정 '도메인'에서 사용되는 struct 모델 ex) Actor가 필요로 하는 Movie와 MoviewPage에 대한 Entity struct Movie: Equatable..