iOS 53

Alamofire + RxSwift + MVVM

우선 RxSwift는 Return을 통해 데이터를 가지고 온다. Rxswift를 사용하기 전에는 Alamofire으로 통신하는 경우 @escaping을 통해 데이터를 viewModel로 가져온 뒤 같은 방법으로 View로 데이터를 전달하였다. 해당 방법을 사용하면 코드가 복잡해지고 직관적이지 못하다는 단점이 있다. (저는 그렇더라고요..ㅎ) 그래서! 우선 먼저 전체적인 흐름을 설명하자면 Alamofire post 통신을 한 후 Observable을 이용하여 ViewModel 데이터를 가져온다. 가져온 데이터를 다시 Alamofire get 통신을 한 후 Observable을 이용하여 ViewModel 데이터를 가져온다. ViewModel로 가져온 데이터를 Observable을 이용하여 View로 보낸다...

iOS/RxSwift 2023.03.05

Escaping 사용하기

Escaping의 특징을 잘 알지 못하는 분은 https://hj39-develop.tistory.com/143 Escaping 개념 Escaping은 탈출이라는 뜻으로 주로 Closure와 같이 사용한다. 탈출 클로저라고 부른다. Escaping 사용법 매개 변수 앞에 @Escaping 키워드를 사용한다. Escaping 종류 전달받은 클로저가 클로저 함수 외부로 hj39-develop.tistory.com 해당 블로그를 먼저 읽고 와주세요ㅎ escaping을 사용하기 앞서 클로저는 매개변수로 받아서 사용할 수 있다. (기억하기!) 아래 간단한 예시를 통해 매개변수로 받아온 클로저가 함수를 탈출하는 상황을 봐보자 func test(completion: () -> ()){ print("1") Dispat..

iOS/Swift 상식 2023.03.05

Escaping 개념

Escaping은 탈출이라는 뜻으로 주로 Closure와 같이 사용한다. 탈출 클로저라고 부른다. Escaping 사용법 매개 변수 앞에 @Escaping 키워드를 사용한다. Escaping 종류 전달받은 클로저가 클로저 함수 외부로 반환되는 경우 외부 글로벌 변수에 저장되는 경우 함수 내부에서만 유효한 것이 아닌 함수 외부에서도 유효하기 위해 사용된다. @escaping 키워드를 사용하지 않고 위와 같은 상황이 발생하는 경우 compile error가 발생한다. Escaping을 사용하는 이유 주로 네트워크 통신 통해 response 받은 이후 데이터를 비동기 처리하기 위해 사용한다. 자세하게 사용하는 방법은 다음 블로깅을 통해 공부할 예정이다. # 참고한 사이트 https://velog.io/@hay..

iOS/Swift 상식 2023.03.04

Mutating

Mutating은 한 번 지정되면 변경할 수 없는 value-type(struct, enum)에서 값을 수정할 수 있는 키워드이다. 예시를 통해 알아보면 바로 알 수 있다. struct Point{ var x = 0 var y = 0 mutating func upPoint(x: Int, y:Int){ self.x += x self.y += y } } var point = Point(x: 1, y: 2) print("x: \(point.x), y: \(point.y)")//x: 1, y: 2 point.upPoint(x: 2, y: 3) print("change x: \(point.x), y: \(point.y)")//change x: 3, y: 5 Mutating 키워드가 붙은 메서드는 종료될 때 모든 ..

iOS/Swift 상식 2023.03.04

Hashable 및 Equatable을 상속 받아야 하는 이유

Hash란 어떤 특정 값(Key)을 해싱 함수에 넣었을 때 HashTable의 index로 변환한 후 HashTable에 Value를 저장하는 것을 말한다. Equatable과 마찬가지로 swift의 기본 자료형들은 Hashable 프로토콜이 자동 채택되어 따로 구현하지 않아도 사용할 수 있다. struct struct의 경우 내부 변수가 기본 자료형인 경우 따로 구현하지 않아도 사용 가능하다. struct Dog: Hashable{ let name: String = "a" let age: Int = 10 } let dog: [Dog:Int] = [:] class class의 경우 Hashable 내부 프로토콜과 Equatable 내부 프로토콜 함수까지 모두 구현해야 한다. 왜냐하면 Hashable 프로..

iOS/Swift 상식 2023.03.04

Equatable 이란?

