일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- state
- 달력
- CS
- combine
- firebase
- 최적화
- arkit
- Network
- 접근성제어
- UIKit
- avsession
- ios
- dataflow
- auth
- Concurrency
- withAnimation
- authentication
- view
- stateobject
- gesture
- Performance
- GCD
- toolbarvisibility
- RxSwift
- 네트워크
- iphone
- Animation
- SwiftUI
- WWDC
- swift
- Today
- Total
목록전체 글 (56)
XLOG

취업을 준비하고 있는 요즘.... 계속 공부했던 내용을 블로그에 정리하거나, 새롭게 공부할 내용이 보이면 다시 정리의 반복 최근 카카오뱅크 개밸자 채용 공지를 보면서 Modular Architecture 란 것을 알게 되었다. (이렇게 기업 채용공고를 보다 보면 현업에서 관심 있어하는 기술들이 중복되는 것이 많다... 그럼 그걸 공부해보는 것이 요즘 나의 공부 방법) 일단 모듈러 아키텍쳐는 무엇일까? Modular architecture is based on the design and use of systems composed of separate repetitive elements (standard units), which are similar in size, shape and functional na..

작년 애플아카데미에서 프로젝트를 진행하면서 MVC, MVVM 아키텍쳐를 채택하고 자연스럽게 Model을 만들었다. Model을 만들었을 때 모델은 클래스로 하느냐, 구조체로 하느냐에 대한 논의를 많이 했었다. 그 당시 구조체는 값, 클래스는 참조 이렇게 단순하게만 생각했다. 그래서 당시 멘토 비비에게 물어봤더니 WWDC16 의 Understanding Swift Performance 를 추천해줬었다. 영상에서 처음 Struct 와 Class 가 메모리에 어떻게 할당하는지를 보여준다. Struct => Stack Class => Heap Stack 메모리는 push 와 pop 으로 동작하는 심플한 구조로 포인터는 맨 마지막을 가르키며 간단하게 동작을 한다. 하지만 힙은...? 사용되지 않는 메모리 공간을 ..

UIKit 에서 UIView 에 cornerRadius 를 주기 위해선 layer 에 속성값을 주고 clipToBound 를 해준다. 마치 View 를 Layer로 자르는 작업을 하는 듯... 그렇다면 이 Layer 는 무엇일까? CALayer 타입이다. CA 는 CoreAnimation 을 뜻한다. UIKit의 Core Animation 은 그래픽렌더링 및 애니메이션 인프라라고 한다. 그리고 Layer 는 우리의 View 가 Core Animation에서 작동하도록 만들어 주는 요소인 것 같다. 왜 UIKit은 Core Animation을 사용할까? 우리의 UI 는 단순히 view를 보여주기만 하는 것이 아닌 사용자와의 인터랙션도 일어난다. 다들 알고 있겠지만 main thread 는 UI를 담당하고 ..

작년에 SwiftUI를 공부하면서 캘린더를 만들어야 하는 상황이 있었다. 단순히 버튼을 눌러 값을 변화시키는 것이라면 조금은 간단할 수 있지만, 기본 제공 달력 처럼 Scroll Animation 효과가 있어야 한다. 기본적인 Infinity Scroll의 경우 한 방향으로 지속적으로 작동, 값을 추가만 하면 된다. 하지만 달력의 경우 좌, 우 즉 값이 추가되거나 감소되거나 해야한다. 무작정 사람이 스크롤 할 만한 범위의 값을 불러와서 만들기는 싫었다. 내가 생각한 아이디어는 3주치의 배열을 계속해서 바꿔주는 것이다. Paging을 사용하게 되면 쉽게 될 줄 알았지만 값의 변화에 따른 View의 재생성되는 과정이 매끄럽지 못했다. 그 당시 생각할 수 있었던 아이디어는 HStack 의 특성을 이용하여 of..

작년 Apple Developer Academy 에서 iOS 에 대해 처음 공부를 했다. 마지막 프로젝트에서 팀원들과 SwiftUI 를 쓸 것이냐? UIKit을 쓸 것이냐 에 대한 이야기를 나눴었다. 큰 이견없었다. 다들 현업에서 UIKit 을 쓰고 있으니, 당장 1~2년 안에 취업을 할 생각을 가지고 있다면 UIKit 을 하는게 좋겠다 란 얘기가 나와서 UIKit을 썻었다. 나의 경우엔 이전 프로젝트에서 UIKit을 거의 안써봤기에 UIKit을 써보고 싶다는 생각을 했었기에 좋았다. 하지만 요즘 혼자 공부를 하면서 저런 이유말고, 왜 UIKit인가? 왜 SwiftUI인가? 에 대한 이유를 찾게 됐다. 그렇다면 SwiftUI 는 뭘까? wwdc19 SwiftUI essentials 를 보면 좋은 UI를 ..

