일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 코코아 인터널스
- Algorithm
- 부트캠프
- 단위 테스트
- 네이버 부캠
- 개발
- Tistory
- World
- SwiftUI
- Design Pattern
- 알고리즘
- OS
- development
- rxswift
- Hello
- notion
- Cocoa Internals
- 부스트캠프
- 디자인패턴
- IOS
- 후기
- boostcamp
- ios #swift #uialertcontroller #메서드 스위즐링
- Opensource
- 커스텀 뷰
- WWDC
- Swift
- Today
- Total
목록전체 글 (50)
꿈돌이랜드

Modern SwiftUI: Identified arrays이 포스팅은 위 링크를 기반으로 작성했습니다.IdentifiedArray가 필요한 이유보통 SwiftUI에서 리스트 뷰를 구현할 때 ForEach 구문으로 리스트 데이터를 순차적으로 표시하는 케이스가 많습니다.그런 경우 보통 다음과 같이 구현하게 됩니다. struct StandupsList: View { @State var standups: [Standup] = […] var body: some View { List { ForEach(standups) { standup in StandupRow(standup: standup) } } } }그런데 보통 뷰 레이어에서 다시..
Swift Concurrency사내에서 Swift Concurrency 스터디를 진행했습니다.Swift Concurrency는 Swift5.5 버전 부터 도입된 Swift 언어 차원의 비동기 처리 방식입니다Documentation이 글에서는 개인적으로 Swift Concurrency를 공부하면서 중요하게 깨달은 내용에 대해 서술합니다.1. 어떤 actor에 해당 변수, 함수가 “선언”되어있는지가 중요하다.GCD의 경우 선언이 중요한게 아니라 런타임에 어떤 dispatchqueue에 해당 작업이 들어가서 실행되는지가 중요했습니다.Swift Concurrency의 경우는 해당 변수와 함수가 “선언된 위치”가 곧 어떤 스레드(엄밀히 말하면 actor)에서 동작할지를 결정합니다.이를 흔히 다양한 교육자료에서 격..
메서드 스위즐링이란?메서드 스위즐링은 런타임에 함수의 구현부를 뒤섞는 방법을 말합니다.구현 방법은 보통 다음과 같이 이뤄집니다.보통 class_getInstanceMethod 나 class_getClassMethod 와 같은 방법을 사용해서 각 메서드의 셀렉터를 가져오고각각을 method_exchangeImplementation으로 뒤바꾸어 구현을 바꾸어서 구현, appdelegate 같은 곳에서 swizzle을 한번 실행시켜줍니다.단, 각 메서드는 @objc 런타임에 노출되어야 하고, dynamic으로 마킹되어있어야 함extension에 정의된 경우는 자동으로 dynamic처리가 된 것으로 칩니다.import UIKitfileprivate var swizzleEnabled = falseextension..
Dependency lifetimesHow task locals workDependency 프로퍼티 래퍼가 초기화되면, 그 순간 dependency의 현재 상태를 캡처합니다.@TaskLocal 변수가 새로운 비동기 task들로부터 상속되는 것과 비슷합니다.TaskLocal 변수는 withValue 메서드 Scope 내에서만 값을 변경 가능합니다.이는 TaskLocal 변수가 동시성 환경에서 Thread-safe하게 만듦니다.단, 상속된 Task의 Scope 내에서는 부모 Task의 TaskLocal 값을 상속받습니다.하지만, 일반적으로 task local은 escaping closure 범위를 넘어설 때마다 오버라이드를 잃습니다.아래 예시 코드 처럼 withValue로 오버라이드한 값이 asyncAfte..