Equatable는 예제를 통해 알아보면 쉽게 알 수 있다. Swift의 기본 자료형 Bool , Int , UInt , Float , Double , Character , String , Any 들을 비교할 때 '=='을 사용하여 비교한다. □ 자료형 Int를 비교하는 예시 let num1 = 1 let num2 = 3 num1 == num2 비교 연산자를 통해서 true, false를 얻을 수 있다. 하지만 구조체와 클래스를 비교하지 못한다.!! 왜냐하면 Swift의 기본 자료형들은 Equatable 프로토콜을 기본적으로 채택하지만 구조체와 클래스는 그러지 않기 때문! 구조체와 클래스에서 Equatable을 사용하기 위해서 프로토콜을 상속받으면 된다. struct Human : Equatable{ l..

iOS/Swift 상식 2023.03.03

POP(Protocol Oriented Programming) vs OOP(Object Oriented Programming)

POP와 OOP의 가장 큰 차이점은 클래스들이 수직적인 구성이나 수평적인 구성으로 이루어져 있다는 것이다. POP(Protocol Oriented Programming) POP는 필요한 부분만 프로토콜로 분리해서 만들 수 있고 다중 프로토콜을 구현할 수 있다. 프로토콜 규칙을 class, struct, enum에 적용할 수 있기 때문에 확장 부분에서도 OOP보다 유연하다. POP는 HAS-A 관계로 구성되어 있어 수평적인 구조로서 묘사할 수 있다. 예를 들어 강아지의 특성을 구현한다면 protocol Eatable{ func eat() } extension Eatable{ func eat(){ print("I can Eat") } } protocol EatAlot{ func eatAlot() } exte..

iOS/Swift 상식 2023.02.21

프로토콜이란?

프로토콜 정의 protocol은 Swift의 class나 struct의 함수를 정의하는 역할을 한다. swift에서 protocol은 타입으로 작용한다. 예를 들어서 알아보자 protocol은 Swift의 class나 struct의 함수를 정의하는 역할을 한다. protocol Animal{ func sleep() } class Dog: Animal{ func sleep(){ print("dog sleep") } } protocol에서 Animal의 행동을 정의만 해 놓는다. protocol 내부 함수를 사용하기 위해서는 class, struct를 생성한 후에 상속을 받아 사용해야 한다. swift에서 protocol은 타입으로 작용한다. protocol Animal{ func sleep() } clas..

iOS/Swift 상식 2023.02.21

멀티 스레드 구현시 고려해야할 것들

멀티 스레드 여러 개의 스레드가 동시에 작업을 처리하는 것을 의미한다. 하나의 프로세스 내부에는 여러 개의 스레드가 존재하고, 스레드들은 프로세스의 자원을 공유하고 독립적으로 실행된다. 장점 메모리 공간과 시스템 자원 소모가 줄어든다. 프로세스 간 통신 방법에 비해 스레드 간의 통신 방법이 간단하다. 단점 서로 다른 스레드가 데이터와 Heap 영역을 공유하므로 다른 스레드가 사용 중인 변수나 자료구조에 접근하는 경우 이상한 값을 얻을 수 있다. 병목현상으로 인해 성능이 저하될 수 있다. 멀티 스레딩 프로그래밍 시 고려해야 할 것 Mutable, Immutable Immutable 인스턴스는 Thread-safe 하다. Mutable 인스턴스는 Thread-safe 하지 않지만 읽기 전용으로 사용한다면 문..

iOS/Swift 상식 2023.02.19

Delegates vs Notification 동작 방식

두 동작 방식 모두 앱 내에서 발생한 이벤트가 현재 화면이 아닌 다른 화면까지 영향을 줄 때 사용한다. 공통점 Delegate, Notification 둘 다 한 화면에서 발생한 이벤트를 다른 화면에 전달하는 기능을 가지고, 값의 변화를 감지해서 이벤트를 발생시킨다. 동작 방식에는 약간의 차이가 있다. Delegates 다른 객체의 인스턴스를 내부적으로 보유하여 그 인스턴스를 활용하는 방식으로 동작한다. Notification 어떤 객체를 Observing 한 뒤 해당 객체의 변화를 Observer들이 이벤트를 받아서 처리하는 방식으로 동작한다. 차이점 Delegates 수신하는 화면에서 발신받는 화면의 정보를 알고 있어야 한다. Delegate에 대해 조금 더 자세히 알고 싶다면 https://hj39..

iOS/Swift 상식 2023.02.18