https://yagomacademy.notion.site/iOS-2-3f670cc9788f4384b000bfe940447d59 원티드 프리온보딩 챌린지 iOS 2차과정 사전과제 - 사전과제는 자신의 GitHub의 공개 저장소에 작성하여 링크를 전달주세요. [제출 링크] - 사전 과제는 챌린지를 준비하며 스스로의 학습 수준을 점검하기 위한 용도입니다. - 학습 커리큘럼은 사 yagomacademy.notion.site 커리어 전환을 위해 작년 Apple Developer Academy 1기를 수료 후, 취업 준비를 하는도중 원티드에서 프리온보딩 iOS 챌린지가 열린다는 소식을 들었다. 참가신청을 하려고 했더니 동시성 프로그래밍 관련 과제가 있었다. 과제는 GCD 를 이용하여 이미지를 불러오는 것이었다. ..

우리는 onAppear 와 같은 sync context 내에서 비동기 함수를 실행하고 싶을 수 있다. 하지만 사용하려고 하면 error 가 발생을 한다. 이러한 에러를 해결하기 위해선 sync 세계와 async 세계를 연결해줄 다리역할을 하는 것이 필요하다. 그것은 바로 Task 이다. wwdc21 Meet async/await in Swift 에서 말하길 Task 를 만나면 가용한 thread 에 작업을 할당해 준다고 한다. 공식문서에서도 비동기작업 유닛이라고 나온다. 예시코드 참고 - WWDC21 Meet Async/await in Swift - 공식문서

Async/await 은 concurrency programming 을 위한 swift 5.5 에 나온 기능이다. 기존에는 비동기 프로그래밍을 위해 GCD를 사용하며 completion handler를 많이 사용했다. 하지만 여기에 큰 문제점이 있다. thread explosion, deadlock, 가독성 등 개발자들은 조금 더 쉽고 안전하게 비동기프로그래밍을 하길 원한다. 그래서 채택하게 된 것이 async/await 이다. 우선 wwdc 영상에 나온 예시 코드를 먼저 살펴보자. 우선 위에 코드는 기존 completion handler 를 사용한 방법이다. wwdc21 Meet async/await in Swift 영상에서 나온 코드인데, 설명 중에 guard let ~ else { return } ..

GCD ( Grand Central Dispatch )는 다중 코어 프로세서 및 기타 대칭 다중 처리 시스템이 있는 시스템에 대한 응용 프로그램 지원을 최적화하기 위해 Apple Inc.에서 개발한 기술입니다. 이 간단하게 우리의 핸드폰, 컴퓨터는 멀티 프로세스, 멀티 스레드를 지원한다. 자연스럽게 웹과 앱에서도 다중 처리 시스템이 도입되게 된다. iOS로 설명을 하자면 iOS서는 메인쓰레드를 통해 UI 업데이트를 진행하고 있다. 하지만 UI 를 업데이트를 할때 연산, 데이터 다운로드 등의 네트워킹 작업들이 함께 동반되어야 한다. 하지만 UI 업데이트를 위해 필요한 작업들은 우리 UI의 반응을 멈추게 하면 안된다. 이것은 애플이 강조하는 바이다. ( 참고, Swift 에서는 Thread pool 관리를 ..

SystemCall 이란, 서로 다른 프로세스 간의 호출을 의미한다. 간단하게 예를 들자면, 우리는 파일을 HDD, SSD 등에 저장하고, 외부장치를 연결하고 사용하는 것들을 모두 OS에서 컨트롤을 하게 된다. 키보드 입력, 마우스 클릭등. 우리가 사용하는 프로그램(프로세스)는 많은 라이브러리가 있고 그 라이브러리의 함수들로 이루어져 있는데, 거기에는 system call 함수가 호출이 되도록 되어 있다. system call 함수가 호출이 되면 현재 사용중이도 process는 wait 상태로 빠지게 되고, OS의 프로세스가 동작을 하게 되면서, system call 함수에 의해 호출 된 함수의 결과값을 syscall 함수에 리턴을 해주어 받은 데이터를 사용하여 프로그램이 다시 진행이 되게 된다.