전체 글
인스타그램 스타일 Page Control
인스타그램 스타일의 페이지 컨트롤을 만들려고 했다. UIPageControl 처음엔 UIPageControl 을 이용해서 만들려고 했지만, 보여 줄 수 있는 점의 개수와 종류를 지정할 수 없음 점의 크기를 지정할 수 없음 위의 두가지 이유로 UIPageControl 을 사용할 수 없었다. UIControl 애초에 UIPageControl 이 UIControl을 상속하고 있기 때문에, UIControl을 상속해서 만들어 보았다. UIControl 공식 문서 공식 문서를 보면, UIControl 은 버튼이나, 슬라이더, 텍스트 인풋 같이 유저가 인터렉션 할 수 있게 하는 요소들이 상속을 받고 있다. UIControl은 사용자 인터페이스 요소를 구성하고 사용자의 상호작용을 처리하는 데 사용되는 클래스이다. U..
Meta 란? (feat: FaceBook)
metadata, metaverse... meta로 시작하는 많은 단어들이 있는데 정작 무슨 뜻인지는 생각 해 본 적이 없었다. 🛸 meta의 사전적 정의 그리스어로 beyond, after 스스로를 나타내기 위한 높은 레벨의 추상화 또는 분석 (self-aware) 🛸 metadata, metaprogramming 'metadata'의 사전적 의미는 a set of data that describes and gives information about other data 로 다른 데이터에 정보를 주기 위한 데이터이다. 위키 피디아에는 어떤 목적을 가지고 만들어진 데이터라고 한다. 약간 와닿지 않는 부분이라 chatGPT에게 물어보니 예를 들어 사진의 metadata 라고 한다면, 사진을 찍은 날짜, 사진..
[UIKit] App life cycle 이란?
🚴🏻 app life cycle 이란? app 의 life cycle 이라는 것은 앱의 생명 주기를 의미한다. 우리 앱이 켜지고, 데이터 들이 메모리의 올라가고, 앱을 끈 것은 아니지만 다른 앱을 사용하고 있고, 결국에는 앱을 종료하게 되는 이 주기를 말한다. 애플에서는 이러한 상태에 맞춰서 호출 되는 메서드들을 정의해 놓았다. 그래서 어떤 메서드가 언제 호출 되는지 알고 있다면, 그 상태에 맞는 적절한 대응을 해줄 수 있다. (예를 들면 앱이 꺼지기 전에 데이터를 저장 한다든지 하는...) 📱 앱의 상태 Not Running 앱이 시작되지 않았거나 실행되었지만 시스템에 의해 종료된 상태 Inactive 앱이 전면에서 실행 중이지만, 아무런 이벤트를 받지 않고 있는 상태 Active 앱이 전면에서 실행 ..
[swift]Date DateFormatter CheetSheet
Date와 DateFormatter 에 대한 내용을 가끔 쓰는데 쓸때 마다 조금씩 헷갈려서 내용을 정리해 두려고 한다. 고고 📅 Date란? struct Date A specific point in time, independent of any calendar or time zone. 시간의 특정한 포인트로, 어떠한 캘린더나 타임존으로 부터 자유하다고 한다. 그래서 지금 시간을 찍어보면 Date 를 찍어보면 이런 식으로 나온다. 2022-10-01 11:40:34 +0000 년도-월-일 시간:분:초 +시간대 이런 포멧이다 사실은 지금이 8시 인데 11시 로 나오는 이유는 표준 시간대(UTF)를 사용하기 때문이다. (그래서 영국 시간 기준인가? 봤더니 지금 영국도 써머타임 때문에 저 시간에서 약간 오차가 있..
[CS] DataBase 개념 찍어 먹기
CoreData를 공부해야 하는데 database에 관한 지식이 1도 없어서 공부해 보았다. 💾 DataBase 란? dataBase는 말 그대로 데이터를 저장하는 저장소이다. 💾 DBMS 란? DBMS(Database Management System) 로 데이터 베이스를 관리하는 시스템을 의미한다. 엑셀파일이 데이터베이스 라면 엑셀 자체는 DBMS 가 되는 그런 개념이다. 일반적으로 dataBase 라고 말하는 것이 사실은 DBMN 까지 통칭해서 이야기 하는 것 같다. 💾 DataBase의 특징 사용자의 질의에 대하여 실시간으로 처리와 응답이 이루어진다. 생성, 수정, 삭제를 통하여 항상 최신의 데이터를 유지한다. 사용자들이 원하는 데이터를 동시에 공유할 수 있다. 사용자가 원하는 데이터를 주소가 아닌..
[WWDC19] SwiftUI Essentials
이글은 WWDC19 SwiftUI Essentials 을 보고 정리 한 글 입니다. 🎁 intro SwiftUI 는 바퀴를 재발명하려고 하지 않는다. 우리가 전에 UIKit 에서 사용하던 다양한 컴포넌트들 그리고 다양항 기능들이 이미 모두 들어가 있다. 그저 방법을 바꿨을 뿐이다. 기본적인 것은 쉽게 구현할 수 있게 도와주고 자유롭게 커스텀 할 수 있도록 만들었다고 한다. 🥑 View and modifiers 아보카도 토스트 주문 앱을 만들면서 SwiftUI와 친해져 보자. 이 화면에서 보이는 모든 것은 View 로 구성되어 있다. 이 말을 이해하기 위해서 이야기를 더 들어보자. 일단 UIKit 에는 UIView 가 있고 AppKit 에는 NSView 가 있다. SwiftUI 에는 View 가 있다! S..
[swift]@property wrapper
combine을 공부하면서 Published 의 구현부를 뜯어보는데 @propertyWrapper struct Published @propertyWrapper 라는 것이 있는 것을 보았다. 많이 들어본 것 같았는데... 저게 뭘까? @propertyWrapper 를 먼저 공부해 보자! 🎁 @property wrapper 란? @propertyWrapper 공식문서 @property wrapper 공식문서가 language guide 에 있는게 조금은 충격이었다. language guide 열심히 읽었어서 다 아는 내용인줄 알았는데... 놓친게 있다 다시 한번 읽어야 할듯...ㅎ 공식문서에 씌여 있는 정의를 보자. property wrapper는 프로퍼티가 저장되는 방법을 관리하는 코드와 프로퍼티를 정의하..
[iOS] 키보드야 텍스트 가리지마
키보드를 보이게 하는데에 다양한 방법이 있다. 내가 시도해본 방법으로는 view 의 frame 을 변경하는 방법 view 의 autolayout 을 변경하는 방법 view 의 contentInset 을 변경하는 방법 keyBoard autolayout 활용하기 (iOS15 부터 가능) 들이 있다. 하나 하나 시도를 해보자. 우선 1~3 3가지 방법은 아주 약간만 다르고 방법이 비슷하다. 4번은 새로나온 아주 쉬운 방법이다. 1~3 방법을 먼저 구현해보자 ⌨️ 키보드 내리기 우선 일반적인 앱은 textFied 나 textView 가 아닌 곳을 터치하면 입력이 끝났다고 생각하고 키보드가 내려간다. 이것을 구현해보자. ViewController 에 아래 두가지 메서드를 구현한다. private func set..
[swift] 의존성 주입으로 코드를 예쁘게 하자!
🤔 의존성 주입을 하는 이유? 의존성 주입을 알아보기 전에 의존성 주입이란 것을 왜 해야하는 것일까? 객체끼리의 의존도가 높으면 한 객체에서 수정이 일어나게 되면 연관된 모든 객체를 손봐야 하는 경우가 있다. Unit test 를 할 경우에도 한 객체의 Test 만 진행하고 싶은데 의존도가 높으면 그럴 수가 없다. 유지보수를 편리하게 하기 위해서라도 의존성 주입을 하면 장점이 많이 생긴다. 💙의존성 주입의 장점💙 객체간의 의존성을 줄여준다. Unit Test가 용이해진다. 코드의 재활용성이 올라간다. 유지보수에 좋다. 그럼 의존성 주입이 무엇인지 알아보자. 😘 의존성 (Dependency) struct Coffee { let name: String } struct Store { let baverage: ..
[iOS]사용자의 폰트 사이즈 정보에 따라 UI 바꿔주기
📱 사용자의 폰트 사이즈 정보에 따라 UI 바꿔주기 웨더의 추천으로 어떤 블로그에서 접근성 설정을 하지 않는 것은 인종차별을 하는 것과 마찬가지다 라는 글을 읽었다. (아래 링크를 달아두었다.) 어떤 의미로 이런 제목을 다셨는지는 이해가 되었다. 실제로 아이폰에서 그런 부분들에 대한 지원이 다른 OS 에 비해서 좋아서 많은 장애인 분들이 아이폰을 사용한다는 이야기를 들었다. Font 사이즈에 대한 접근성을 설정해 주면 사용자의 설정에 따라 Font 사이즈를 줄 수 있다. 그런데 사실 그렇다 보면, 특정 크기 이상 폰트를 키웠을 때 UI 요소가 깨지거나 아주 이상하게 나오는 경우를 볼 수 있다. 사실 Font 에 대한 접근성을 지원한다면 사용자가 폰트 크기를 어떻게 설정하든지 간에 화면에서 보이기에 깔끔해..
[iOS] 컴파일 최적화 feat 꼬리재귀
🛠 컴파일 최적화 ⚙️ 컴파일 최적화란? 위키에서 말하는 컴파일 최적화의 정의를 찾아보았다. 컴파일러 최적화(optimizing compiler)는 컴파일러에서 출력되는 실행 프로그램의 효율성을 최적화하는 과정을 말한다. 일반적으로 프로그램의 실행 속도를 최대화하거나 프로그램이 차지하는 메모리의 양을 최소화하기 위해 많이 이용된다. 휴대용 컴퓨터가 성장함에 따라 프로그램에 의해 소비되는 전력을 최소화하는 것도 고려된다. 내가 이해하기로는 각 언어의 컴파일러 마다 어떤 경우일 때 최적화를 할 수 있다는 규칙이 있는 것 같다. 예를 들어 final 을 붙이는 것도 final 키워드를 붙이면 컴파일러가 상속되지 않는다는 것을 인지하고 static dispatch 로 바꿔주는 과정이 컴파일 최적화를 해주고 있는..
[WWDC] ARC in Swift: Basics and beyond
swift 의 class 는 Referance 타입이고, ARC 를 통해서 메모리를 관리하기 때문에 ARC 를 알아야 한다고 한다. 💾 ARC의 객체 수명 object life time and ARC RC 는 init 되는 시점에 1이 된다. 객체의 생명주기는 init 을 할 때 시작되고 마지막 사용이 끝난 뒤에 해제 된다. ARC 가 retain 과 release 를 자동으로 넣어준다. ARC 를 사용하기 전에는 retian 과 release를 사용해서 사용자가 RC 를 올려주고 내려주는 작업을 했다. ARC 를 사용한 이후로 컴파일러가 코드를 읽고 적당한 부분에 retain 과 release 를 삽입해주고 있다. 자 wwdc 에서 보여준 예제를 보자. class Traveler { var name: ..
[swift] 부동 소수점 오류가 나는 이유
🎲 컴퓨터가 정수를 표현하는 방법 Integers (정수) 소수점이 없는(분수 부분이 없는) 숫자를 의미 한다. swift 의 Int는 크기에 따라 다양한 타입을 제공한다. Int 가 컴퓨터에 어떤 형식으로 저장 되는지보자. print("Int8 max: \(Int8.max)") print("Int8 min: \(Int8.min)") print("UInt8 max: \(UInt8.max)") print("UInt8 min: \(UInt8.min)") //Int8 max: 127 //Int8 min: -128 //UInt8 max: 255 //UInt8 min: 0 Int8 과 Uint8 의 최대값과 최소값을 찍어보았다. 우선 여기에서 뒤에 붙은 8은 비트의 수를 의미한다. Int8 이라는 것은 8비트를 ..
[swift] 고차 함수 요목조목 보기
🎛 고차함수란? 고차함수는 다른 함수를 전달인자로 받거나 함수실행의 결과를 함수로 반환하는 함수 이다. → 클로저를 파라미터로 받거나 → 클로저를 리턴하는 경우 Foundation 에서 기본으로 제공하는 고차함수에는 map, compactMap, flatMap, filter, reduce 등이 있다. 🗺 map 기존 데이터를 변형(transform) 해서 새로운 컨테이너에 담아주는 고차함수이다. map 은 파라미터로 클로저를 받는다. 여기에서 받는 클로저는 시퀸스의 요소들을 파라미터로 가지고 있어야 하고, 요소를 변형해서 반환한 것을 리턴해야 한다. 예시를 보자. [0, 1, 2, 3, 4] → [0, 2, 4, 6, 8] 배열의 요소를 2배 곱해주는 로직이다. let numbers: [Int] = [0..
[iOS] Number Fomatter
📋 Fomatter 란? 값을 다양한 텍스트 값으로 변환해 줄 수 있는 추상 타입이다. class Formatter : NSObject Foundation 에서 지원하는 Fomatter 포멧 설명 ByteCountFormatter 바이트값을 KB, MB, GB 등으로 변환해줌 DateFormatter 날짜를 변환해줌. DateComponentsFormatter "약 5분 남음" 같은 문자열을 만들어 반환해줌 DateIntervalFormatter 시간 사이 간격을 문자로 반환해줌 MeasurementFormatter 수치를 문자로 반환해줌 NumberFormatter 숫자를 문자로 반환해줌 PersonNameComponentsFormatter 사람의 이름을 정해진 규칙에 따라 반환해줌 이런 다양한 포메터..