본문 바로가기

Swift

Swift - NSLock 간단히 이해하기 어느 언어든지 간에 Thread를 사용하는 프로그램을 개발할 때에는 Thread Safe하게 코드를 구성해야 할 때가 있습니다. Swift에서도 마찬가지입니다. Swift에는 간단히 사용할 수 있는 NSLock라는 클래스가 있습니다. 아주 간단한 예제를 통해서 사용 방법을 익혀 봅시다. var money = 10000 DispatchQueue.global().async { buy() } DispatchQueue.global().async { buy() } func buy() { money = money - 1000 print(money) } 멀티 스레딩 예제로 아주 적합한 돈에 관련한 예제입니다. 코드를 보면 DispatchQueue.global().async를 통해서 2개의 Thread를 실행시킵니다...
RxSwift - 초기 값을 가지고 있는 BehaviorSubject BehaviorSubject는 PublishSubject와 달리 초기 생성 시 값(이벤트)를 가지고 생성되는 Subject입니다. 사진과 같이 보라색의 값을 미리 저장해 뒀다가 subscribe()가 실행되면 미리 저장해둔 값의 이벤트를 실행 시킵니다. PublishSubject와 코드를 비교해 봅시다. PublishSubject/// Creates a subject. public override init() { super.init() } BehaviorSubjectpublic init(value: Element) { _value = value } 생성자를 보았을 때 값을 받아 놓는 것을 볼 수 있습니다. 다음 코드를 봅시다. PublishSubjectpublic override func subscrib..
Swift 프로토콜(protocol)과 Java 인터페이스(interface) 차이 Swift 언어를 공부하면서 Swift는 OOP(Object Oriented Programming)이 아닌 Protocol Oriented Programming이란 내용을 듣고 Protocol을 공부하면서 자바의 Interface와 거의 똑같은 거 아닌가? 하는 생각이 들어서 Protocol을 Interface와 다른 점이 뭔지 공부하며 안것들을 정리 해 보았습니다. 1. Swift의 Protocol은 파라미터에 기본 값을 지정할 수 없다. 먼저 자바의 Interface는public interface TestInterface { int number = 100; int getNumber(); void setNumber(int num); } 이런 식으로 선언을 하여도 에러가 나지 않습니다. 하지만, Swif..
Swift dynamic Swift에서는 다양한 키워드들이 있습니다. 그 중 dynamic이라는 키워드에 대해 알아봅시다. dynamic은 멤버 선언 시에 함께 사용됩니다. 예로,dynamic var name = "Alice"이런식으로 사용이 됩니다. 이렇게 선언된 멤버는 Objective-C 런타임을 사용하여 항상 동적으로 디스패치 되며 해당 멤버는 컴파일러에 의해 인라인되거나 가상화 되지 않습니다. 쉽게 말을 하면 해당 멤버를 Objective-C 코드나 클래스로 속성이나 메소드에 사용 될 수 있습니다. dynamic 키워드는 Objective-C 기본 클래스에 Swift 클래스를 하위클래스로 만들 때 사용합니다.