분류 전체보기

    iOS. 동시성프로그래밍(2) - 동기, 비동기, 직렬, 동기

    💥 비동기(Async) vs 동기(Sync) ❓비동기(Async) 작업을 다른 스레드로 보낸 후 작업이 끝나기를 기다리지 않는다. 기다리지 않기 때문에 다음 작업을 진행할 수 있다. ❓동기(Sync) 다른 스레드에 작업을 시키고, 끝날 때까지 기다린다. 작업이 끝날 때까지 다른 작업을 시작할 수 없다. 💥 직렬(Serial)큐 vs 동시(Concurrent)큐 큐의 특성에 따라 나뉘어짐 ❓직렬(Serial)큐 Queue에서 받은 테스크들을 단 하나의 다른 쓰레드로 보내는 큐 한 번에 하나의 테스크를 순차적으로 실행 순서가 중요한 작업을 처리할 때 Main Thread에서 사용되는 Queue(Main Queue) ❓동시(Concurrency)큐 Queue에서 받은 테스크들을 다른 여러개의 쓰레드로 보내는 ..

    iOS. 동시성(Concurrency) 프로그래밍(1) - 동시성프로그래밍이란? feat. 병렬/동시

    동시성 프로그래밍이 필요한 이유 네트워크 통신과 비동기 처리 네트워크 통신, 서버에 데이터를 요청하는 일은 부하가 많이 걸리는 일이다. 당근마켓의 화면엔 사진과, 정보를 담고 있으며, 이를 스크롤하며 다른 정보들을 갖고있을 수 있다. 비동기 처리를 하지 않으면 한 번에 한 개의 작업만 할 수 있다. 첫번째 사진을 다운로드 -> 첫 번째 정보를 다운로드 -> 두 번째 사진을 다운로드... 그러므로 비동기 처리를 하지않으면 테이블 뷰를 스크롤 할 때 마다 버벅거릴것이다. 아이폰의 메인쓰레드 아이폰의 화면 주사율은 60Hz이다. 1초에 60번 화면을 다시 그린다는 뜻이다. 계산을 해보면 0.01666초에 한 번 화면을 다시 그려야 하며 화면을 다시 그리는 일은 메인쓰레드가한다. 즉 메인쓰레드는 0.01666초..

    동기(Sync), 비동기(Async), 직렬(Serial)동시(Concurrent)에 대한 정리

    비동기(Async) vs 동기(Sync) 비동기(Async) 다른 쓰레드에서 작업하도록 넘긴 후 그 작업이 끝나길 "안기다리고" 다음일을 진행한다. 보낸 작업이 언제끝나는지 관심없고, 다음일을 처리한다. 동기(Sync) 작업을 다른 쓰레드에서 하도록 시킨 후, 그 작업이 끝나길 "기다렸다가" 다음일을 진행한다. 비동기라는 개념이 일반적으로 필요한 이유는 대부분 서버와 통신(네트워크 작업) 때문 이다. 직렬처리(Serial) vs 동시처리(Concurrncy) 직렬처리(Serial) 쓰레드에서 하던 작업을 다른 쓰레드로 보내는데, 다른 하나의 쓰레드로 원래의 순서를 유지해서 보낸다. (보통 메인쓰레드에서) 분산처리 시킨 작업을 "다른 한개의 쓰레드"에서 처리 순서가 중요한 작업을 처리할 때 사용 동시처리(..

    REST API 정리

    REST한 형식의 API 요청방식에 대한 약속 REST하지 않은 형식 https://(사이트주소)/1 --> 상영중 영화목록 요청 GET https://(사이트주소)/2 --> 내일 오픈예정 영화 목록 GET https://(사이트주소)/3 --> 실시간 영화 관객 순위 GET https://(사이트주소)/4 --> 영화 예약 POST 1, 2, 3, 4...이렇게 하면 헷갈린다. 만약 서버 담당자가 퇴사를 하거나, 정보가 누락될 시 어떤게 각 주소가 어떤 API이지 알기 힘들고 실수할 가능성이 높다. 그래서 명사형으로 작성을 하자! REST한 형식 https://(사이트주소)/moviewlists --> 상영중 영화목록 요청 GET https://(사이트주소)/moviewlists?open=tomorr..

    [Swift] 에러처리(Error Handling)

    Error(에러) 에러의 종류 컴파일 오류: 컴파일러가 코드가 잘못되었음을 알려준다(문법적 오류/에러) 런타임 오류 : 다양한 이유로 앱이 실행하는 동안 발생한다 ==> 앱이 꺼진다. 에러처리가 필요한 이유 런타임에러는 프로그램이 실행하는 동안 발생하며, 크래시(앱 강제 종료)가 발생한다. 서버와 통신하는 앱등을 만들 때 정보를 서버에 요청하고, 서버는 데이터를 보내준다. 실제 앱에서 데이터를 받아오지 못한다면 어떻게될까? 데이터를 요청하는 함수가 제대로 실행이 되었다면? 함수의 결과로 데이터를 가져올 것이다. 하지만 데이터를 제대로 가져오지 못해서 에러가 발생하면 ? 앱이 꺼질 수 있다. 그 이유론 수많은 이유가 있을 수 있다. 네트워킹오류, 서버다운이슈 등.. 수 많은 경우의 수가 있다. 그래서 앱이..

    [Swift] ARC와 메모리누수(Memory Leak), weak, unowned

    ARC란 자동으로 메모리 관리를 해주는 친구 객체에 대한 참조카운트를 관리하고 0이 되면 자동으로 메모리해제 메모리 누수가 발생할 수 있다. 옛날 Objective-C에선 MRC => 수동으로 관리 Compile time할때 실행된다. 과연 Compile time에 실행되는 ARC가 동적으로 할당되는 메모리의 refrence count를 하고 메모리관리를 어떻게할까? 사전에 알아야 할 지식은 MRC이다. MRC 엣날 objc에선 retain. release, sutorelease등을 통해 수동으로 메모리 관리를 했다. class Person{ let name: String init(name: String){ self.name = name } } let clamp = Person(name: "clamp")..

    [Swift]. 함수형 프로그래밍(Functional Programming)

    함수형 프로그래밍을 알기 전에.. 명령형 프로그래밍 변수를 지정하고 다양한 for문, if문들을 써서 어떻게 구현해 낼까.. 라는 고민, 설계를 하는게 명령형 프로그래밍이다. 예) var sum = 0 for num in 배열{ sum += num } person.name = "clamp" 함수형 프로그래밍 함수를 쓰는것. ==> 다양한 함수들이 구현되어있고 이 함수들을 어떻게 조합해서 구현해 낼까.. 라는 고민, 선언하는게 함수형 프로그래밍이다. 함수(map, filter, reduce)등 을 이용해서 사이드 이펙트가 없도록 선언형으로 프로그래밍 하는것이다. 예) 배열.map{ 클로저 } .filter{ 클로저 } .reduce{ 클로저 } //함수를 이용해서 선언형으로 프로그래밍하는 것 *추가 자료 ..

    [iOS]. MVVM 정리

    MVC 정리 MVC패턴에서 사용자의 입력을 받게되는 부분은 Controller이다. Controller는 사용자의 입력을 받으면 Model에 데이터를 요청하거나, 데이터를 변형하거나 작업을 한다. 이후 Model은 View를 업데이트한다. View는 그리하여 Model과의 *의존성을 갖게된다. View와 Controller역시 데이터를 주고 받는 때들이 있기 때문에 의존성이 생길 수 있다. 가장 큰 문제는 View와 Model의 의존성이 생기는 것! *의존성: 서로 다른 객체 사이에 의존 관계가 있는것. 의존하는 객체가 수정되면 다른 객체도 영향을 줄 수 있다 iOS에선 사실 View와 Controller는 떼어놓기가 힘들다? iOS의 viewController라는 클래스 파일에 예를 들어 화면에 버튼을..

    [Swift]. self vs Self

    self 클래스/구조체 내에서 해당 인스턴스(자기자신)을 가르킴 프로토콜에서의 Self사용(프로토콜을 채택하는 해당 타입을 가르킴) 프로토콜 내에서 Self를 선언하면 채택한 타입을 의미한다. //BinaryInteger이란 프로토콜의 확장 extension BinaryInteger{ func squared() -> Self{ //BinaryInteger이란 프로토콜을 채택한 해당타입(Int, UInt등등..) return self * self } } // 위의 Self를 Int나 UInt로 적는다면 BinaryInteger을 채택한 모든 타입을 확장해줘야한다 아래처럼 /* extension BinaryInteger { func squared() -> Int { return self * self } } ..

    [Swift]. Method Dispatch

    Method Dispatch 실제로 Method는 CPU에대한 명령어이며, 실제론 코드 영역에만 존재한다. 그렇기 때문에 코드 영역에 있는 메서드를 실행시키려면 메서드 주소가 필요하다. 그런데 그 메서드 주소를 기억하고, 어떤 메서드를 실행시킬지에 관련된 내용이다. 한 마디로 "어떤 메서드를 부를지 선택하는것" Swift가 함수(메서드)를 실행시키는 방법은 3가지가 있다. 컴파일타임/런타임 컴파일타임: 작성된 소스코드는 컴파일이라는 과정을 통해 기계어 코드로 변환되어 실행 가능한 프로그램이 된다. 이러한 편집 과정을 컴파일타임(Compiletime)이라고 부른다. 런타임: 컴파일과정을 마친 프로그램이 사용자에 의해 실행되며, 이러한 프로그램이 동작되는 때를 런타임(Runtime)이라 부른다 @컴파일타임 ..