일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- NumberFormatter
- roundingMode
- human interface guidelines
- Structures and Classes
- 부트캠프
- 책후기
- 스위프트
- Navigation
- delegation
- IOS
- contentInset
- mvvm
- UIResponder
- @available
- 야곰아카데미
- xcode
- NotificationCenter
- 스타트업주니어로살아남기
- viewcontroller
- Failed to register bundle identifier
- Info.plist
- 독후감
- 아이폰
- Modality
- SWIFTUI
- SWIFT
- 독서후기
- Mock
- View Life Cycle
- Codegen
- Today
- Total
목록분류 전체보기 (144)
호댕의 iOS 개발

네트워킹 관련 코드를 작성하다보면 동기, 비동기 관련된 내용을 정말 많이 접하게 된다. 그렇다면 동기와 비동기는 어떤 차이점과 특징을 가지고 있는지 알아보자. 동기와 비동기 일단 동기로 작업을 하게 되는 경우 작업을 다른 쓰레드에 시키게 되는 경우 해당 작업이 끝날 때까지 기다리게 된다. 이렇게 동기로 작업을 하게 되는 경우 Thread1 에선 Thread2에 시킨 작업이 끝나기 전까진 다른 일처리는 불가능하다. 그렇다면 비동기는 어떻게 동작할까? 비동기에선 일을 시킨 다음 기다리지 않고 바로 다음 작업을 진행하게 된다. 따라서 네트워킹 같이 일을 하는데 시간이 많이 걸리는 작업을 처리할 때 비동기로 동작하게 하여 동시에 다른 작업을 할 수 있도록 하는 것이다. 그래서 사실 iOS에서는 동기에선 항상 일..

CPU 스케줄링의 경우 메모리에 동시에 여러 프로세스를 올리는 다중 프로그램 운영체제의 기본이다. 운영체제를 통해 CPU를 프로세스 간에 교환하면서 컴퓨터를 보다 응답성이 높고 생산성이 높게 사용하게 된다. 일단 기본적으로 어떤 프로세스가 특정 요청이 완료되기를 대기해야 하는 경우 운영체제는 CPU를 해당 프로세스로부터 회수하여 다른 프로세스에 할당하게 된다. 이런 Context Switch는 계속해서 반복되며 이런 컴퓨터 자원들은 사용되기 전 스케줄링이 되어야 한다. 따라서 CPU 스케줄링이 운영체제 설계에서 핵심적인 부분이 되는 것이다. 프로세스 실행의 경우 CPU 실행과 I/O 대기의 사이클로 구성되어 있다. CPU Burst를 통해 running 상태가 되었다가 I/O Burst를 통해 Wait..

일단 컴퓨터 시스템의 경우 네 가지 구성요소를 가지고 있다. 하드웨어 : 중앙처리장치(CPU), 메모리(RAM), 입출력 장치(I/O Device)로 구성이 되어 있음 운영체제 : 다양한 사용자를 위해 다양한 응용 프로그램 간 하드웨어 사용을 제어하고 조정한다. 즉, 다른 프로그램이 원활하게 작업을 할 수 있는 환경을 제공해주는 역할을 한다. (제어 프로그램의 역할 수행) 응용 프로그램 : 컴파일러, 웹 브라우저 등 사용자의 계산 문제를 해결하기 위해 자원이 어떻게 사용될 지를 정의함 사용자 운영체제란 운영체제는 컴퓨터에서 항상 실행되는 프로그램으로 일반적으로 커널이라 부른다. 운영체제가 하드웨어를 컨트롤하게 되며 컴퓨터의 전원을 연결했을 때 컴퓨터가 동작할 수 있도록 운영체제를 로딩해야 한다. 컴퓨터의..

