목록전체보기 (64)
GGURUPiOS
안녕하세요 최근 개인프로젝트를 진행하면서 적용한 Coordiantor 패턴에 대해 기술하려고 합니다. 일반적으로 구글링을 하다보면 childCoordinator를 부모 Coordinator가 소유하고, 필요에 따라 인스턴스를 찾아 해제하는 방식으로 이루어진 코드를 많이 만나볼 수 있는데요. 뭔가 복잡해보여서 조금 더 찾아보니 좀 더 메모리 관리에 쉽게 적용할 수 있는 방법이 있어 글을 적어봅니다 1. Child - Parent 관계의 Coordinator protocol Coordinator { func start() } class MainCoordinator: Coordinator { private var childCoordinators = [Coordinator]() private var naviga..
안녕하세요 이번시간에는 UIKit에서 Combine을 다루는 몇가지 방법에 대해 포스팅하려고 합니다. 프로젝트를 CleanArchitecture + MVVM 으로 짜고 있는데, Rx를 안쓰고 Combine을 이용하려니 헷갈리는 부분이 많네요. MVVM패턴에서 Binding을 View-ViewModel 간의 reactive 한 코드를 짤 때 Combine으로도 짜고 싶었습니다. 구글링과 각종 문서를 통해 공부를 해보다보니 Combine과 Rx는 많이 비슷하지만 가장 큰 단점이 있었습니다. 일단 Rx는 이벤트를 방출할수 있는 UIKit 객체에 Observable들을 제공합니다. (RxCocoa) 예를들어 button.rx.tap 같은 것들이요. 하지만 Combine은 존재하지 않습니다. (CombineCoc..
안녕하세요 이번시간에는 이진탐색트리에 대해 알아보도록 하겠습니다. 일단 알아보기 전에, Tree 구조를 알아야 합니다 Tree 란? 트리는 계층적 관계를 나타냅니다. 트리는 노드로 구성되고, 노드는 서로 연결되어 있습니다. 아래와 같이 나타냅니다. 트리 구조 특징 - 자식노드는 특정 노드 아래의 노드이며 부모노드는 그위의 노드이다. - 노드에는 항상 하나의 보무노드만 있지만, 여러개의 자식노드를 가질 수 있다. - 부모가 없는 노드는 루트노드라고 함 - 트리의 포인터(가르키는 방향이라고 생각)는 순환이 아님 -> 즉 위에서 아래로 뻗어나가는 구조이지, 다시 위로 갈 수는 없음 이러한 구조를 그래프(Graph)라고 하고, 트리는 사실 그래프의 아주 단순한 형태 (연결리스트도 트리의 간단한 버전임) 그렇다면..
안녕하세요 이번시간에는 defer 문에 대해 알아보도록 하겠습니다. defer 문은 무엇일까요? defer 문은 defer문이 속해있는 범위 외부로 프로그램 제어권을 이전하기 직전에 코드를 실행 -> defer 블록 내부의 실행문은 함수가 종료되기 직전에 실행되도록 보장 (함수가 끝나기 전에 마지막으로 실행한다) 어떻게 동작? func ex() { defer { print("1") } print("2") } ex() // "2", "1" 순으로 출력 됨 2개 이상의 defer문이 있다면 어떻게 될까? -> defer는 역순으로 실행이 됩니다 (밑의 구문 먼저) func ex() { defer { print("1") } defer { print("2") } print("3") } ex() // "3", "..
안녕하세요 이번시간에는 연결리스트에 대해 알아보고 스위프트로 구현해보도록 하겠습니다 연결리스트란? 연결리스트는 자료구조 중 하나 입니다. 데이터를 노드라 불리는 단위로 나눔 각 노드는 데이터, 다음노드를 가리키는 포인터로 이루어진 선형 데이터 구조 연결리스트와 배열의 차이점 저장방식: 배열은 순차적으로 메모리공간에 할당되고, 연결리스트는 불연속적으로 할당됨 삽입 및 삭제 연산: 배열은 특정 인덱스에 삽입, 삭제할 경우 해당 위치 이후의 모든 원소를 이동시켜야 함 반면, 연결리스트는 앞뒤 노드의 포인터를 조정하면 되므로 이동 필요 X 접근: 배열은 인덱스를 통한 접근이 빠르다. 하지만 연결리스트는 순차적으로 탐색해야 하기 때문에 속도가 느릴 수 있음 즉, 배열은 데이터 접근이 빠름 연결리스트는 데이터 삽입..
안녕하세요 이번시간에는 자료구조 큐에 대해 알아보도록 하겠습니다. 큐(Queue) ? 큐는 스택과 마찬가지로 데이터를 저장하고 꺼낼 수 있는 자료구조 입니다. 다만 스택과는 다르게 다른 특징들이 있습니다. 큐의 특징(용어) First-In-First-Out (FIFO) 구조: 가장먼저 추가된 요소가 가장 먼저 제거됨 (일종의 대기열) Enqueue, Dequeue: 요소를 추가, 제거 하는 작업 Front(peek), Rear (Head, Tail): 맨 앞의 요소, 맨 뒤의 요소 큐의 구현 struct Queue { private var queue: [T] = [] var count: Int { return queue.count } var isEmpty: Bool { return queue.isEmpt..