본문 바로가기

Languages/Swift31

You don’t (always) need [weak self] (해석) You don't (always) need [weak self] - Flawless iOS - Medium You don’t (always) need [weak self] We will talk about weak self inside of Swift closures to avoid retain cycles & explore cases where it may not be necessary to capture self weakly. medium.com In closure let changeColorToRed = DispatchWorkItem { [weak self] in self?.view.backgroundColor = .red } 이 클로저에서 self가 어떻게 약하게 캡쳐되었는지 주목하십시오. 결국 .. 2020. 6. 17.
GCD & Operations - Concurrency by Tutorials https://store.raywenderlich.com/products/concurrency-by-tutorials Section 1: Getting Started with Concurrency Chapter 1: Introduction iOS가 코드를 동시에 실행할 수있는 기능을 제공하는 두 가지 주요 방법 Grand Central Dispatch Operation class 최신 프로그래밍 언어들의 서로다른 동시성 처리 매커니즘 C# / Typescript async / await 패턴 사용 Swift Closure Swift 5는 원래보다 일반적인 async / await 패턴을 구현할 계획이 있었지만 다음 릴리스까지 사양에서 제거되었습니다. Chapter 2: GCD & Operations 앱의.. 2020. 5. 23.
데이터 타입 기본 데이터 타입 기본 데이터 타입 - 야곰의 스위프트 프로그래밍 Bool true와 false만을 값으로 가지는 타입 Int, UInt Int 정수 타입. 현재는 기본적으로 64비트 정수형. UInt 양의 정수 타입. 현재는 기본적으로 64비트 양의 정수형. Float, Double Float 실수 타입. 32비트 부동소수형. Double 실수타입. 64비트 부동소수형. Character, String Character 문자 타입. 유니코드 사용. 큰따옴표("") 사용. String 문자열 타입. 유니코드 사용. 큰따옴표("") 사용. 여러줄 문자열은 큰따옴표 세 개 사용. 생각해보기 다음 코드에서 integer, floatingPoint, apple 상수는 각각 어떤 타입이 될까요? 상상해보고 확인해.. 2020. 1. 26.
Swift Memory Management Swift Memory Management스위프트는 ARC로 메모리 관리를 한다.ARC자동 참조 계수(Automatic Reference Counting)인스턴스가 더 이상 필요없을 때 사용된 메모리를 자동으로 해제해준다.강한 순환 참조ARC로 메모리를 관리할 때 발생할 수 있는 문제이다.두 개의 객체가 서로 강한 참조를 하는 경우 발생할 수 있다.해결법서로 강한 참조를 하는 경우 발생한다면, 둘 중 하나의 강한 참조를 변경해주면 된다.강한 참조를 약한(weak) 참조 혹은 미소유(unowned) 참조로 변경하면 강한 순환 참조 문제를 해결할 수 있다.약한 참조는 옵셔널일 때 사용하고, 미소유 참조는 옵셔널이 아닐 때 사용한다.클로저에서의 강한 순환 참조클래스처럼 클로저는 참조 타입이기 때문에 강한 순환.. 2018. 12. 30.
Delegate vs Block vs Notification vs KVO Delegate vs Block vs Notification vs KVO하나의 객체가 다른 객체와 소통은 하지만 묶이기(coupled)는 싫을 때DelegateDelegate는 보통 Protocol을 정의하여 사용한다.Protocol이란 일종의 기능 명세서 같은 것으로 Delegate로 지정된 객체가 해야 하는 메소드들의 원형을 적어 놓는다.Delegate 역할을 하려는 객체는 이 Protocol을 따르며 원형만 있던 메소드들의 구현을 한다.이렇게 세팅 후 이전 객체는 어떤 이벤트가 일어났을 시 delegate로 지정한 객체에 알려줄 수 있다.장점매우 엄격한 Syntax로 인해 프로토콜에 필요한 메소드들이 명확하게 명시됨.컴파일 시 경고나 에러가 떠서 프로토콜의 구현되지 않은 메소드를 알려줌.로직의 흐름.. 2018. 12. 30.
obj-c 블럭과 swift 클로저의 차이 obj-c 블럭과 swift 클로저의 차이값 타입 변수를 캡쳐(블럭/클로저 내부에서 사용)하면 클로저에서는 기본적으로 참조타입으로 사용되고 블럭에서는 값 타입으로 사용된다.참조 타입 변수는 둘 다 같다. 2018. 12. 30.
Class와 Struct의 차이 Class와 Struct의 차이같은 점값을 저장하기 위해 프로퍼티를 정의할 수 있습니다.기능 실행을 위해 메서드를 정의할 수 있습니다.서브스크립트 문법을 통해 구조체 또는 클래스가 갖는 값(프로퍼티)에 접근하도록 서브스크립트를 정의할 수 있습니다.초기화될 때의 상태를 지정하기 위해 이니셜라이저를 정의할 수 있습니다.초기구현과 더불어 새로운 기능 추가를 위해 익스텐션을 통해 확장할 수 있습니다.특정 기능을 실행하기 위해 특정 프로토콜을 준수할 수 있습니다.다른 점구조체는 상속할 수 없습니다.타입캐스팅은 클래스의 인스턴스에만 허용됩니다.디이니셜라이저는 클래스의 인스턴스에만 활용할 수 있습니다.참조 횟수 계산은 클래스의 인스턴스에만 적용됩니다. 2018. 12. 30.
map과 flatmap의 차이 map과 flatmap의 차이flatmap은 내부의 값을 알아서 더 추출해 준다.내부에 포장된 값도 추출해낼 수 있다.map은 Array 내부에 값이 있으면 그 값을 그저 클로저의 코드에서만 실행하고 결과를 다시 Array 컨테이너에 담기만 합니다.flatmap은 내부의 옵셔널값을 전부 추출해 준다. 2018. 12. 30.
Process와 Thread의 차이 Process와 Thread의 차이둘은 거의 유사하다.단지 Thread는 컴퓨터의 자원, 예를 들면 메모리와 IO장치들을 Thread끼리 공유하고, Process는 독립적으로 OS로부터 할당받아 사용한다.일반적으로 Process는 여러 Thread를 Invoking(발동) 시키고 관리한다.앱이 실행될 때 한개의 Process가 발생을 하고 그 Process가 어떠한 일을 할 때 컴퓨터의 자원을 최대로 활용하기 위해서는 병렬적으로 일을 하게 만들어야 한다.Thread를 이용해서 컴퓨터의 놀고 있는 자원들을 최대한으로 사용하게 만드는 것이 Multi-Thead Programming의 영역이다. 참고 http://rapapa.net/?p=2704 http://rapapa.net/?p=2704 http://ra.. 2018. 9. 7.
네비게이션 컨트롤러에서 Large Title 나오게 하는 법 네비게이션 컨트롤러에서 large title 켜기navigationController?.navigationBar.prefersLargeTitles = true 네비게이션 컨트롤러 하위의 뷰에서는 large title 비활성화 하기navigationItem.largeTitleDisplayMode = .never 2018. 8. 31.
내비게이션 컨트롤러를 사용하여 화면 전환하기 내비게이션 컨트롤러를 사용하여 화면 전환하기if let view = self.storyboard?.instantiateViewController(withIdentifier: "NewWorkViewController") { self.navigationController?.pushViewController(view, animated: true) } 2018. 8. 31.
사당 1차 iOS 개발 스터디 종료 스위프트 프로그래밍(2판) - 야곰 지음 링크PART I 스위프트 기초 1주차 X CHAPTER 1 스위프트CHAPTER 2 스위프트 처음 시작하기CHAPTER 3 데이터 타입 기본CHAPTER 4 데이터 타입 고급CHAPTER 5 연산자CHAPTER 6 흐름 제어7/12 김OOCHAPTER 7 함수 CHAPTER 8 옵셔널 PART II 객체지향 프로그래밍과 스위프트 2주차 7/18 장OOCHAPTER 9 구조체와 클래스 CHAPTER 10 프로퍼티와 메서드 7/19 김OOCHAPTER 11 인스턴스 생성 및 소멸 CHAPTER 12 접근제어 PART III 함수형 프로그래밍과 스위프트 3주차 7/25 서OOCHAPTER 13 클로저 7/26 서OOCHAPTER 14 옵셔널 체이닝과 빠른종료 CHAPT.. 2018. 8. 23.
사당 iOS 스터디 5주차 - 오류처리 CHAPTER 28 오류처리__28.1 오류처리란스위프트의 오류처리 기능을 통해 시스템(예를 들어 운영체제 등 우리가 작성하는 응용프로그램 외부)에서 발생한 오류를 처리할 수 있는 것이 아님을 명심__28.2 오류의 표현스위프트에서 오류(Error)는 Error라는 프로토콜을 준수하는 타입의 값을 통해 표현오류의 종류를 미리 예상한 다음, 오류 때문에 다음에 행할 동작이 정상적으로 진행되지 않을 때라면 오류를 던져(Throw Error)주면 됩니다.스위프트에서 오류를 처리하기 위한 네 가지 방법함수에서 발생한 오류를 해당 함수를 호출한 코드에 알리는 방법 do-catch 구문을 이용하여 오류를 처리하는 방법 옵셔널 값으로 오류를 처리하는 방법 오류가 발생하지 않을 것이라고 확신하는 방법 __28.3 오류.. 2018. 8. 17.
사당 iOS 스터디 5주차 - ARC CHAPTER 27 ARC__27.1 ARC란ARC는 더 이상 필요하지 않은 클래스의 인스턴스를 메모리에서 해제하는 방식으로 동작가비지 컬렉션 기법과의 차이가장 큰 차이는 참조를 계산(count)하는 시점 ARC 참조 카운팅 시점 컴파일 시 장점 컴파일 당시 이미 인스턴스의 해제 시점이 정해져 있어서 인스턴스가 언제 메모리에서 해제될지 예측할 수 있습니다. 컴파일 당시 이미 인스턴스의 해제 시점이 정해져 있어서 메모리 관리를 위한 시스템 자원을 추가할 필요가 없습니다. 단점 ARC의 작동 규칙을 모르고 사용하면 인스턴스가 메모리에서 영원히 해제되지 않을 가능성이 있습니다. 가비지 컬렉션 참조 카운팅 시점 프로그램 동작 중 장점 상호 참조 상황 등의 복잡한 상황에서도 인스턴스를 해제할 수 있는 가능성이 더.. 2018. 8. 17.
사당 iOS 스터디 5주차 - 프로토콜 지향 프로그래밍 CHAPTER 23 프로토콜 지향 프로그래밍__23.1 프로토콜 초기구현프로토콜과 익스텐션을 결합하면 코드의 재사용성이 월등히 증가프로토콜의 요구사항을 익스텐션을 통해 구현하는 것을 프로토콜 초기구현(Protocol Default Implementations)익스텐션을 통해 구현된 메서드 재정의특정 프로토콜을 준수하는 타입에 프로토콜의 요구사항을 찾아보고 이미 구현되어 있다면 그 기능을 호출하고, 그렇지 않다면 프로토콜 초기구현의 기능을 호출 제네릭, 프로토콜, 익스텐션을 통한 재사용 가능한 코드 작성스위프트의 클래스는 다중상속을 지원하지 않으므로 부모클래스의 기능으로 부족하다면 자식클래스에서 다시 구현해야 하지만, 프로토콜 초기구현을 한 프로토콜을 채택했다면 상속도 추가 구현도 필요 없습니다. 상속을 .. 2018. 8. 17.
사당 iOS 스터디 5주차 - 제네릭 CHAPTER 22 제네릭제네릭을 사용하고자 하는 타입 이름 제네릭을 사용하고자 하는 함수 이름 (함수의 매개변수...) 타입마다 다른 함수를 쓰지 않으려면 Any타입을 사용하면 되지 않을까?Any타입의 두 변수에 어떤 타입의 값이 들어있을지 모릅니다. Int면 Int끼리, String이면 String끼리 교환하고 싶은데, 그런 제한을 줄 수 없는 것다른 타입인 String 타입의 변수(stringOne, stringTwo)를 전달인자로 전달할 수가 없습니다.__22.1 제네릭 함수제네릭 함수는 실제 타입 이름(Int, String 등)을 써주는 대신에 플레이스홀더를 사용타입 매개변수플레이스홀더 타입의 이름을 지정하고 명시하는 역할을 하며, 함수의 이름 뒤 홀화살괄호 기호() 안쪽에 위치 함수의 매개변수.. 2018. 8. 17.
사당 iOS 스터디 5주차 - 익스텐션 CHAPTER 21 익스텐션__21.1 익스텐션이란익스텐션은 스위프트의 강력한 기능 중 하나로 구조체, 클래스, 열거형, 프로토콜 타입에 새로운 기능을 추가기능을 추가하려는 타입을 구현한 소스 코드를 알지 못하거나 볼 수 없다 해도, 타입만 안다면 그 타입의 기능을 확장할 수도 있습니다.스위프트의 익스텐션은 이름이 없습니다.스위프트의 익스텐션이 타입에 추가할 수 있는 기능연산 타입 프로퍼티 / 연산 인스턴스 프로퍼티 타입 메서드 / 인스턴스 메서드 이니셜라이저 서브스크립트 중첩 타입 특정 프로토콜을 준수할 수 있도록 기능 추가 익스텐션은 타입에 새로운 기능을 추가할 수는 있지만, 기존에 존재하는 기능을 재정의할 수는 없습니다.상속과 익스텐션 비교상속 확장 수직 확장 사용 클래스 타입에서만 사용 재정의 재.. 2018. 8. 17.
사당 iOS 스터디 4주차 - 프로토콜 CHAPTER 20 프로토콜__20.1 프로토콜이란프로토콜은 특정 역할을 하기 위한 메서드, 프로퍼티, 기타 요구사항 등의 청사진을 정의어떤 프로토콜의 요구사항을 모두 따르는 타입은 ’해당 프로토콜을 준수한다’고 표현프로토콜은 정의를 하고 제시를 할 뿐이지 스스로 기능을 구현하지는 않습니다.__20.2 프로토콜 정의__20.3 프로토콜 요구사항프로토콜은 타입이 특정 기능을 실행하기 위해 필요한 기능을 요구합니다. 프로토콜이 자신을 채택한 타입에 요구하는 사항은 프로퍼티나 메서드와 같은 기능들20.3.1 프로퍼티 요구프로토콜을 채택한 타입은 프로토콜이 요구하는 프로퍼티의 이름과 타입만 맞도록 구현해주면 됩니다. 프로퍼티를 읽기 전용으로 할지 혹은 읽고 쓰기가 모두 가능하게 할지는 프로토콜이 정해야 합니다... 2018. 8. 17.
사당 iOS 스터디 4주차 - 타입캐스팅 CHAPTER 19 타입캐스팅스위프트는 데이터 타입 안전을 위하여 각기 다른 타입끼리의 값 교환을 엄격히 제한암시적 데이터 타입 변환(Implicit Type Conversion)은 지원하지 않습니다.__19.1 기존 언어의 타입 변환과 스위프트의 타입 변환__19.2 스위프트 타입캐스팅스위프트에서는 다른 언어의 타입 변환 혹은 타입캐스팅을 이니셜라이저로 단순화스위프트 타입캐스팅은 인스턴스의 타입을 확인하거나 자신을 다른 타입의 인스턴스인양 행세할 수 있는 방법으로 사용할 수 있습니다.값의 타입을 확인하거나 다른 타입으로 전환타입캐스팅을 통해 프로토콜을 준수하는지도 확인스위프트와 타입캐스팅은 실제로 참조 타입에서 주로 사용Coffee는 Latte나 Americano인 척할 수 없지만, Latte나 Ame.. 2018. 8. 17.
사당 iOS 스터디 4주차 - 상속 CHAPTER 18 상속상속은 스위프트의 다른 타입과 클래스를 구별 짓는 클래스만의 특징다른 클래스로부터 상속을 받지 않은 클래스를 기반클래스(Base class)__18.1 클래스 상속__18.2 재정의자식클래스는 부모클래스로부터 물려받은 특성(인스턴스 메서드, 타입 메서드, 인스턴스 프로퍼티, 타입 프로퍼티, 서브스크립트 등)을 그대로 사용하지 않고 자신만의 기능으로 변경하여 사용부모클래스의 특성을 자식클래스에서 사용하고 싶다면 super 프로퍼티를 사용super 키워드를 타입 메서드 내에서 사용한다면, 부모클래스의 인스턴스 메서드와 인스턴스 프로퍼티, 서브스크립트에 접근18.2.1 메서드 재정의스위프트는 메서드의 반환 타입이나 매개변수가 다르면 서로 다른 메서드로 취급 18.2.2 프로퍼티 재정의프.. 2018. 8. 17.