적당한 고통은 희열이다

- 댄 브라운 '다빈치 코드' 중에서

반응형

ios 10

[Swift iOS] 이미지 캐시 처리 Memory vs. Disk

앱에서 사용되는 이미지가 많을 경우, 이미지를 매번 서버로부터 받아오면 로딩 속도도 오래걸리고 계속 네트워크 통신을 해주는 것도 리소스 낭비이기 때문에 이미지를 캐싱하는 작업을 해보았다. 이미지 캐싱이란? 다운로드된 이미지를 캐시(메모리 or 디스크)에 저장해두었다가 불러오는 방식으로, 한 번 다운받은 이미지는 별도의 리소스를 소모할 필요 없이 빠르게 가져와서 보여줄 수 있다. 물론 KingFisher SDWebImage 같은 이미지 라이브러리를 사용하면 이미지 다운로드 및 캐싱을 알아서 자동으로 처리해주고, 이미지를 메모리에 저장하는 대신에 디스크에 저장하고 필요한 만큼만 메모리에 올려서 사용하기 때문에 메모리 사용량도 줄이고 편하게 구현해줄 수 있다. 그치만 직접 구현 한번 해보자고...! iOS에서..

[Swift GCD] GCD(Grand Central Dispatch)

멀티코어 환경에서 프로그램의 성능과 반응성을 높이고 더욱 효과적으로 사용할 수 있도록, 시스템 수준에서 GCD가 디스패치 큐를 이용해 multi threading을 지원하고 동시 작업을 관리해준다. 디스패치 큐는 작업들이 여러 쓰레드에서 동기적 or 비동기적으로 동작하며 동시에 일을 할 수 있도록, 큐(Queue)를 이용해 작업을 분산 처리 하는 FIFO 대기열이다. 디스패치 큐의 종류에는 main, global, private 큐가 있다. main 큐에서 실행되는 main thread는 iOS 에서 오직 하나만 존재하고, 모든 UI 작업들이 이 메인 쓰레드에서 처리된다. 메인 큐는 한 번에 하나의 task 밖에 실행하지 못하는 serial 큐이기 때문에, UI 실행에 영향을 끼칠 수 있는 네트워크 호출..

[Swift ARC] Automatic Reference Counting

Swift에서는 Automatic Reference Counting 방식을 이용하여 메모리 관리를 자동으로 해주고 있다. 참조 타입인 클래스의 인스턴스를 관리할 때 사용되는 방식으로, 클래스의 새 인스턴스를 만들 때마다 ARC는 해당 인스턴스의 정보를 저장하기 위해 메모리에 할당하고, 해당 인스턴스를 참조하는 횟수(reference counting)를 추적하여 더 이상 사용되지 않을 경우 자동으로 메모리를 해제해준다. Reference Counting이란? 메모리를 제어하는 방법 중 하나로, garbage collection의 한 방식이다. 어떤 한 동적 단위(객체, Object)가 참조값을 가지고 이 단위 객체가 참조(참조 복사)되면 참조값을 늘리고 참조한 다음 더이상 사용하지 않게 되면 참조값을 줄이..

[Swift] Generic에 대하여

Generic은 Swift 의 가장 강력한 기능 중 하나로, Swift 표준 라이브러리의 대부분은 generic 으로 이루어져 있다. 흔히 사용하고 있는 배열과 딕셔너리가 바로 generic collection으로 제네릭의 대표적인 예이다. 타입을 특정하지 않고 함수나 타입을 구현할 수 있도록 하여, Generic을 사용하면 유연하고 재사용 가능한 코드를 작성할 수 있다. 제네릭을 정의할 때 타입 파라미터로는 placeholder type으로 T를 흔히 사용하며, 사용 시에 타입이 확정되면 실제 타입으로 대체된다. ex) 제네릭 함수 : swap, 제네릭 타입 : Array, 커스텀 Stack Generics Generic은 어떤 타입이든 넣어줄 수 있는, 유연하고 재사용가능한 함수와 타입을 작성할 수 ..

[Swift] Codable - CodingKey

