iOS 개발/Swift 13

[Swift] weak self, 어떻게 사용해야할까? (2/2)

[Swift] weak self, 어떻게 사용해야할까? (2/2) [Swift] weak self, 어떻게 사용해야할까? [Swift] weak self, 어떻게 사용해야할까? 클로저를 매개변수로 받아 메소드를 작성하는 경우, 혹은 URLSession 이나 DispatchQueue 를 이용할 때, 클로저 내부에서 클로저 외부의 프로퍼티나 메소드를 사용 trumanfromkorea.tistory.com 앞선 글에 이어서 마저 작성해보도록 하겠습니다. GCD GCD 호출은 나중에 실행하기 위해 어딘가에 저장하지 않는 한 순환참조가 발생할 위험이 없습니다. 다음 코드와 같이 작업이 바로바로 수행되는 경우에는 [weak self] 를 사용하지 않더라도 메모리 누수가 발생하지 않을 것입니다. func nonLea..

iOS 개발/Swift 2022.10.23

[Swift] weak self, 어떻게 사용해야할까? (1/2)

[Swift] weak self, 어떻게 사용해야할까? (1/2) 클로저를 매개변수로 받아 메소드를 작성하는 경우, 혹은 URLSession 이나 DispatchQueue 를 이용할 때, 클로저 내부에서 클로저 외부의 프로퍼티나 메소드를 사용하는 경우 self 를 사용해야 한다는 경고창을 한 번쯤은 보신적이 있으실겁니다. 저는 위와 같은 상황을 겪을때마다 별 생각 없이 self 를 앞에 붙여주었습니다. 시간이 지나 self 는 해당 클로저를 품고있는 객체를 강하게 참조한다는 것을 알게 되었고, [weak self] 를 이용하다는 것이 안전하다고 하기에 그렇게 사용하고 있었습니다. 하지만 이런 경우 self 가 약하게 참조되기 때문에 옵셔널 체이닝을 해주거나, guard let 구문을 이용하여 바인딩 해줘..

iOS 개발/Swift 2022.10.23

[Swift] Swift 언어가 가진 특징

[Swift] Swift 언어가 가진 특징 Swift 는 애플이 WWDC14 에서 공개한 언어로 iOS, iPadOS, watchOS, macOS 등 애플 제품 개발에 활용되는 개발 언어입니다. 오늘은 Swift 언어가 가진 특징들에 대해서 간략하게 알아보겠습니다. 특징 & 다른 언어와의 차이점 안정성 변수는 사용 전 항상 초기화되어야 함 배열 및 정수에 대한 overflow 검사가 수행됨 ARC 를 지원해 메모리 관리가 간편함 강력한 타입 통제 타입 추론 양방향으로 가능 Collections 처럼 일반적으로 사용되는 Value 타입 최대한 활용 해당 타입을 복사할 경우 다른 곳에서는 수정 불가 Optional 변수 혹은 상수의 값이 nil 일수도 있음을 의미 Optional 값을 언래핑하는 여러 구문을..

iOS 개발/Swift 2022.08.17

[TIL] Swift 에서 Array 를 탐색하는 방법들의 차이 (for in)

[TIL] Swift 에서 Array 를 탐색하는 방법들의 차이 (for in) 프로그래머스에서 코딩테스트 문제를 풀다가 신기한 점을 발견했습니다. Array 를 탐색하는데 인덱스로 탐색하는 것과 for in 을 이용하여 Array 의 원소에 직접 접근하는 것이 꽤나 많은 시간차이를 보인다는 것이었습니다. https://school.programmers.co.kr/learn/courses/30/lessons/64062 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 제가 풀던 문제는 이 문제였는데, 효율성 테스트 부분을 통과하지 못하고 있었습니다. 그런데 ..

iOS 개발/Swift 2022.07.17

[Swift] Optional

[Swift] Optional Optional 은 해당 변수가 어떤 타입의 값을 가지고 있을 수도 있고, 혹은 nil 을 가지고 있을 수도 있다는 의미입니다. Optional 의 구현부를 살펴보면 위와 같이 none 과 some(Wrapped) 라는 case 를 가진 열거형으로 구현되어 있습니다. none 일 경우 nil 을 가지게 될 것이고, some(Wrapped) 는 Wrapping 된 어떠한 값을 가지고 있게 될 것입니다. HTML 삽입 미리보기할 수 없는 소스 Optional 은 위처럼 두가지 방법으로 선언할 수 있지만, 대부분의 경우 타입 뒤에 ? 를 붙이는 방식을 선호하는 것 같습니다. Optional 은 초기값을 할당해주지 않으면 nil 로 초기화됩니다. Optional 을 상수로 선언할 ..

iOS 개발/Swift 2022.07.04

[Swift] GCD & Dispatch Queue

