적당한 고통은 희열이다

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

반응형

Swift iOS 앱 개발/Swift 85

[Cocoa Design Pattern] KVO: Key-Value Observing

Key-Value Observing이란 객체의 프로퍼티 변경 사항을 다른 객체에 알리기 위해 사용하는 프로그래밍 패턴. kvo는 Swift 상에서는 didSet이나 willSet 같은 것으로 충분히 대체가 가능할 것 같아 굳이 써야하나 싶은 패턴인 것 같다. KVO: Key-Value Observing 이란? Cocoa programming pattern you use to notify objects about changes to properties of other objects. It’s useful for communicating changes between logically separated parts of your app—such as between models and views. You can ..

[Cocoa Design Pattern] Singleton Pattern

싱글톤 패턴이란 인스턴스를 하나만 생성하여 어디에서든지 참조할 수 있도록 하는 객체 생성 패턴.오디오북 앱에서 뮤직 플레이어를 싱글톤으로 하나만 생성하여 재생 관련 메서드들을 처리한 경험이 있는데,이처럼 앱 내에서 공용으로 사용하고 싶은 기능이나 리소스를 싱글톤으로 만들어 인스턴스를 공유할 수 있고, 여러번 호출하더라도 인스턴스가 처음 생성될 때에만 메모리에 할당되기 때문에 메모리도 절약할 수 있다는 장점이 있다.  싱글톤 패턴이란?Provide access to a shared resource using a single, shared class instance.어떤 기능이나 리소스를 앱 내에서 공용으로 사용하고 싶을 때, 해당 인스턴스를 하나만 생성하여 어디에서든지 참조하고 공유할 수 있도록 하는 객체..

[Cocoa Design Pattern] Delegation Pattern

딜리게이트 패턴이란 딜리게이트 패턴이란? 델리게이트는 어떤 객체가 해야 하는 일을 부분적으로 확장해서 대신 처리를 한다. 객체는 Delegate라는 헬퍼 객체를 만들어 권한을 위임함으로써 요청을 처리 delegate는 대신 처리를 수행할 객체와 처리를 요청하는 객체로 구성된다? 왜 사용? to Customize Object Behavior 코드를 재사용하고 유지보수하기 쉬워진다? delegate는 일을 시킬 뿐, 어떻게 처리해야 하는지 일의 처리 방법은 그 일을 수행하는 객체에 구현. 어떤 일을 해야 하는지 미리 정해놓기만 하고, 처리를 할 때 상황에 맞는 코드를 작성하면 된다. 예를 들어 동일한 작업인데도 불구하고 객체마다 다른 내용을 처리해야할 때, 프로토콜에는 어떤 일을 해야 하는지 미리 정해놓기만..

[Swift] Subscripts란? + String은 subscript로 접근이 안되는 이유

class, struct, enum 타입에서 컬렉션, 배열 등의 멤버 요소에 index를 이용하여 간단하게 접근할 수 있는 방법. Swift에서 String은 각 문자를 이루고 있는 메모리의 크기가 가변적이기 때문에 Int 형식의 Subscript로는 접근이 불가하고, associated index 타입으로 String.index를 통해 접근이 가능하다. Subscripts란? https://docs.swift.org/swift-book/LanguageGuide/Subscripts.html Classes, structures, and enumerations can define subscripts, which are shortcuts for accessing the member elements of a c..

[Swift] Any와 AnyObject 비교 및 장단점

Swift는 Type에 민감한 언어이지만, Any와 AnyObject를 사용하면 특정되지 않은 타입에 대해서도 동작을 할 수 있도록 해준다. Any는 모든 유형의 인스턴스를 나타낼 수 있는 범용 타입이고, AnyObject는 모든 클래스 유형의 인스턴스를 나타낼 수 있는 프로토콜. 특정되지 않은 타입에 대해서도 동작을 하도록 특별한 두 가지 타입 Any와 AnyObject를 제공한다. 장점 모든 타입, 모든 클래스 타입을 저장할 수 있다는 장점 단점 매번 타입 체크 및 형변환을 해야하기때문에 필요에 의한 것이 아니라면 사용하지 않는 것이 좋다 참고 : https://docs.swift.org/swift-book/LanguageGuide/TypeCasting.html, zeddiOS, 소들이, hayeon

[Swift] Initialization + Convenience init 이란?

Swift에서는 super class에서 상속받은 프로퍼티들을 포함하여, 모든 저장 프로퍼티가 초기 값을 가질 수 있도록 Class 유형에 대해 두 가지 종류의 초기화를 정의한다. 그 두가지가 바로 흔히 init으로 사용하는 기본 Designated init, 그리고 Convenience init. init 에서는 모든 저장 프로퍼티가 반드시 초기화되어야하는데, Convenience init은 init의 파라미터 중 일부를 임의의 기본값으로 설정해서 오류가 나지 않도록 도와주는 보조 이니셜라이저. * init의 보조이기 때문에 미리 선언한 init을 활용해서 사용해야 한다. convenience init 딱히 필요성을 잘 모르겠어서 왜 쓰나 싶었다. custom collectionView cell 만들때..

[Swift] Copy On Write 동작 방식

Copy-on-write란 컴퓨터 프로그래밍에서 리소스의 복제를 효율적으로 구현하기 위한 리소스 관리 기술로, Swift에서는 Collection Type을 복사해서 사용할 때, Value Type의 성능을 최적화하기 위해 COW를 사용한다. 실제 수정이 이뤄질 때 값을 복사해서 메모리에 할당하고, 그 전에는 참조를 통해 불필요한 복사 및 메모리 사용을 줄이고자 하는 것. Copy-On-Write (COW) 란? Copy-on-write (COW), sometimes referred to as implicit sharing or shadowing, is a resource-management technique used in computer programming to efficiently implement..

[Swift] Class의 성능을 향상시킬 수 있는 방법

성능에 영향을 미치는 3가지 Memory Allocation: Stack or Heap Reference Counting: No or Yes Method dispatch: Static or Dynamic (메서드를 호출할 때 메모리를 할당할 때 스택에 value type 의 특징 변수 할당 시 stack에 값 전체가 저장됨 다른 변수에 할당될 때 전체 값이 복사됨 (copy by value) -> 하나를 변경해도 다른 것에 영향 없음 Heap을 안 쓰며 따라서 Reference Counting도 필요 없음 Heap 할당의 문제 할당 시에 빈 곳을 찾고 관리하는 것은 복잡한 과정 무엇보다 그 과정이 thread safe 해야 한다는 점이 가장 큰 문제 (다른 스레드 끼리 충돌이 없어야 되기 때문에 lock..

[Swift] Optional 옵셔널이란?

Swift 언어의 안정성에서 중요한 요소 중 하나가 Optional 개념. type casting이나 nil check 등에 있어서 중요한 역할을 한다. + 종류 Optional 옵셔널이란? 값이 있을 수도 있고, 없을 수도 있다 (nil 값을 가질 수 있도록) (내부적으로는 열거형으로 처리가 되어 있음) 임시 타입이기 때문에 사용 시에 optional을 벗겨서 사용해야한다. (unwrapping) 언래핑 Unwrapping : 옵셔널로 초기 설정을 해준 값은 값이 존재하더라도 계속 Optional( ) 로 wrapping 되어져 있다. 이 optional wrapping을 벗겨주어 할당된 값을 그대로 사용할 수 있도록 해주는 것. 언래핑 하는 방법 Forced Unwrapping : ! 를 사용해서 강..

728x90
반응형