CodingKey A type that canbe used as a key for encoding and decoding. 인코딩 및 디코등을 위한 키로 사용될 수 있는 타입 protocol CodingKey : CustomDebugStringConvertible, CustomStringConvertible, Sendable CodingKey 사용하는 경우 Swift에서는 변수나 상수를 선언할 때 카멜케이스를 사용한다. 그런데 예를 들어 JSON 에서 스네이크 케이스를 사용하는 경우, 다음과 같이 내려받은 JSON 키 "actual_price" 와 Items 구조체에서 선언해준 "actualPrice" 키가 일치하지 않을 수 있다. 이런 경우 CodingKey를 사용하여 키를 변환(?) 연결(?) 해주면..

[Swift] Access Control 접근 제어자 종류 및 사용

접근 제어자 사용하는 이유 - 외부로부터 데이터를 보호하기 위해서 - 외부에는 불필요한, 내부적으로만 사용되는 부분을 감추기 위해서 더보기 * 참고 : 은닉화(Hiding)란? - 객체지향 개발에서 외부로부터 데이터를 보호하기 위해, 객체 외부에서 객체 내 자료로의 접근을 제한하고, 데이터를 수정하거나 조작하는 동작은 접근자(getter, setter)를 통해 결과만 받는 것. 외부에서의 직접 접근은 막고 메서드를 통해 간접 접근할 수 있도록. 예를 들어 public class 안의 변수 int hour가 0~23 사이의 값을 가져야할 때, 변수의 접근 제어자를 private 으로 하여 외부에서 직접 접근하지 못하도록 하고, setHour 메서드를 통해 간접적으로 접근할 수 있도록 하여 값을 보호할 수 ..

[Swift 알고리즘] Programmers 콜라츠 추측

Level 1 연습문제 콜라츠 추측 문제 설명 1-1. 입력된 수가 짝수라면 2로 나눕니다. 1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다. 2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다. 이 작업을 몇번이나 반복해야하는지 반환하는 함수. 500번을 반복해도 1이 되지 않으면 -1을 반환 제한조건 - num은 1 이상, 8000000 미만인 정수입니다. 입출력 예 print(solution(6)) //8 print(solution(16)) //4 print(solution(626331)) //-1 print(solution(1)) //0 내 답안 func solution(_ num:Int) -> Int { if num == 1 { return 0 } var num = num f..

[Swift iOS] url 이용하여 image 받아오기

1. UIImageView에 extension으로 메서드 추가하는 방법 url로 이미지 불러오는 일이 이렇게 복잡한 지 처음 알았다... 그냥 대충 setImage에 url 인자 넣으면 되는 줄 알았더니 생각보다 아주 까다롭구만.. 다음과 같이 UIImageView에 extension으로 url로 이미지 로드하는 메서드를 만들어준다. 이미지를 다운로드받아 불러올 때, 이미지가 클 경우 시간이 오래 걸릴 수 있기에 끊김이 없도록 DispatchQueue를 사용해 멀티쓰레드로 처리를 해준다. extension UIImageView { func load(url: URL) { DispatchQueue.global().async { [weak self] in if let data = try? Data(conten..

[Swift iOS] 카카오링크로 피드 메시지 공유하기

kakao developers 사이트에 가면 아주아주 친절하게 설명이 잘 되어있다. 어플리케이션 등록은 이미 되어있는 상태라 나는 SDK 설치부터 시작~! 1. SDK 설치하기 모듈 설명 : Kakao SDK pod 'KakaoSDKCommon' // 공통 모듈 pod 'KakaoSDKUser' // 사용자 인증 pod 'KakaoSDKAuth' // 카카오 로그인, 사용자 관리 pod 'KakaoSDKTalk' // 친구, 메시지(카카오톡) pod 'KakaoSDKLink' // 메시지(카카오링크) 이렇게가 카카오 링크로 피드 메시지 공유하는 데 필요한 모듈들. 하나하나 추가하기 귀찮으면 pod 'KakaoSDK'로 전체를 추가해줄 수도 있다. 이 친구들을 pod install 해주니 나는 오류 폭탄이..

5. 돈 없어도 서버를 만들 수 있는 세상! _Swift Firebase Tutorial for iOS

www.raywenderlich.com/3-firebase-tutorial-getting-started Firebase Tutorial: Getting Started In this Firebase tutorial, you’ll learn Firebase fundamentals including saving data, real-time sync, authentication, user status, and offline support. www.raywenderlich.com Swift Tutorial 5. Firebase 서버 연동하기 Grocery list App을 만들어보며 데이터 저장, 실시간 동기화, 인증, 사용자 상태, 오프라인 지원 등을 포함한 Firebase 기본 사항 배우기. ● Firebas..

728x90
반응형