적당한 고통은 희열이다

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

반응형

Swift iOS 앱 개발/Swift 86

[Swift] 객체 간 소통 및 이벤트 전달 Delegate / NotificationCenter / KVO

객체 간의 소통할 때, 결합도를 낮추고 독립적으로 작동할 수 있도록 이벤트 전달을 도와주는 방법들. delegate가 명시적으로 쓸 수 있어 좋음. 작성할 코드가 많아서 구현이 상대적으로 어렵다. NotificationCenter는 사용이 간편하고, 다수의 객체들에게 동시에 이벤트 발생을 알려주기에 편리하지만 Callback techniques in Cocoa - delegation - NotificationCenter - Key-Value Observing 세 가지 패턴의 등장 배경 to allow communication between our controllers, without the need to have excessive coupling. 하나의 객체가 다른 객체와 소통은 하지만 묶이기(coup..

[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..

728x90
반응형