[Swift] GCD & Dispatch Queue 프로그램은 실행되며 여러가지 작업을 수행해야 하는데, 멀티스레드 프로그래밍을 이용하지 않고 하나의 스레드에서 작업을 모두 수행한다면 당연히 많은 시간이 걸릴것입니다. iOS 의 메인 스레드는 UI 를 화면에 그려주는 스레드입니다. 이 경우 화면에 UI 를 그려줘야 하는데, 단순 연산이나 네트워크 요청 등 다른 작업들을 모두 메인 스레드에서 실행한다면 앱이 버벅거릴수도 있을 것입니다. GCD (Grand Central Dispatch) 그래서 다른 스레드에서 여러 작업을 수행할 수 있도록 적절하게 분배해주는 과정이 필요합니다. 이는 동시성 프로그래밍이라고 불립니다. GCD 는 멀티코어와 멀티프로세싱 환경에서 최적화된 프로그래밍을 할 수 있도록 해줍니다. ..

iOS 개발/Swift 2022.05.27

[Swift] 싱글톤 패턴 (Singleton Pattern)

[Swift] 싱글톤 패턴 (Singleton Pattern) 싱글톤 패턴이란, 특정 용도로 객체를 하나만 생성하여 공용으로 사용하고 싶을 때 사용하는 디자인 패턴입니다. 클래스가 여러차례 호출되더라도, 인스턴스는 딱 한번만 생성되게 하는 것입니다. 이렇게 되면 전역변수처럼 코드의 어느 곳에서 접근하던 간에 같은 메모리에 접근이 가능해집니다. 예제 사용자의 정보를 저장하는 UserInfo 라는 클래스를 만들고 A, B, C 라는 3개의 ViewController 가 있다고 가정해보겠습니다. A 에서는 사용자의 이름을, B 에서는 사용자의 전화번호를, C 에서는 사용자의 주소를 추가하기 위해 각각 UserInfo 인스턴스를 생성하여 값을 넣어주었습니다. 하지만 이렇게 된다면 A, B, C 에서 각각 인스턴..

iOS 개발/Swift 2022.05.20

[Swift] 타입 캐스팅 (Type Casting)

[Swift] 타입 캐스팅 (Type Casting) 타입 캐스팅은 인스턴스의 타입을 확인하거나 어떠한 클래스 인스턴스를 해당 클래스 계층 구조의 슈퍼 클래스나 서브 클래스로 캐스팅하는 방법입니다. Swift 에서 타입 캐스팅은 is 와 as 연산자로 구현됩니다. 이 두 연산자는 값의 타입을 확인하거나 값을 다른 타입으로 캐스팅하는 간단한 방법을 제공합니다. 타입 캐스팅을 이용하여 타입이 프로토콜을 준수하는지 확인할 수도 있습니다. 타입 캐스팅을 위한 클래스 계층 정의 클래스 및 서브 클래스들의 계층 구조와 타입 캐스팅을 이용한다면 특정 클래스 인스턴스의 타입을 확인하고 해당 인스턴스를 동일한 계층 구조 내의 다른 클래스로 캐스팅할 수 있습니다. 위의 코드에는 MediaItem 이라는 클래스와, 이를 상..

iOS 개발/Swift 2022.05.19

[Swift] 프로토콜 (Protocols)

[Swift] 프로토콜 (Protocols) 프로토콜은 메소드, 프로퍼티, 요구사항의 청사진을 정의합니다. 프로토콜은 클래스, 구조체, 열거형에 의해 채택될 수 있으며 이 때 프로토콜이 요구하는 사항을 모두 충족하면 해당 프로토콜을 준수한다고 합니다. 준수해야 하는 타입의 요구사항을 정의하는 것 외에도 요구사항의 일부를 구현하거나, 준수하는 타입에 추가 기능을 구현하기 위해 프로토콜을 확장할 수 있습니다. 프로토콜 구문 프로토콜은 클래스, 구조체, 열거형과 비슷한 방법으로 선언할 수 있습니다. 프로퍼티, 메소드 요구사항 프로퍼티 프로퍼티는 타입과 이름만 지정 연산 프로퍼티인지, 저장 프로퍼티인지는 지정하지 않음 타입 프로퍼티는 항상 static 키워드 사용 gettable / settable 여부 작성 ..

iOS 개발/Swift 2022.05.13

[Swift] 확장 (Extensions)

[Swift] 확장 (Extensions) Extensions 는 이미 선언된 클래스, 구조체, 열거형 혹은 프로토콜 타입에 새로운 기능을 추가할 수 있다는 것을 의미합니다. Extensions 를 이용하면 다음과 같은 일을 수행할 수 있습니다. Computed Property 추가 메소드 정의 새로운 initializer Subscript 정의 Nested Type 정의 기존 타입이 Protocol 을 채택하도록 함 Extension 구문 extensions 키워드를 이용하여 선언할 수 있습니다. Extension 은 하나 이상의 Protocol 을 채택하여 기존 타입을 확장할 수 있습니다. 연산 프로퍼티 (Computed Properties) 확장을 이용하여 기존 타입에 연산 프로퍼티를 추가할 수 있..

iOS 개발/Swift 2022.05.13