일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- Xcode
- 컴포지트패턴
- 어댑터패턴
- cocoapods
- 전략패턴
- RxSwift
- 상태패턴
- 템플릿메서드
- 디자인패턴
- ViewController
- 싱글턴패턴
- DispatchQueue
- WKWebView
- 파사드패턴
- 커맨드패턴
- 이터레이터패턴
- unowned
- 옵저버패턴
- Lifecycle
- ios
- Scenedelegate
- 데코레이터패턴
- 추상팩토리패턴
- SWIFT
- 컴파운드패턴
- 스테이트패턴
- Mobile
- 팩토리메서드패턴
- 스트래터지패턴
- 프록시패턴
- Today
- Total
목록전체 글 (65)
ios dev kangwook.

iOS에서 Library란? Xcode Target의 일부로 빌드되지 않은 코드 및 데이터 조각을 정의한 것 일종의 호출할 수 있는 클래스 및 함수들의 집합. 각 호출은 약간의 작업을 수행하고 클라이언트에게 제어권을 반환 라이브러리는 사용자가 전체적인 Application의 Flow를 만듦 Framework? 공유 라이브러리와 헤더 및 다른 리소스의 하위 디렉토리를 포함하는 번들 프레임워크는 전체적인 Application의 Flow를 스스로가 쥐고 있고, 라이브러리를 필요한 곳에서 가져다 씀 (제어의 역전) Static Library( .a) Static Library를 만들고 linker를 통해 executable file을 생성(컴파일 마지막 쯤 일어남) 이 때, static library 코드 역시..

Designated Initializer(지정 이니셜라이저) 클래스의 주요 이니셜라이저 필요에 따라 부모 클래스의 이녀설라이저를 호출할 수 있음 이니셜라이저가 정의된 클래스의 모든 프로퍼티를 초기화해야하는 임무를 갖고 있음 한 개 이상 정의해야 함 조상 클래스에서 지정 이니셜라이저가 자손 클래스의 지정 이니셜라이저 역할을 충분히 할 수 있다면, 자손 클래스는 지정 이니셜라이저를 갖지 않을 수도 있음 init(parameters) { // 초기화 구문 } Convenience Initializer(편의 이니셜라이저) 초기화를 좀 더 쉽게 도와주는 역할 내부에서 지정 이니셜라이저를 호출 지정 이니셜라이저와 달리 필수 요소가 아님 지정 이니셜라이저의 매개변수가 많아 외부에서 일일이 전달 인자를 전달하기 어렵거..

오늘은 iOS 뿐만 아니라 범용적으로 사용되는 아키텍쳐 패턴에대해서 좀 다뤄보려고한다. 많이들 쓰이는 패턴이지만 나는 iOS개발자인만큼 iOS에 중점을 두고 정리를 하려고한다! MVC Pattern(Model - View - Controller) Model : 데이터에 관한 로직 담당(데이터 값 변경 및 관리) View : 사용자에게 보여지는 화면 담당(UI) Controller : Model과 View연결(Model 값을 View에 보여줌) MVC 패턴에서 View와 Model은 절대로 서로에게 접근하면 안됨 View와 Model은 Controller만 접근할 수 있음 View에 사용자의 입력이 감지되거나 View의 변화가 생길 때 혹은 값의 변화가 있을 때? Delegate와 DataSource를 사..
Property Property는 값을 특정 클래스, 구조체, 열거형과 연결한다. Property에는 크게 3가지 종류가 있다! Stored Property(저장 프로퍼티) Computed Property(연산 프로퍼티) Type Property(타입 프로퍼티) Stored Property 상수와 변수값을 인스턴스의 일부로 저장하고, 클래스와 구조체에서만 사용한다. 클래스의 일부가 되는 상수(Constant) / 변수(Variable)라고 할 수 있겠다. Stored Property(struct) struct FixedLengthRange { var firstValue: Int let length: Int } var rangeOfThreeItems = FixedLength(firstValue: 0, le..
Semaphore는 쉽게 말하자면 비동기 구문을 동기화해주기 위한 객체라고 할 수 있다. 동기화가 되면 프로그램은 비동기 구문의 실행을 기다려주기 때문에, 비동기 구문을 사용하더라도 규칙적이고 정확한 프로그램의 개발이 가능하다. 초기값을 0으로 가지는 semaphore 생성하는 구문 value 값은 음수가 되면 안됨 let semaphore = DispatchSemaphore(value: 0) semaphore를 대기시키는 구문 semaphore.wait() value 값을 +1 해주는 구문 초기값이 0이었던 semaphore는 signal()함수를 통해 value = 1이 되므로 대기중에서 깨어나게 된다. semaphore.signal() 예시 Semaphore를 이용한 비동기 구문의 동기화는 data..

주로 동기 / 비동기 프로그래밍을 하기 위해 DispatchQueue를 많이 쓰지만 실제로 DispatchQueue는 작업 항목의 실행을 관리하는 클래스 GCD(Grand Central Dispatch) GCD란 멀티코어 시스템에서 동시성 실행을 제공하는 프로그래밍 언어 요소, 런타임 라이브러리 등을 뜻함 즉, GCD의 개념으로 동시성 프로그래밍을 지원하는 Swift의 API(GCD에서 사용하는 Queue)가 Dispatch Queue Serial Dispatch Queue 이 작업이 끝나면 다음 작업을 순차적으로 실행하는 직렬 형태의 Queue 하나의 작업을 실행하고 그 실행이 끝날 때까지 대기열에 있는 다른 작업을 잠시 미루고 있다가 직전의 작업이 끝나면 실행 Concurrent Dispatch Qu..
Thread Safety를 구현하는 방법 Thread Safety란 동시에 여러 스레드에서 인스턴스에 접근할 때 프로그램의 실행에 문제가 없다는 것을 뜻함 GCD 현재 iOS개발에서 주로 사용하는 동시성 프로그래밍 API는 GCD(Grand Central Dispatch) GCD를 사용하면 async로 작업을 수행하고 보통 탈출 클로저를 이용한 completion handler를 통해 작업이 끝났을 경우에 대해 처리 Swift Concurrency WWDC2021에서 새로 소개된 동시성 프로그래밍 API async / await 키워드를 이용해 비동기 태스크 종료 후 코드를 작성할 수 있음 actor를 이용해서 작업에 대한 동시성 코드를 안전하게 공유할 수 있음(iOS 14 이상) GCD vs. Swif..

Split View, Slide Over에 대한 이슈를 처리하다 보니 Scene에 대한 이해가 필요했다. 뿐만 아니라 Scene의 각 Life Cycle과 적용되는 메서드들 등에 대해서 정리할 필요가 있다고 느껴서 Scene에 대해 다뤄보려고 한다. Scene iOS13부터 나온 개념으로 앱 UI의 여러 인스턴스를 동시에 관리하고 리소스를 UI의 적절한 인스턴스로 지정하는 역할을 한다. 즉, 한 앱에도 여러 인스턴스가 있을 수 있고, 여러 인스턴스들이 동시에 보여질 수 있다는 것 예) 다음과 같이 메모앱을 두 Scene으로 분할하여 사용할 수 있음 앱의 각 인스턴스는 UIWindowScene 객체로 관리되고, 하나의 Scene은 앱 인스턴스의 UI를 표현하기 위해 window, viewcontroller..