적당한 고통은 희열이다

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

반응형

Swift iOS 앱 개발 169

[Swift] POP?

Swift 언어의 큰 특징 중 하나가 바로 프로토콜 지향 언어라는 것. 객체 지향 언어들은 공통 기능을 모듈화하기 위해 class의 상속을 이용하지만 Swift에서는 프로토콜을 활용하여 상속이 불가능한 struct enum 타입에서도 공통 기능을 모듈화하여 사용할 수 있도록 하였다. Apple은 2015년 9월, WWDC에서 Swift 2.0을 발표하면서 Swift는 프로토콜 지향 언어(Protocol-Oriented Language)라고 발표했다. 객체 지향 프로그래밍(Object Oriented Programming, OOP) 패러다임에 기반을 둔 언어들은 class의 상속을 사용해 해당 타입이 가지는 공통적인 기능을 모듈화해 구현한다. 하지만 class와 같은 참조 타입의 경우 다중 스레드 환경에서..

[Swift] Hashable이란? + Equatable 상속해야하는 이유?

Hashable 프로토콜을 준수하는 모든 인스턴스는 hashValue라는 정수형 프로퍼티를 갖고 있으며 이 값은 각각의 인스턴스를 식별하는 값이 된다. 즉 인스턴스끼리 같은지 다른지 비교해야하므로 Equatable 상속이 필요함 Set 또는 Dictionary의 Key로 hashable을 준수하는 모든 타입을 사용할 수 있음. 반드시 하나만 존재해야하는 딕셔너리의 키 값이나 중복된 값은 허용하지 않는 자료구조인 세트 public protocol Hashable : Equatable { var hashValue: Int { get } //deprecated func hash(into hasher: inout Hasher) } 해시를 사용하면 O(1)의 시간복잡도를 가질 수 있는 이유..? Hashable이..

[Swift] protocol 프로토콜이란?

프로토콜이란 어떤 기능을 구현하기 위해 필요한 것들을 모아놓은 약속이라고 할 수 있다. 프로토콜에서는 해당 기능을 구현하기 위해 사용되어야 할 변수 / 메서드의 선언만 가능하며 로직을 넣을 수는 없다. 프로토콜에서 내부 기능까지 구현을 하고 싶다면 extension 으로 로직을 구현해 프로토콜을 확장하여 사용할 수도 있다. 또한 프로토콜을 채택하는 곳에서 generic 타입을 이용하고 싶다면 associatedtype 키워드를 사용하여 선언을해 줄 수 있다. + 이렇게 프롤토콜을 활용하면 class 뿐 아니라 상속이 되지 않는 enum, struct 에서도 공통 기능을 모듈화하여 사용할 수 있다는 장점 Protocol 이란? - A protocol defines a blueprint of methods,..

[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는 일을 시킬 뿐, 어떻게 처리해야 하는지 일의 처리 방법은 그 일을 수행하는 객체에 구현. 어떤 일을 해야 하는지 미리 정해놓기만 하고, 처리를 할 때 상황에 맞는 코드를 작성하면 된다. 예를 들어 동일한 작업인데도 불구하고 객체마다 다른 내용을 처리해야할 때, 프로토콜에는 어떤 일을 해야 하는지 미리 정해놓기만..

[iOS] Bounds와 Frame의 차이점

Frame은 상위뷰 기준, Bounds는 자기 자신을 기준으로 좌표를 나타낸다. Frame : 상위뷰의 좌표 시스템에서 뷰의 위치와 크기를 나타냄 Bounds : 자신의 좌표 시스템에서 뷰의 위치와 크기를 나타냄 frame은 UIView의 위치나 크기를 설정할 때 사용한다. 스토리보드에서 우측에 X좌표와 Y좌표가 frame의 좌표. bounds는 View의 크기를 알고 싶거나 View내부에 그림을 그릴 때 사용한다.

728x90
반응형