프로젝트를 진행하면서 아래처럼 이미지가 그라데이션으로 보이도록 구현을 하고 싶었다. 처음에는 단순히 이미지를 편집해서 사용할까 고민했지만 앞으로 이미지가 추가되는 경우 매번 편집을 하는 것은 좋은 방향이 아니라고 판단했고 코드를 통해 그라데이션 효과를 주기로 결정했다. 그렇다면 어떻게 그라데이션을 코드를 통해 줄 수 있을까? 1️⃣ CAGradientLayer의 인스턴스를 생성 후 frame을 설정한다 이는 CAGradientLayer를 사용하면 된다. 일단 CAGradientLayer의 인스턴스를 생성하고 Layer의 frame을 그라데이션 효과를 줄 View의 bounds만큼 정해준다. class ViewController: UIViewController { @IBOutlet weak var filt..

이번에 IT 연합 동아리인 NEXTERS 21기에 지원했습니다. 지금까지 Swift를 사용하는 iOS 개발자와의 협업이 주를 이뤘기에 다른 개발자들, 디자이너들과 협업을 하고 싶었고 지원하게 됐습니다. 그렇게 지원 양식에 따라 서류를 넣게 됐고 결과는 합격! 이제 남은 전형은 면접이었습니다. 이전에 다른 직무를 지원하며 면접 경험은 꽤나 있었지만 개발자로서 면접은 처음이었기에 긴장됐습니다 😱 면접은 면접관 분 3분이 계셨고, 면접자는 저 포함해서 3분 계셨습니다. 다른 면접 후기에서 봤던 것처럼 면접관 분들은 CTO 같은 직함이 있었습니다! 제가 받은 질문은 다음과 같았습니다. 자기소개 갈등이 있는 경우 어떻게 해결하는지 오랫동안 해결하지 못했던 문제가 있는지 값타입과 참조 타입의 차이에 대해 아는가 S..

Implementing Modern Collection Views 문서를 보고 작성한 내용입니다. Apple Developer Documentation developer.apple.com 기존 CollectionView를 구현하기 위해선 UICollectionViewDataSource, UICollectionViewDelegate를 주로 사용했다. (TableView도 마찬가지이다) iOS 13.0 이후에는 UICollectionViewDiffableDataSource, UICollectionViewCompositionalLayout을 사용해서 CollectionView를 구현할 수 있다. (다만 UICollectionView.CellRegistration이 iOS 14.0부터 가능하다. 이게 뭔지는 밑..

프로젝트를 진행하면서 소수점 값이 존재하는지 확인할 필요가 있었다. 그래서 Double 타입에서 %(모듈로) 연산자를 통해 1로 나눈 나머지가 있는지 확인하려 했다. 그런데 왠걸?! 이런 에러를 만났다. '%' is unavailable: For floating point numbers use truncatingRemainder instead 사실 에러를 보면 간단하게 해결이 가능하다. %(모듈로) 연산자는 Int에만 정의가 되어 있기 때문에 Double에선 사용이 불가능했던 것이다. public static func % (lhs: Int, rhs: Int) -> Int 알고나면 진짜 간단하지만 갑자기 에러가 뜨면 당황할 수도 있기에... 그래서 다음과 같이 정의되어있는 함수 .truncatingRema..

defer... 지금까지 크게 사용할 일이 없어서, 찾아봐야지 하고 미루고 미루다 정리를 하게 됐다. 진짜 이름따라 블로그 정리도 늦춰진 것 같다.. ㅎㅎ... 그렇다면 defer는 뭘까? 일단 사전에 찾아보면 다음과 같이 나온다. defer = 미루다, 연기하다 문자 그대로 함수의 scope가 종료할 때 실행될 행동을 defer문 안에 두고 이를 가장 마지막에 사용할 수 있다. 간단한 예시를 살펴보자 func deferStatement1() { defer { print("나중에 실행하기") } print("먼저 실행하기") } deferStatement1() 기존 함수를 실행할 때에는 함수가 정의되어 있는 순서대로 호출이 되지만 defer문 안에 있는 것은 함수의 scope가 종료되는 시점에 동작하도록..