iOS Architecture, Design Pattern 지금까지 알고 있는 아키텍쳐는 MVC 가 전부였다. MVP, MVVM 등등 이름만 들어봤을 뿐 공부해서 적용해본적은없다. OpenMarket 프로젝트를 진행하며 ViewController 가 굉장히 무거워지고 작성한 코드가 어디에있는지 찾기어렵고 대체로 정리되어있지 않다라는 느낌을 받아 이를 개선하기위해 아키텍쳐를 공부해보려한다. Architecture 영어단어로써의 아키텍처는 건축학 이라는 뜻이다. 건축으로 치면 건물의 평면도에 해당한다고 할수있다. 소프트웨어아키텍처는 소프트웨어 요소와 이들 요소의 외부 속성 그리고 이들 사이 의 관계를 구성하는 시스템의 구조이다. 간단히 말하자면 소프트웨어 의 구조 라고 할수있을것 같다. 포토샵 으로 예를 들..
Date Picker 아래의 글은 IOS 14.1 버젼의 내용이며 14버젼 이하는 Preferred Style이 없다. 아이폰에서 날짜를 고를 때 자주 마주치게되는 인터페이스 중 하나인 DatePicker! 유저에게 날짜를 고르게 하고 고른 날짜 데이터를 가져올수있게 하는것이다. 요런 녀석을 앱을 사용하면서 종종 봤을텐데 요녀석이다! Date Picker는 Delegate나 DataSource는 따로 없다. 사용은 어렵지 않다! private let datePicker = UIDatePicker() private func setAttributes() { datePicker.preferredDatePickerStyle = .automatic datePicker.datePickerMode = .dateAnd..
defer defer 란 무엇인가? defer 란 사전적 정의로는 연기하다, 지연되다, 미루다 이다. 함수 안에서 주로 사용되며 작성된 위치와 관계없이 함수종료 직전에 실행 된다. defer 내부에 작성된 코드들이 함수 끝나기 직전에 행 해진다는 뜻이다. defer 사용 방법 어렵지 않다 defer 키워드를 사용하고 중괄호를 열어 내부를 작성하고 중괄호를 닫으면 완성이다! 예시를 보도록 하자 func f() { defer { print("First defer") } print("End of function") } f() // Prints "End of function" // Prints "First defer" 기존 함수의 사이클이라면 함수f를 호출하게되면 "First defer" "Second defe..
App's Life Cycle(앱의 수명 주기) App의 생명 주기는 App의 실행,종료 및 App의 Foreground,Background 상태에 있을 때 시스템이 발생시키는 event에 의해 App의 상태가 전환되는 일련의 과정을 뜻한다. 1. Background 앱이 화면상에서 보여지지 않는 상태 가능한 적은 기능을 수행해야 한다. 화면 밖에 있기때문에 가급적 아무것도 하지 않는것이 좋다. 2. Foreground 앱이 화면에 올라와 있는 상태 App이 실행되면 발생되는 상황 UIApplication @UIApplicationMain 또는 @Main 어노테이션이 있는 클래스를 찾아 AppDelegate 객체 생성 Main Event Loop 를 실행(touch, text input등 사용자의..
ARC 자동 참조 카운팅 (Automatic Reference Counting) ARC 자동 참조 카운팅 (Automatic Reference Counting) swift는 앱의 메모리 사용량을 관리하기 위해 ARC 를 사용한다. ARC 는 클래스 인스턴스가 더이상 사용되지 않을때 자동으로 메모리에서 해제 시켜준다. ARC 는 해당 클래스의 RC(Reference Counting) 를 통해 사용하고있는지 사용되지 않는지 알수있고 이를 통해 자동으로 메모리에서 해제가 가능하게 된다. 클래스의 저장 방식 클래스를 인스턴스화 하게되면 stack 에는 heap 을 가르키는 포인터가 저장된다. 이때 heap 영역을 참조하게 되므로 RC 는 1 이된다. RC 는 heap 영역에 같이 저장된다. RC 를 측정하기 위..
객체지향 프로그래밍 과 SOLID 원칙 객체지향 프로그래밍 객체란? 인간이 분명하게 인지하고 구별할 수 있는 물리적인 또는 개념적인 경계를 지닌 어떤 것. 하나의 개별적인 실체로 식별 가능한 물리적인 또는 개념적인 사물은 어떤것이라도 객체가 될 수 있다. 상태(state), 행동(behavior), 식별자(identity)를 지닌 실체. 객체지향 패러다임 이란? 인간이 인지할 수 있는 다양한 객체들이 모여 현실 세계를 이루는 것처럼 소프트웨어의 세계 역시 인간이 인지할 수 있는 다양한 소프트웨어 객체 들이 모여 있다는 믿음에서 출발한다. 객체지향 패러다임의 목적은 현실세계를 기반으로 새로운 세계를 창조하는 것이다. 객체지향 프로그래밍이란? 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체..
iOS App 특정 HTTP 접근 허용방법 프로젝트를 진행 하는데 ATS(App Transport Security) 라는 에러가 발생했다. 네트워크 통신중에 발생한 에러인데 요녀석이 뭔지 찾아보니 IOS9 버전 이후부터는 보안에 취약한 네트워크를 차단한다고 한다. 그래서 아무 설정없이 HTTP 에 접근하면 콘솔창에 길게 뭐라뭐라 하면서 App Transport Security 라고 하는 에러가 나오게되는데 Info.plist를 수정해 HTTP접근을 허용해주어야 한다! 아래의 사진처럼 특정 HTTP의 주소를 기재해주면 된다! 주의사항! Allow Arbitary Loads 의 값을 YES 로 설정하고, Exception Domains 에 값이 없다면 모든 HTTP 통신을 허용하게된다. 그럼 애플이 보안강화..
Localization 지역, 언어에따라 다르게 표시하기 Localization 여러 언어와 지역을 지원하여 앱 시장을 확장하십시오. Overview 현지화는 당신의 앱을 여러 언어와 지역으로 번역하고 적응시키는 과정입니다. 다양한 언어를 사용하고 다른 App Store 영역에서 다운로드하는 사용자에게 액세스 권한을 제공하기 위해 앱을 현지화합니다. 먼저 언어와 지역에 맞게 문자열을 자동으로 포맷하고 번역하는 API로 코드를 국제화합니다. 그런 다음 번역의 정확도를 높이기 위해 언어 복수 규칙에 따라 복수 명사와 동사를 포함하는 내용에 대한 지원을 추가합니다. Translate and Adapt Your App Xcode에서 현지화는 사용자가 지원하는 특정 언어 및 지역에 대한 리소스 집합을 의미합니다...