분류 전체보기 (207) 썸네일형 리스트형 [THE SOPT] 총무? 하는 일 별로 없지 않아? 미루고 미뤘던 임원진 회고 시작합니다. 갑자기? ㅇㅇ 갑자기. 지금 안하면 진짜 죽을 때까지 안할 것 같아서. 발단 아 훌방구랑 카톡한거 찾고 있는데 .. 몇달 전에 톡 한번 밀어서 .. 기록이 없지만 .. !!! 아무튼 시간을 거슬러서 (린 - 시간을 거슬러) 2022년도 1월 말 .. ? 로 가서 훌방구의 꼬드김 + 약간의 호기심 + 약간의 숨겨진 E 성격 등등으로 59분(00시까지 마감)에 총무를 지원했고 그렇게 .. 시작되었습니다 .. 처음에 걱정한 부분은 1. 28기-29기 (상대적으로) 얌전히 지냈는데 다른 사람들이 날 알까? 2. 내가 과연 200여명 정도의 회원들을 이끌고(?) 회비를 관리할 수 있을까? 3. 나 .. 졸업 프로젝트 ... 도 해야하는데 .. 등등이 있었습니다 .. 1번과 .. Automatic Reference Counting (ARC) 오랜만에 돌아왔습니다. 무엇으로? ARC로. 자다가도 누가 ARC가 뭐야?라고 물어보면 답해야 하는 것이 iOS 개발자의 숙명 .. 공식문서를 읽어보면서(= 번역하면서) ARC를 제대로 이해해보자!!!!!! 서론 Swift는 ARC(Automatic Reference Counting)를 사용하여 앱의 메모리 사용량을 추적하고 관리한다. 대부분의 경우, Swift에서 자동으로 메모리를 관리하기 때문에 이에 직접적으로 생각할 필요가 없다. ARC는 클래스 인스턴스가 더 이상 필요하지 않게 되면 메모리에서 인스턴스를 자동으로 해제한다. 단, ARC에서는 메모리를 관리하기 위하여 코드 간의 관계에 대해 자세한 정보가 필요한 경우가 있다. 이 장에서는 이러한 상황을 설명하고 ARC가 앱의 모든 메모리를 관리할 수.. [MVVM] associatedtype으로 ViewModel 구조 추상화 associatedtype - Generic과 유사한 형태로, Protocol에서 사용될 타입에 대한 네임 스페이스, placeholer이다. - 실제로 Protocol을 채택해서 사용하기 전까지는 사용되는 타입이 무엇인지 명시가 되지 않는다. MVVM에서 Input/Output 패턴을 사용하면, 우리는 ViewModel마다 Input, Output구조체를 만들어줘야 한다. 이것이 과연 최선의 방법일까? 이것을 우리는 프로토콜을 이용해서 해결할 수 있다. 프로젝트를 구성하다 보면, 공통적으로 생기는 요소들, 반복되는 속성/메서드를 프로토콜의 형태로 사용할 수 있다. 만약, 프로퍼티의 타입이 동일하다면 그냥 작성하면 되지만, 각 화면의 뷰모델마다 서로 다른 Input, Output을 갖게 된다. 그러므로 .. [MVVM] 인앤아웃버거? 인풋/아웃풋패턴! 인앤아웃 버거가 그렇게 짜다는데 .. 먹어봤어야 알지 .. 미국을 가봤어야 알지 !!! MVC패턴에서 UI부분과 비즈니스 로직을 분리해서 MVVM 패턴으로 개선할 수 있다. 그리고 이 MVVM 패턴에서 좀 더 데이터의 흐름을 분리하면, (UI 로직과 비즈니스 로직을 좀 더 분리하면 = 뷰에서는 로직에 대한 것을 모두 가리는 것, 없애는 것) Input/Output 패턴으로 개선할 수 있다. 개념은 간단(?)하다. Input 뷰로부터 전달된 데이터를 뷰모델에서 받게 되는 입력 데이터 VC -> VM Output 입력받은 데이터를 수정/변경해서 뷰에 표현하기 위한 출력 데이터 VM -> VC 간단한 예시로 말하자면 아래와 같다. ex) Input : 버튼의 탭, 텍스트 필드에 입력하는 텍스트 ex) Outp.. [🌱SeSAC] Rx복습, RxAlamofire/RxDataSource Rx .. 무시무시 어마무시 .. !! MVVM Pattern MVVM 패턴의 가장 큰 핵심은 양방향 데이터 바인딩이다. 양뱡향 데이터 바인딩을 위해서 아래와 같은 Observable 클래스를 만들었다. import Foundation class CObservable { private var listener: ((T) -> Void)? var value: T { didSet { listener?(value) } } init(_ value: T) { self.value = value } func bind(_ closure: @escaping (T) -> Void) { closure(value) listener = closure } } Q : 왜 이런 클래스를 만들었을까? A : 위에서 말했지만, 단방향 데.. [알고리즘] BFS? DFS? BFS 너비 우선 순회 Queue로 구현 (큐를 이용하기 때문에 FIFO) 장점) 최적해를 찾을 것을 보장한다. 예를 들어서 지구 상에 존재하는 모든 친구 관계를 그래프로 표현 후, 소깡이와 후리 사이의 관계 경로를 찾는 경우, BFS - 소깡이와 가까운 관계부터 살핀다. DFS - 일단, 지구상의 모든 관계를 살핀다. 어떤 로직으로 구현되는가? - 시작 노드를 큐에 삽입하고 방문처리를 한다. - 큐에서 노드를 꺼낸 후, 해당 노드의 인접 노드 중 방문하지 않은 노드를 모두 큐에 넣는다. 그리고 방문 처리를 한다. (방문하면 현재 위치를 pop하고 방문 처리 -> 방문'할' 곳은 큐에 넣는다.) 사용 예시 너비 우선 탐색 알고리즘은 많은 문제를 푸는 데 사용된다. 예를 들어, 소스 노드(처음 노드)와 다.. [🔥Rx뿌셔] Relay Relay란? 우선, Relay는 RxCocoa에 속해 있는 클래스이다. RxSwift가 아니라, RxCocoa에 속하는 개념으로 그 종류는 크게 세가지가 있다. Relay는 크게 세 가지 클래스가 있다. Publisch Relay Behavior Relay Replay Relay 각 PublishRelay와 BehaviorRelay는 이름에서 알 수 있듯이 PublishSubject랑 BehaviorSubject의 wrapper 클래스이다. 🤔 Relay와 Subject의 차이는 무엇일까? 이벤트를 방출하는 스타일의 차이이다. ✔️ Subject는 Observale와 같이 onNext, onError, onCompleted 이렇게 세 가지의 이벤트를 방출 시킬 수 있다. ✔️ Relay는 onNext .. [🔥Rx뿌셔] Subject - Replay Subject Replay Subject Buffer Size만큼의 최신 값을 저장했다가 emit하는 Subject Relplay Subject는 이전에 방출됐던 요소들을 버퍼에 저장해 두었다가 새로운 구독자가 구독되었을 때 같이 넘겨주는 방식의 Subject 이미지로 나타내면 아래와 같다. 이전에 설명했던, Behavior Subject와 비슷하다. ✔️ 다른 점이 있다면 Behavior Subject와 다르게 제일 처음 구독자를 위한 초기값을 설정할 필요가 없고, ✔️ 가장 최근에 방출된 요소들의 (=전달받을 요소들의) 최대 개수를 지정할 수 있다. 코드로 구현하면 아래와 같다. let replay = ReplaySubject.create(bufferSize: 3) Replay Subject는 다른 Subject와.. 이전 1 2 3 4 5 ··· 26 다음