수료는 12월에 했지만 여러 바쁜 개인 사정과 취준으로 인해 이제야 후기를 작성한다. 멤버십 일정 멤버십 초반 8주간은 미션 기반 프로젝트를 수행하고, 6주간은 팀 프로젝트로 이루어진다. 미션 주간 미션은 2주에 1개 미션씩 공개되며, 미션이 공개된 차주는 전주에 공개된 미션의 추가적인 구현 요구사항이 공개된다. 이 초반 8주간의 미션 기반 프로젝트는 정말 재밌었다. 가장 기억에 남는 미션은 아이패드 드로잉 앱을 만드는 미션이었는데, 뷰 계층과 좌표 시스템 개념과 객체지향 개념 등을 함께 동원하여 미션을 완성해 나갔다. 특히 설계가 중요했던 미션이었는데, 추가적으로 미션이 진행되며, 확장성있는 구조를 짜는 방법을 계속해서 고민해야했다. 그리고 ViewController의 비대함을 줄이기 위한 여러가지 방..
프림 알고리즘프림 알고리즘은 크루스칼 알고리즘과 마찬가지로 MST를 구하는 알고리즘동작임의의 정점을 선택해서 비어있는 T 트리에 포함시킨다.T에 있는 노드와 T에 없는 노드 사이의 간선 중 가중치가 최소인 간선을 찾는다.찾은 간선이 연결하는 두 노드 중, T에 없던 노드를 T에 포함시킨다.이 때, 1에서 찾은 간선도 같이 T에 포함된다.모든 노드가 T에 포함될 때 까지, 1, 2를 반복한다. 아래는 그림으로 설명된 것입니다.임의의 정점을 선택해서 빈 T에 포함시킨다.예를 들어 1을 선택합니다.T에 있는 노드와 T에 없는 노드 사이의 간선 중 가중치가 최소인 간선을 찾는다.빨간색과 파란색을 연결하는 간선 중 가중치가 최소인 것을 찾는다. 1-3과 1-2 중, 가중치가 더 작은 간선은 가중치가 4인 1-3을..
운영체제컴퓨터 하드웨어를 관리하는 소프트웨어CPU, 메모리 및 입출력 장치 등의 자원들을 프로그램에 적절하게 할당해야 하는 책임거의 모든 코드가 운영체제 위에서 실행되므로 운영체제 작동방식에 대한 지식은 적절하고 효율적이며 안전한 프로그래밍에 중요하기 때문일반적으로 운영체제에는 각 장치 컨트롤러마다 장치 드라이버가 존재드라이버는 장치 컨트롤러의 작동을 잘 알고 있고 나머지 운영체제에 장치에 대한 일관된 인터페이스를 제공인터럽트장치 컨트롤러가 장치 드라이버에 작업을 완료했다는 사실을 알리는 방법하드웨어는 어느 순간이든 시스템 버스를 통해 CPU에 신호를 보내 인터럽트를 발생시킬 수 있음CPU가 인터럽트 되면, 하던 일을 중단하고 즉시 고정된 위치로 실행을 옮기고 ISR(인터럽트 서비스 루틴)을 실행실행이 ..

신장 트리그래프의 모든 정점을 포함하는 트리를 말한다.그래프의 최소 연결 부분 그래프로 사이클이 없다.정점의 개수가 n개면 간선의 개수가 n-1개 이다.최소 신장 트리신장 트리는 신장 트리 중 가중치 합이 최소인 신장 트리를 말한다.예제)도시마다 도로를 짓는데 최소 거리가 되도록 구축집마다 전화망 설치하는데 최소 비용이 되도록 설계 최소 신장 트리 알고리즘대표적으로 크루스칼, 프림 알고리즘이 있다.크루스칼 알고리즘그리디 알고리즘을 이용한다.간선 선택을 기반으로 하는 알고리즘최소 신장 트리가 최소 비용의 간선으로 구성되고, 사이클을 포함하지 않는다는 두 조건에 따라서 매 단계에서 사이클을 이루지 않는 최소 비용 간선을 선택한다.이전 단계에서 만든 신장 트리와는 관계 없이 무조건 최소 간선만을 선택하는 방법..