sync, async 사용법 동기(sync) 는 작업이 처리되기를 기다리는것. 비동기(async)는 작업이 처리되기를 기다리지 않고 다른 스레드에서 처리되는것. sync는 동기로 작업을 처리하겠다는 메서드. DispatchQueue.global().sync {} 를 호출한것은 main 스레드말고 새로운 스레드를 만들어서 작업을 처리할거야, 그런데 내작업이 끝날때까지 기다려야해 라는 의미가 된다. async는 비동기로 작업을 처리하겠다는 메서드. DispatchQueue.global().async {} 를 호출한것은 main스레드 말고 새로운 스레드를 만들어서 작업을 처리할거야, 그런데 다음 작업이 있다면 끝날떄까지 기다리지말고 처리해도 좋아! 난 새스레드 에서 알아서 작업할게! 라는 의미가 된다. 위의 ..
GCD(Grand Central Dispatch) 작업을 동시에 처리하기위해 스레드를 여러개 활용하는것은 불가피하다. 그렇다면 어떻게 스레드를 관리해주어야 할까?? 일일이 개발자가 스레드를 관리하는것은 매우 번거롭고 힘든일이다. 애플에서는 코드를 동기 혹은 비동기로 처리해준다면 시스템이 알아서 스레드를 관리해주는 방식을 제공하며 그것이 GCD 이다. GCD는 멀티 코어 환경과 멀티 스레드 환경에서 최적화된 프로그래밍을 할수 있도록 애플이 개발한 기술이다. GCD 를 사용하기 위해 Dispatch 라는 프레임워크를 사용해야하며 Dispatch Queue 라는 클래스를 사용해 대기열에서 작업의 순서를 동기, 비동기 처리만 해주면된다! Dispatch Queue Dispatch Queue 가 무엇이냐? GCD..
동시성 프로그래밍 에 필요한 개념들 멀티 스레드 환경에서 여러가지 작업을 동시에 처리하는 기술을 말한다. 동시성 프로그래밍이란 영어로 Concurrency Programming 라고 한다. 지금껏 나는 코드는 한줄, 한줄 순서대로 실행되는것으로 알고 코드를 작성해왔다. 동시성 프로그래밍을 이용해 동시에 여러가지작업을 하는것처럼 보이게 할수있다. 예를 들면 자주사용하는 음악재생 어플을 예시로 들어보자. 노래를 재생시켜두고 음악재생 어플에서 다른 뷰를 띄워주거나 동시에 다른 작업들을 하기도한다. 동시성 프로그래밍은 이를 가능하게 하는것이다. 코어 코어는 CPU 의 핵심으로 CPU 에서 실제로 일을 처리하는 녀석이다. 코어는 한번에 한가지 일만 할수있으며 코어가 여러개라면 여러개의 일을 동시에 처리할수 있다...
CocoaPods 을 사용해보자! 코코아팟(CocoaPods)이란? 코코아팟(CocoaPods)은 Swift 및 Objective-C 언어 환경 프로젝트의 의존성을 관리해주는 도구다. 코코아 팟은 Ruby 로 개발되어있다. 현재 가장많은 라이브러리를 보유하고있다. Podfile 에 사용할 라이브러리만 명시해주면 자유롭게 프로젝트에서 사용할수 있다. 코코아팟을 설치해보자! 터미널을켜고 sudo gem install cocoapods 키워드를 입력하자! Podfile 을 만들어보자! 터미널에서 cd 명령어를 사용해 의존성 관리도구를 적용할 프로젝트 경로로 이동한다! 터미널에 pod init 명령어를 사용하면 앞으로 의존성을 관리할 Podfile이 생성된다. Podfile 을 실행해 사용할 라이브러리를 추가하..
Swift Lint 란? 커뮤니티 혹은 팀에서 정한 스타일 규칙을 따르지 않는 코드부분을 식별하고 표시하는것을 도와준다. 개발자 마다 코딩 스타일이 다르기때문에, 코드를 작성할 때 추천하는 코딩 스타일, 괜찮은 사례등을 모아 놓은 가이드 라인이다. 이러한 코딩 컨벤션들을 Rule로 정함으로써 모든 Swift 코드가 일관성을 유지하도록 해준다. 이렇게 하면 새로운 개발자가 합류하거나 예전 코드를 읽을 때 도움이 된다. Rule Swift Lint Rule Swift Lint 에는 75개가 넘는 룰들이 있다. Rule에는 Default로 적용되는 Rule도 있지만 사용자에 의해 적용되는 Rule들도 존재한다. Rule들을 세부적으로 적용 시키기 위해서는 .swiftlint.yml파일을 추가해주어야 한다. R..
Static Dispatch, Dynamic Dispatch Static Dispatch(컴파일 타임), Dynamic Dispatch(런 타임) 여기서 Dispatch 는 직역하면 보내다 라는 뜻인데, 어떤 함수를 호출할것인지 결정 해주는것같다. swift 에서는 Static Dispatch, Dynamic Dispatch 두가지 방식이 있다. Static Dispatch(컴파일 타임) 요 방식은 컴파일 타임에 호출될 함수를 결정하고 런타임때에 그대로 실행시킨다. Dynamic Dispatch(런 타임) 요 방식은 런타임에 호출될 함수를 결정한다. 그렇기때문에 swift 에서 클래스마다 함수 주소값의 배열인 vTable(Virtual Dispatch Table) 을 유지하게된다. 하위 클래스가 메서드를..
MetaType, self 와 Self MetaType 공식문에서는 Metatype 은 타입의 타입이라고 정의 되어있다. 이게 대체 무슨소리일까.. 아래 예시를 보자 struct Person { static let name = "malrang" var age = 29 } let malrang = Person() 지금껏 나는 Person 이라는 타입을 정의한후 Person 타입의 malrang 이라는 상수를 정의해주었다. malrang 은 Person 타입의 인스턴스다. 하지만 여기서 Person 은 타입의 타입인 메타타입이라 한다. malrang 인스턴스의 타입의 타입 그러니까 즉 타입 자체?본체?를 메타타입이라고한다. type(of:) 요 메서드는 파라미터에 인스턴스를 넣게되면 인스턴스의 메타타입을 반..
Json 제이슨..!누구냐 넌? Json(JavaScript Object Notation) 메모리에서 살고있는 객체를 디스크에 저장했다가 다음에 다시 사용한다던지, 다른 컴퓨터 다른 시스템으로 전달을 하고 싶을때 사용할수있다. 메모리에서 살고있는 객체는 0,1 로 이루어져 있다. 읽고 쓰는 방식이 컴퓨터 마다 다르다. 그렇기에 0,1 그대로를 usb 등 매개체에 담아 다른곳에 보내게 되면 제대로 읽고 쓸수 없게될 확률이 높다. 이때 Json 형식으로 저장하여 옮기게되면 다른 컴퓨터 혹은 시스템에서 내가 만들어둔 객체를 다른곳에서도 동일하게 해석하여 내가 만들어둔 객체와 동일하게 작동하도록 해준다. 쉽게 얘기하면 컴퓨터와 컴퓨터가 0,1 을 동일하게 해석할수있게끔 하는 약속이 필요했다. Json 의 규칙들..