본문 바로가기

iOS25

[iOS] Under the hood: SwiftUI (번역 및 정리) 얼마전에 WWDC 관련 영상 보다가스유 관련 블로그 글도 추천받았는데요.그 중 하나가 Medium에 있는 Under the hood: SwiftUI 였습니다.https://medium.com/ios-gems/under-the-hood-swiftui-93ae7f0ae830 Under the hood는 그 이면의, 겉으로는 드러나지 않은 내부 동작을 말하는데요,이 블로그에서는 SwiftUI가 내부적으로 어떻게 동작하는지,9가지 주제로 이야기 하고 있습니다. (인터뷰 형식) 스유에 대해서 조금만 알고 있어도 어느정도 이해할 수 있는 수준의 내용이었구요.제가 이해한 언어로 풀어서 정리를 해보겠습니다.   인트로에서는 우선 SwiftUI는 "UI를 만드는 간단한, 선언적 프레임워크"라고 소개합니다.하지만 그 내부.. 2025. 4. 4.
[iOS] 프로토콜 지향 프로그래밍 (POP) 프로토콜특정 역할을 하기 위한 메서드, 프로퍼티, 기타 요구사항 등의 청사진을 정의한 것구조체, 클래스, 열거형은 프로토콜을 채택해서 프로토콜의 요구사항을 구현함으로써 프로토콜을 준수하며, 트로토콜이 정의한 특정 기능을 수행할 수 있음. 프로토콜 요구사항프로토콜을 채택한 타입이 특정 기능을 수행하기 위해 필요한 프로퍼티나 메서드와 같은 기능.프로퍼티 요구프로토콜을 채택한 타입이 어떤 프로퍼티를 구현해야하는지 요구하는 것프로퍼티의 이름과 타입만 준수하면 됨. (연산 프로퍼티 or 저장 프로퍼티 무관)프로토콜이 해당 프로퍼티를 읽기 전용으로 할지, 읽고 쓰기가 모두 가능하게 할지 정함.타입 프로퍼티 (static 변수)를 요구하려면 static 키워드 사용 (class, static 구분없이)메서드 요구인스.. 2025. 4. 2.
[iOS] Network Calls (네트워크 호출) 오늘은 iOS에서 네트워크 호출 (Network Calls) 하기에 대해서 간단한 예제 코드와 함께 공부했다. 네트워크 호출을 해야하는 이유는iOS 앱에서 사용자에게 데이터를 보여주기 위해서는 서버에 있는 데이터를 가져와서보기 좋게 유저에게 보여주어야 하기 때문이다. ☁️ (서버) --- 💾 (데이터) --> 📱(아이폰) 바로 여기서 서버에서 데이터를 가져오기에서 필요한 것이네트워크 호출이다. 우선, 그럼 그 데이터가 어떤 것인지 잠시 설명하자면,주로 요즘 우리가 서버에서 받아오는 데이터의 형태는JSON (Java Script Object Notation?) 이다.  JSON은 이렇게 key와 value로 이루어진 데이터의 형식이다.대부분 문자열 형태이기 때문에 ""로 감싸져있다.데이터가 예를 들어 .. 2025. 3. 28.
[iOS] View Life Cycle (UIKit) viewDidLoad()뷰가 메모리에 생성됐을 때 호출됨 (최초 1번)뷰에 속한 내용들이 모두 메모리에 로드된 후에 호출되기 때문에, viewdidload를 실행할 때는 outlet 과 같은 변수들에 모두 값이 채워져있음이 보장됨viewWillAppear()뷰가 App의 뷰 계층에 추가될 때 호출됨 (스크린에 뷰가 뜨기 바로 직전 → 뷰가 뜰 때 마다 호출)*주의점: 뷰가 처음 생성될 때만 viewDidLoad()가 실행되기 때문에, 만약 A뷰를 띄우고 B뷰로 넘어갔다가 다시 A뷰로 돌아오는 경우 viewDidLoad()는 실행되지 않지만 viewWillAppear()는 실행됨. 따라서 화면이 뜰 때 마다 실행되어야 하는 코드는 viewWillAppear()에 속해야한다.viewDidAppear()뷰가 .. 2025. 3. 28.
[iOS] Delegate & Protocol Delegate & Protocol patterndelegate와 protocol 패턴은 one-to-one communication pattern이다.여기서 one to one 이 의미하는 건 흔한 예시로는 뷰와 뷰 사이의 통신을 말함.⇒ 뷰 사이의 통신을 delegate와 protocol로 구현할 수 있다.  What is Delegate?Delegate: 위임하다delegate pattern은 A객체가 특정 task를 B객체에게 위임(delegate)할 때 사용한다. 여기에서 등장하는 비유가 Boss와 Intern의 관계다.delegate 패턴에서 위임받는 객체 입장(Intern)에서는 무슨 일을, 언제할지 명령이 떨어지기를 기다리고 있는 것.위임하는 객체 입장(Boss)에서는 언제 그 일을 시킬지.. 2025. 3. 26.
[iOS+@] Concurrency (동시성) Concurrency(동시성)은 여러가지 일을 동시에 하는 것을 말함. (multi-core CPU가 이를 가능하게 함)여러가지 task = 스레드를 의미하기도 하는데, 주로 메인스레드와 백그라운드 스레드를 구분하여 사용하면서메인스레드는 혼잡하지 않게 빠르게 실행될 수 있도록 유지하고, 오래 걸리는 일은 백그라운드 스레드에 배치하는 식으로 사용한다.이를 통해서, 사용자가 보는 UI 작업을 모두 메인 스레드에서 실행하게 해서 반응성이 좋게 유지한다. 🚙                  🚗                 🚕— — —  main thread  — — — 🚙 🚕  🚗  🚙  🚕  🚗  🚙  🚕  🚗— — background thread — —  스레드 생성, 관리를 위한 API.. 2025. 3. 25.
[iOS+@] Dependency Injection (의존성 주입) Dependency Injection이란어떤 object에게 그것이 필요로 하는 것, 객체 즉 dependency를 주는 것(Give)그 object가 다른 객체들(dependencies)을 직접 만들게 하는 게 아니라! 유의어들: initializer injection = constructor injection, property injection, method injection(이들은 Dependency injection을 구현하는 방법들이라고 합니다.) 이해하기 쉬운 예제 코드class ParentView { let networkManager = NetworkManager() let bag = Bag() let childView: ChildView = ChildView()}class ChildVie.. 2025. 3. 24.
[Swift] 순환참조와 strong, weak, unowned 순환참조 문제변수나 상수가 참조타입의 인스턴스를 참조할 경우 따로 키워드를 지정하지 않으면 strong 즉 강한 참조를 하게 되는데, 참조타입을 증가시키는 것도 모두 이 강한참조일 때만 발생한다.이때, 두 클래스가 서로를 참조하는 프로퍼티를 모두 갖는다면, 힙에서 두 인스턴스 모두 영원히 해제되지 않는 상황이 발생한다.A의 프로퍼티가 B 강한참조, B의 프로퍼티가 A 강한참조→ B RC: 2 (생성될때, A에의해 참조될때)→ A RC: 2 (생성될때, B에의해 참조될때)A = nil, B = nil→ B RC: 1 (nil로 인한 -1, A가 메모리 상에 있으므로 A에 의해 증가한 참조횟수 1이 그대로 남아있음)→ A RC: 1 (nil로 인한 -1, 그치만 B에의해 증가된 참조횟수 1이 남아있어서 메모.. 2025. 3. 14.
[Swift] 메모리 관리 기법 (ARC) ARC (Automatic Reference Counting)힙에 할당되는 참조 타입을 해당 값이 더 이상 필요하지 않을 때, 자동으로 메모리에서 해제해주는 기법이를 통해 개발자가 직접 참조타입에 메모리 할당, 해제를 해주지 않아도 자동으로 메모리 할당과 해제가 이루어져 메모리 누수를 막을 수 있다. RC(Reference Count)를 이용한 메모리 관리 기법으로, 힙에 할당되는 인스턴스마다 RC를 갖고 있음.해당 인스턴스가 참조되고 있는 횟수를 나타내며, 0이 되면 자동으로 해제 된다.참조 횟수(RC)를 증가시키는 경우인스턴스를 새로 생성할 때 (ex. 클래스 인스턴스 생성 → 변수에 대입)기존 인스턴스를 다른 변수에 새로 대입할 때참조 횟수(RC)를 감소시키는 경우인스턴스를 가리키던(참조하던) 변수.. 2025. 3. 14.
728x90