[iOS] Delegate에 AnyObject 채택은 필수일까?
·
iOS/개념 & 개발
서론 언제나 그렇듯 아래와 같이 Delegate를 만들고 있었습니다. protocol OOODelegate: AnyObject { func ... } 근데 아차! 싶었습니다. Delegate에 왜 AnyObject를 붙여야 하지?라는 생각을 따로 안 해봤더라고요. 어렴풋이 알고는 있었지만 따로 생각을 해보거나 글로 정리한 적이 없어서 이렇게 포스팅하기로 결정했습니다. iOS에서는 언제 Delegate를 쓸까? Delegate는 Delegate를 채택하는 누군가에게 나의 행위를 위임합니다. Delegate를 사용하는 곳에서는 메서드를 호출만 하고, Delegate를 채택하는 곳에서 메서드를 구현하는 것입니다. iOS에서는 주로 유저 이벤트에 따른 행위를 구현할 때 Delegate를 사용합니다. 예를 들어,..
[iOS] FPS 측정하기 - CADisplayLink
·
iOS/개념 & 개발
CADisplayLink CADisplayLink는 화면의 업데이트 주기(VSYNC 주기)로 동작하는 타이머 객체입니다. CADisplayLink를 사용하면 디스플레이 주사율에 맞춰서 특정 함수를 호출시킬 수 있는데요. 애니메이션과 그래픽 렌더링을 정확한 타이밍에 수행할 수 있어서 더 부드럽고, 최적화할 수 있습니다. 또한, Actual Frame Rates와 Frames Per Second를 측정할 수 있습니다. Actual Frame Rates는 기기가 출력하는 초당 프레임 수를, FPS는 실제로 표시되는 프레임 수를 나타냅니다. 마지막으로 preferredFrameRateRange를 설정하여 프레임 수를 제어할 수 있습니다. OS가 알아서 최적화를 하지만 강제할 필요가 있는 경우 preferredF..
[Swift] NSCoding과 Codable 차이점 (상속 관계 유지하기)
·
Swift/개념 & 응용
NSCoding과 Codable Codable이 나오면서 NSCoding은 옛날의 그것으로 생각되었습니다. 그런데 NSCoding만이 할 수 있는 일이 있었습니다. 바로 상속 관계를 유지해서 저장하는 것입니다. Shape 부모 클래스를 상속하는 두 개의 자식 클래스가 있습니다. class Plane { var shapes: [Shape] init(shapes: [Shape]) { self.shapes = shapes } func display() { for shape in shapes { print("\(type(of: shape)): \(shape.description)") } } } let shapes: [Shape] = [ Rect(point: .init(x: 10, y: 10), size: .in..
[회고] 네이버 부스트캠프 웹・모바일 8기 멤버십 3주 차 회고 & 기술적 고민
·
경험 회고/네이버 부스트캠프 웹・모바일 8기
서론 이번 3주 차는 정말 너무너무 힘들고 어려웠습니다. 다형성이 어렵다고 생각은 했는데 이 정도일 줄은... 이번 회고도 쓸까 말까 고민했는데 짧게라도 남기기 위해 작성합니다. 이왕 시작한 거 빼먹으면 아쉬우니까요. 프로토콜과 다형성 Swift의 POP와 객체지향 OOP 사이에서 고민하는 주차였습니다. 특히 프로토콜에 프로퍼티를 넣는 것은 객체지향에 어긋나느냐? 하는 주제로 다른 캠퍼들과 의견을 나눴던 거 같아요. 1. Swift의 프로토콜에는 프로퍼티를 넣어도 자연스럽다. 프로토콜에 프로퍼티를 넣지 않으면 getter/setter 메서드를 넣어야 하는데 이건 Swift 스럽지 않다. 2. 프로토콜에 프로퍼티를 넣으면 객체지향의 캡슐화, 은닉화가 약해진다. 따라서 최대한 프로퍼티를 넣지 말아야 한다. ..
[Swift] 구조체와 클래스의 Property Observer 동작 차이 (짧은글)
·
Swift/개념 & 응용
Property Observer Property observers observe and respond to changes in a property’s value. Property observers are called every time a property’s value is set, even if the new value is the same as the property’s current value. Property Observer는 프로퍼티의 "값"이 변하면 호출됩니다. 여기서 "값"의 의미때문에 구조체와 클래스의 프로퍼티 옵저버 동작 차이가 발생합니다. struct StructA { var value: Int = 0 } class ClassA { var value: Int = 0 } var struc..
[Swift] OptionSet 알아보기
·
Swift/개념 & 응용
OptionSet OptionSet은 비트 마스크를 이용해 여러 옵션을 다룰 때 채택하는 프로토콜입니다. 프로토콜이지만 이름에 Set이 붙은 거처럼 분류도 Collections로 되어 있고, intersection, union 등 집합 메서드도 사용할 수 있습니다. (이건 아래에서 더 자세히 알아볼게요.) OptionSet이 낯설 수 있는데요. 생각보다 많은 곳에서 사용됩니다. 대표적으로 UIView.AnimationOptions, UIView.AutoresizingMask가 있습니다. OptionSet 사용법 struct ShippingOptions: OptionSet { let rawValue: Int static let nextDay = ShippingOptions(rawValue: 1
[iOS] WWDC21 테크톡 - Find and fix hitches in the commit phase
·
WWDC/iOS
서론 WWDC21 테크톡 - Find and fix hitches in the commit phase에서는 Commit phase의 hitch를 찾고 고치는 내용을 다룹니다. hitch와 commit phase가 무엇인지는 WWDC21 테크톡 - Explore UI animation hitches and the render loop를 확인해 주세요. What is a Commit Transaction 터치 이벤트를 받으면 UI를 업데이트하게 됩니다. 시스템은 레이아웃이나 디스플레이 변경이 필요한 서브 뷰들을 기록합니다. 그리고 다음 Commit phase에서 시스템에 의해 draw와 layoutSubviews가 호출되면서 업데이트 됩니다. Commit Transaction은 4단계로 이루어집니다. lay..
[iOS] WWDC21 테크톡 - Explore UI animation hitches and the render loop
·
WWDC/iOS
서론 WWDC21 테크톡 - Explore UI animation hitches and the render loop에서는 hitch와 render loop가 무엇인지 알아보고, hitch의 종류, hitch를 측정하는 방법에 대해 알아봅니다. 이번 포스팅에서는 측정하는 방법까지만 다루고, 다음 포스팅인 Find and fix hitches in the commit phase에서 hitch를 제거하는 방법을 알아보겠습니다. What is a hitch 앱에서 애니메이션은 사용자와 앱 사이의 시각적 연결을 도와줍니다. 예를 들어, 사용자가 손가락을 화면을 쓸어넘기면 화면이 변해야 합니다. hitch는 예상보다 늦게 화면에 나타나는 프레임으로, 다음 프레임의 생성이 늦어져 애니메이션이 끊기는 시간입니다. hi..
[iOS] Alert 개선 과정 단계별로 살펴보기
·
iOS/개념 & 개발
서론UIAlertController는 보일러 플레이트가 생기기 쉽습니다.UIAlertController 생성UIAlertAction 생성present위 세 가지 로직이 반복적으로 사용되기 때문입니다. 메서드로 분리할지라도 UIAlertAction 생성에 중복 코드가 생기고, 그게 아니라면 메서드 파라미터가 많아집니다. 이번에는 Wrapper를 사용해 선언형 구조로 Alert를 깔끔하게 정리해 보겠습니다. 많이 고민하며 진행했지만 잘못된 부분이 있을 수 있습니다. 댓글로 피드백 꼭 부탁드립니다. 전체 코드는 아래 링크에서 확인 가능합니다. https://github.com/jeongju9216/SwiftPractice/tree/main/ExampleAlertWrapper/ExampleAlertWrapper..
[Swift] Equatable의 Synthesized Conformance 분석
·
Swift/개념 & 응용
서론 구조체와 클래스의 프로토콜 자동 준수 메커니즘 (w. ChatGPT)에서 Synthesized Conformance를 가볍게 다뤘습니다. 이번 포스팅에서는 SIL, CPP 코드를 분석해 Equatable의 Synthesized Conformance가 진행되는 과정을 알아보겠습니다. Equatable Equatable은 == static 메서드를 준수해야 하는 프로토콜로 == 연산자의 좌변과 우변을 비교해서 같은지 확인해 주는 역할입니다. 그리고 Synthesized Conformance를 지원하는 프로토콜 중 하나죠. Equatable은 아래 상황에서 Synthesized Conformance를 지원합니다. 구조체가 Equatable을 준수하는 저장 프로퍼티만 가지고 있는 경우 열거형의 모든 케이스..
유정주
'SWIFT' 태그의 글 목록 (3 Page)