Starbucks Caramel Frappuccino
본문 바로가기
  • 그래 그렇게 조금씩

SWIFT7

closure, @escaping, completionHandler 콜백함수 클로저가 무엇인지? @escaping이 무엇인지? completionHandler/콜백 함수가 무엇인지? 정리하는 시간. 처음 배웠을 때 너무 복잡하고 어렵게 느껴져서 스스로도 정리해 보고 누군가에게 조금이라도 이해에 도움이 되기를 바라며.. 클로저(closure) close는 '무언가를 닫다' 라는 의미이다. 클로저도 그럼 뭘 닫는건가? 클로저는 쉽게 말하면 그냥 '함수'라고 볼 수 있다. input -> output, x -> y 마법상자로 비유를 하는 그 함수. { ... } 형태로 되어 있고 중괄호를 사용한다. (이를 코드 블록이라고 한다.) closure라는 이름에는 { ... } 코드블록이 외부에 있는 변수/상수를 닫아서 가져올 수 있다는 개념이 반영되어 있다. -> 클로저는 외부의 변수/상수.. 2023. 5. 29.
DispatchQueue / GCD / multi threading / 스레드 / 비동기 코드를 짜다 보면 DispatchQueue를 되게 자주 만나고 사용한다. 그런데 이것이 무엇인지에 대한 개념과 이해가 부족했기 때문에 좀 정리하고 넘어가보고자 한다. 스레드(Thread) 스레드는 동시에 실행되는 작업의 단위이다. 각각의 스레드는 독립적으로 실행되고, '코드의 흐름을 병렬로 실행'할 수 있다. -> 만약 스레드가 1개만 있다면 코드의 순서대로 하나씩 위에서 아래로 쫙 실행해야 하는데, 이걸 스레드에 쫙 나눠줘서 동시에 병렬적으로 실행할 수 있다는 것이다. 메인 스레드(Main Thread) iOS 앱은 기본적으로는 메인 스레드(Main Thread)라는 단일 스레드 환경에서 동작한다. 메인 스레드의 역할은 UI 업데이트, 사용자 입력 처리, 애니메이션, 레이아웃 계산 등이 있다. 즉 사용.. 2023. 5. 26.
DequeueReusableCell ?? 테이블뷰와 셀 TableView를 활용하면 Cell의 개념은 필수이다. TableView 구현을 위해서는 ViewController에서 확장을 통해 UITableViewdataSource, UITableViewDelegate 두 프로토콜을 채택하는 것이 일반적이다. 우선 셋업단계에서 TableView에 Cell을 identifier를 통해 Register 한 후에 tableView cellForRowAt 메서드에서 셀에 대한 설정들을 해준다. 여기서 셀 인스턴스를 생성할 때, 아래와 같은 메서드를 통하는데 정확히 어떤 메서드인지 궁금해졌다. let cell = tableView.dequeueReusableCell(withIdentifier: "identifier", for: IndexPath) as! MyCell de.. 2023. 2. 28.
Could not insert new outlet connection (.xib) Cocoa Touch Class를 통해 새 파일을 생성할 때 아래와 같이 Also create XIB file 체크박스를 찾을 수 있다. 저걸 체크하고 파일을 생성하면 스토리보드에 컴포넌트를 올렸던 것처럼 그 컴포넌트 하나가 똑 화면에 보이게 된다.( 아래는 UITableViewCell) 모든 컴포넌트를 XIB를 통해 관리하기 보다는, 스토리보드, 코드베이스와 적절히 섞어서 활용하는 경우가 많다고 한다. 예전에는 .nib파일이어서 닙 닙 했다는데.. 이게 xib로 바뀐거 같다. 그래서 뭐가 다른지 알아봤더니.. (출처 : https://zeddios.tistory.com/298) nib은 (NeXT Interface Builder)의 약자라고 해요. xib는(Xml Interface Builder) xi.. 2023. 2. 27.
핫한 ChatGPT와 함께 공부를 해보자. 맞춤법 검사를 원하는 단어나 문장을 입력해 주세요. 비동기(async) 프로그래밍 공부를 하다가 경쟁 상태 Race Condition, 혹은 Thread Safe 하지 않다는 개념을 배웠다. (feat. 교착상태 DeadLock - 2개 이상의 스레드가 서로 배타적인 메모리의 사용(서로 락을 걸고 점유)으로 인해 메서드의 작업이 종료되지 못해 멈춰버리는 상황) 이는 간단하게 데이터나 히프 영역에 저장되어 있는 변수 등에 여러 스레드에서 동시에(같은 시점에) 접근하는 경우 문제가 생길 수 있음을 지칭하는 용어이다. 한 스레드에서는 get(읽기)로 접근하고, 다른 스레드에서는 set(쓰기)로 접근한다면.. 꼬여서 문제가 생길 수도 있다는 것이다. 그럼 그냥 get 방식으로 여러 스레드에서 접근하면, 데이터 .. 2023. 2. 23.
ViewController.swift 파일명을 마음대로 바꾼다면.. [Storyboard] Unknown class _xxx in Interface Builder file. 스토리보드가 아닌 코드로 앱을 만드는 도중에 이상한 에러를 발견했고, 해결했기에 작성해본다. 아주 간단한 에러인데 어 왜 안되지..? 하고 당황하는 사람이 없기를 바라며.. xcode에서 새로운 앱 프로젝트를 만들면 자동으로 생성되는 파일들이 있다. 거기서 뷰컨트롤러파일은 ViewController.swift로 되어 있고! 그런데 파일 관리를 위해 ViewController.swift 파일 이름을 그냥 바꾸면 아래와 같은 에러가 생긴다.. (위와 같이 그냥 바꾸고 빌드를 하는 경우) [Storyboard] Unknown class _TtC7tabCode14ViewController in Interface Builder file. 마음대로 이름을 바꿔서 뷰와 뷰컨이 연결이 제대로 안되어서 발생하는 에러 같.. 2023. 2. 17.