- 근본으로 돌아가자(6) Image2료일이번글은 단순히 UIImage, Image를 말하는 게 아닌 더 딥한 정보들을 정리할 계획이다. 먼저https://developer.apple.com/design/human-interface-guidelines/images Images | Apple Developer DocumentationTo make sure your artwork looks great on all devices you support, learn how the system displays content and how to deliver art at the appropriate scale factors.developer.apple.com 우선 이미지는 두가지 방식으로 구성된다.래스터 이미지: 픽셀로 이루어져 해상도가 고정되어 있어 확대..
- 2025-03-05 17:06:16
- 근본으로 돌아가자(5) - 프로토콜2료일오랜만에 근본 시리즈다. 그 이유는 좋은 기회로 IOS 현업에 계신 개발자분과 커피챗을 한 결과 오히려 더 기본기를 본다고 한다. 나는 기본기가 충분한가? 기본기가 충분해서 다양한 Kit들을 쓰고 아키텍처를 공부하는가? 모르겟다 그래서 프로토콜에 대해 다시 정리해보려합니다프로토콜: 요구사항이 들어있는 청사진 뭐 그냥 인터페이스?뭐 이정도는 이제 올라온 1학년 개발자도 말할 수준이다. 먼저 왜 프로토콜이 나왔는지부터 살펴보자.등장 배경다중 상속의 문제Objective-C는 동적 디스패치와 런타임에 의존하는 객체지향 언어로, 다중 상속 X. 코드 재사용성과 확장성에 제약이 존재.왜 그러면 다중 상속이 안될까? 다이아몬드 문제: A클래스를 B,C가 상속받고 D가 B,C를 상속받아 A 메서드 호출할때 어떤 경로..
- 2025-03-03 12:39:04
- Dynamic Dispatch는 어떻게 이루어지는가? 클래스 VS 프로토콜2료일사실 이게 첫번째 글이 아니에요. 프로토콜은 어떻게 동작하고 채택당한놈은 어떻게 알고 필수 메서드들을 구현하라고 컴파일 에러가 뜨는지 궁금했던 저는 더 나아가 프로토콜을 채택한 다양한 타입들이 같은 배열에 들어갔을 때, 어떻게 각각 올바른 메서드를 호출할 수 있을까?. 꼬꼬무하다보니 여기까지 왔습니다..쫌 어려웠어여. 주에 한번씩 복습할예정!! 들어가보자~잇!Dynmaic Dispatch정적 디스패치와 달리 런타임에 호출할 메서드가 결정되는 것입니다소스코드를 파싱하여 AST트리를 생성하고 의미분석하여 타입검사하고 중간언어인 SIL로 변환되는데 여기서 정적/동적 디스패치가 결정Virtual Tablefinal 키워드가 붙지 않은 클래스는 상속이 가능하기에 dynmaic Dispatch가 이루어진다.. 런타..
- 2025-03-02 21:11:24
- 메모리관리(weak self와 guard의 만남)2료일기본 개념인 weak, unowned에 대한 자세한 설명은 스킵하겠다. 여기서 다룰것은 언제 그래서 메모리누수가 생기고 댕글런포인트가 뭐고 언제 댕글런포인트가 발생할 수 있을지, weak self는 언제써야하는지.. 등 좀더 실무적인 개념에서 다뤄보려 한다.weak self를 사용하게 되면 ARC가 1증가하지 않는 약한참조이지만 값이 있을수도 있고 없을수도 있어 guard let같은 옵셔널 binding을 사용하여 코드에 사용해야한다. @escaping & nonEscapingnonescaping 클로저가 범위 내에 실행되어, 코드를 즉시 실행하며 나중에 저장하거나 실행할 수 없다@escaping 클로저는 저장 될 수 있고, 다른 클로저로 전달될 수 있으며 미래의 어느 시점에서 실행 될 수 있다.딜레이가..
- 2025-01-12 20:27:12
- 22968-균형(swift풀이)2료일https://www.acmicpc.net/problem/22968문제를 해석하는게 어려웠다. 그래서 나와같은 어려움이 있는 사람들을 위해 정리하자면..정점의 개수가 주어질때 해당 정점으로 만들수 있는 AVL Tree의 최대 높이를 구하자는 것이다. AVL Tree = 왼쪽과 오른쪽 노드의 층 차이가 1층보다 크면 안됨. 결국 같은 층이거나 1층차이이여만 한다. 맨 오른쪽의 예제를 보면 1과 10이 2층차이난다. 그냥 이렇게 해석하면 끝!딱 보자마자 아 이거 규칙이 있겟구나 생각을 하며 점을 찍어보았다.1로 그래프를 찍었을때 딱 저 부분이 킥이다. 저 1이 생기는 순간 한층을 더 아래로 내릴 수 있다. 왜냐? 1층차이니까!! 완전이진트리가 될 필요가 없다.그러므로 조금 더 규칙을 구하기 위해 경우를 좀 ..
- 2024-12-26 13:25:46
- TCA(2)-Store, ViewStore& Binding2료일이전의 글에서 Store는 런타임동안 Reducer의 인스턴스를 관리하는 참조타입의 객체라고 하였다. 결국 상태, 액션에 대한 반응까지 모두 포함한 역할을 한다. 그렇다면 이 Store를 뷰에서는 어떻게 사용해야할까?Storelet store: StoreOfScope : 하위 State 및 Action을 다루는 스토어로 변환 ㄱㄴ. 2가지 인자를 받는다. 1. State: 상태 추출할 keypath 2. Action: 액션 추출할 Keypath. -> 즉 전체의 상태에서 너 필요한거만 Store로 줄께. => View는 필요한 상태와 액션만 접근할 수 있게된다. 모듈화, 유연성 굿(자연스럽게 유닛테스트도)ViewStoreView에 필요한 상태만 구독하고 업데이트하는 역할. 하나의 스토어에서 또 많은 작업..
- 2024-07-16 15:41:27
- Swift Performance-wwdc242료일https://www.youtube.com/watch?v=nb3bRQa0iGQ&t=3s 1. 여기서 말하는 성능이란?: 애플리케이션이 얼마나 빠르고 효율적으로 동작하는지를 나타내는 척도. - 지연: 작업이 시작되고 완료될때 까지 걸리는 시간.- 에너지 소모: 앱이 베터리 얼마나 사용하는지- 메모리 사용: 앱이 얼마나 많은 메모를 점유하고 어떻게 관리하는지. 2. 낮은 수준의 성능을 볼 때 고려해야할 원칙들 bottom-up으로 생각을 해보자- 최적화되지 않은 함수 호출들: 4가지의 cost가 있다고 한다. 이 중 3가지는 우리가 하는것. 1. 먼저 호출에 의한 인수를 설정(arguments)가장 낮은 수준인 1번은 우리가 함수를 호출할때 인수를 넣어야한다. 하지만 최신 프로세서에선 레지스터를 활용해 ..
- 2024-06-17 17:17:32
- Coremotion2편- 걷기데이터 & HealthKit2료일아주아주아주 예전에 작년에!! Coremotion 프레임워크 관련해서 글을 썼었다. 핸드폰 기울기에 따라 공이 움직여 스프라잇킷과 함께 이용하는 거여서 x,y,z, 가속도.. 중력..등등 다양하게 적어놨었다.오늘은 어쩌다보니 새로운 기획하고 개발하는 앱에는 실시간 걸음수 측정이 필요한데 이를 Healthkit에서는 처리가 어려워서 Coremotion이 적당하여 걸음에 관련된 정리들을 해보려 합니다!!우선 제가 개발하려는 앱의 목표!- 유저들의 실시간 걸음에 관한 정보를 얻고 이를 활용해 피드백을 해줍니다.(보폭, 보행속도)등을 미션을 통해 세팅해놓고 달성을 하여 나이드신분들이 더 좋은 걷기 운동을 할수 있게하자!음...HealthKit이라는 아주 좋은 애플의 건강정보가 있잖아.....그럼 이거써야해?He..
- 2024-04-17 12:48:07
- 매크로(Macros)2료일잉? 나는 따로 구조체에서 Init을 선언해주지 않았는데 뜨네?이게모지? memberwise initialization이는 컴파일러가 자동으로 init메서드를 생성해주기 때문이다.그렇다면 만약 WhatisMacro에 어떤 프로퍼티도 추가해주고 야 이것도 자동 컴파일러가 하게 해줘!🍎음...비효율적인데? 물론 swift compiler는 오픈소스야 잠만. 우리회의해보자...🧑🏼💻어? 그럼 일일이 너네랑 회의해야해? 확장성 딸리네?그래서 나온놈이 매크로다! 🧑🏼💻얘가 원하는데로 컴파일러를 수정하지 않고 Swift Package로 배포하는 방법!개발자가 원하는 방식으로 코드를 자동 생성할 수 있도록 돕는다. 매크로란?Swift 매크로는 컴파일러가 소스코드를 자동으로 생성하거나 확장할 수 있도록..
- 2024-03-07 15:09:19
- 초기화(initialization.. 편의? 지정?)2료일https://bbiguduk.gitbook.io/swift/language-guide-1/initialization 초기화 (Initialization) | Swift타입의 저장된 프로퍼티에 초기값을 설정하고 초기 설정을 수행합니다. 초기화 (Initialization) 는 인스턴스의 클래스, 구조체, 또는 열거형을 사용하기 위해 준비하는 단계입니다. 이 단계에는 인bbiguduk.gitbook.io여기들어가면 어마어마하ㄷ..분량이... 그만큼 초기화가 swift에서 중요하다.Swift는 모든 저장된 프로퍼티가 초기값을 받을 수 있도록 클래스 타입에 대해 2가지의 초기화 구문을 정의한다. => 바로 지정된 초기화와 편의 초기화라는 친구들이다.지정된 초기화(designated Initializer)해당 ..
- 2024-03-05 20:18:28
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)