일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 진입점
- OperationQueue
- UIButton
- entrypoint
- Understanding Swift Performance
- RunLoop
- userdefaults
- weak
- IBOutlet
- IBOutletCollection
- for-in
- TableView
- 연산 프로퍼티
- property wrapper
- CoreLocation
- uikit
- 트레일링 클로저
- 후행 클로저
- AppTransportSecurity
- DispatchQueue
- tableViewCell
- ios
- 동시성프로그래밍
- SWiFT
- viewcontroller
- WWDC16
- Remot Push
- Choosing Between Structures and Classes
- firebase
- 원격 푸시
- Today
- Total
목록22 베이직 챌린지 (19)
iOS 공부하는 감자
SOLID 원칙은 객체지향 설계에 있어서 더 좋은 아키텍처를 설계하기 위해 지켜지면 좋을 5가지 원칙을 앞 글자만 가져와서 나타낸 것이다. SOLID는 다음의 약자이다. S (Single Responsibility Principle) : 단일 책임 원칙 O (Open / Close Principle) : 개방/폐쇄 원칙 L (Liscov Substitution Principle) : 리스코프 치환 원칙 I (Interfate Segregation Principle) : 인터페이스 분리 원칙 D (Dependency Inversion Principle) : 의존관계 역전 원칙 S (Single Responsibility Principle) : 단일 책임 원칙 클래스는 하나의 책임만 가져야 한다. 클래스의 ..
1. 비트 연산자 컴퓨터는 모든 자료를 0과 1로 이루어진 2진수로 다룬다. 그래서 모든 숫자는 0과 1이라는 비트로 표현하는데, 그 비트 단위끼리 연산할 때 사용하는 것을 비트 연산자라고 부른다. 연산자 표현 설명 NOT(부정) 비트 연산자 ~A A의 비트를 반전한 결과를 반환 AND 비트 연산자 A & B A와 B의 비트 AND 논리 연산 수행 OR 비트 연산자 A | B A와 B의 비트 OR 논리 연산 수행 XOR 비트 연산자 A ^ B A와 B의 비트 XOR 논리 연산 수행 비트 이동 연산자 (시프트 연산자) A >> B A 1) // 0 = 0000 비트 연산자는 위 코드처럼 사용하는 수학적 연산보단 비트를 검출하거나 옵션을 전달하는 목적으로 주로 사용된다. let iPhone: Int = 1 ..
Big-O Big-O는 알고리즘의 시간 복잡도를 나타내는 표기법이다. 알고리즘의 속도는 작업을 처리하는 단계에 따라서 달라진다. (단계가 적을수록 좋은 알고리즘) inputData의 크기와 관계없이 동일한 수의 단계를 수행한다면 O(1)이라고 표기하고 inputData의 크기와 비례해서 수행되는 단계가 변화한다면 O(N) 이라고 표현한다. 알고리즘 문제에서 시간초과가 뜨지 않기 위해서는 시간 복잡도에 대한 이해를 바탕으로 코드를 작성해야 될 것 같다.. 시간초과로 프로그래머스에서 2시간 삽질하다가 머리에 쥐나서 포기했다.. 🤬 애플 개발자 문서에서 각 메서드의 시간복잡도를 찾을 수 있다. (맨 아래에 나옴) Array 메서드 배열은 순서대로 저장되므로 중간에 값을 추가하거나 없애면 그 뒤의 값들을 재배치..
HIG 애플에서 개발자들에게 앱의 인터페이스를 설계할 때 지키면 좋을 내용들을 가이드라인을 통해 제안하는 것 같다. 앱의 사용자가 UI를 보고 쉽게 앱의 사용법을 알 수 있도록 하려는 목적인듯 앱스토어 심사 과정에서 HIG를 너무 벗어난 UI 디자인을 가지고 있다면 반려(?) 시키기도 한다는 것 같다.. 취업 면접 질문으로 HIG에 관하여 알고 있는지, 읽어보았는지 물어보기도 한다. https://developer.apple.com/design/human-interface-guidelines/ Human Interface Guidelines - Design - Apple Developer Human Interface Guidelines Get in-depth information and UI resour..
디버깅 사용법 BreakPoint 원하는 라인에서 실행중인 앱을 일시정지 하는 포인트 라인 번호를 클릭하면 파란색으로 표시되면서 BreakPoint가 생긴다. BreakPoint는 마우스 드래그를 통해 제거하거나 옮길 수 있다. Xcode 하단의 Debugging Area에서는 디버깅 중 일시 정지된 BreakPoint에서의 현재 변수 상태를 확인할 수 있다. 만약 5번 라인에 BreakPoint를 설정한다면 5번 라인을 실행하고 멈추는게 아니라 4번 라인까지 실행하고 5번 라인을 실행하기 전 일시정지된다. Control Flow 디버깅의 흐름을 제어하는 방법은 3가지가 있다. 다음 BreakPoint로 넘어가는 방법 : Pause/continue execution 다음 코드(라인)이 실행되게 하는 방법..
객체지향 프로그래밍 프로그래밍에는 코드를 더 효율적으로 만들고 작성하기 위한 다양한 패러다임이 존재한다. 절차지향, 객체지향, 함수형 등이 있는데, Swift에서는 객체지향 프로그래밍과 함수형 프로그래밍 패러다임을 채택하여 사용한다. Swift에서는 객체라는 표현을 실제로 잘 사용하진 않는다. (인스턴스라고 부름: 이유는 후술) 객체지향 프로그래밍에서는 각 객체가 서로 메시지를 주고 받으며 데이터를 처리한다. 즉, 프로그램 실행의 주된 요소가 객체이다. 객체 객체지향 프로그래밍에서 객체는 상태와 상태(프로퍼티)와 행위(메서드)로 이루어진 것을 말한다. 즉, 관련있는 변수나 상수와 메서드를 모아서 한번에 관리하기 위해 만들어진다. Swift에서 객체는 클래스의 인스턴스를 의미한다. 객체 vs 인스턴스 객체..
타입캐스팅 인스턴스의 타입을 확인하거나, 해당 인스턴스의 타입을 부모 클래스나 자식 클래스로 취급하는 방법이다. 타입캐스팅을 사용하여 인스턴스의 타입이 프로토콜에 적합한지 여부도 확인 가능하다. is, as 키워드를 사용한다. 클래스의 인스턴스에서 자주 사용한다. 딕셔너리나 Any, AnyObject같은 타입을 많이 사용하면 유용하다. is 인스턴스 is 타입이름 // -> bool 인스턴스의 타입을 확인하는 연산자로, 런타임 시점에 체크가 이루어진다. 확인할 인스턴스가 타입의 서브 클래스(자식 클래스)를 사용한 인스턴스여도 true를 반환한다. class Person { let name: String = "" } class Student: Person { var age: Int = 25 } let do..
옵셔널 타입 이름 뒤에 ? 키워드를 붙여서 표현한다. 변수나 상수의 값이 nil일 수도 있다는 것을 의미한다. (값이 있을수도 없을수도 있다는 뜻) 값이 존재하지 않을 경우에 발생 가능한 오류(런타임오류)를 방지하기 위해 사용된다. (불확실성을 방지) 옵셔널을 사용하는 이유 함수에 전달되는 매개변수 값이 잘못된 경우, 제대로 처리되지 못했음을 nil 반환으로 표현 함수의 매개변수가 필수적이지 않을 때 해당 매개변수의 타입을 옵셔널로 정의 nil 가능성을 문서화하지 않고, 코드만으로 표현 가능 (ex-this value can be nil 같은 주석이 필요하지 않음) 예외 상황을 최소화하는 안전한 코딩이 가능함 옵셔널 정의 옵셔널은 열거형으로 정의되어 있다. public enum Optional : Exp..
프로토콜 특정 역할을 수행하기 위한 메서드, 프로퍼티, 이니셜라이저 등의 요구사항을 정의한다. 구조체, 클래스, 열거형은 프로토콜을 채택(Adopted)해서 프로토콜의 요구사항을 구현할 수 있다. 특정 프로토콜의 요구사항을 모두 따르는 타입은 그 '프로토콜을 준수한다(Conform)고 표현한다. 프로토콜을 준수하려면 프로토콜이 제시하는 기능을 모두 구현해야 한다. protocol 프로토콜 이름 { 기능 정의 } // 프로토콜 작성 예시 protocol Talkable { // 프로퍼티 요구 // 프로퍼티 요구는 항상 var 키워드를 사용 // get만 사용: 읽기만 가능해도 상관없다. // get, set 모두 명시 : 읽기와 쓰기 모두 가능한 프로퍼티로 구현해야 한다. var topic: String ..
상속 상속은 클래스에서만 사용이 가능하다. 단일 상속만 허용한다. (다중 상속 불가) Super Class(부모 클래스) : 상속하는 클래스 Sub Class (자식 클래스) : 상속받는 클래스 클래스는 부모 클래스로부터 물려받은 프로퍼티, 메서드에 접근할 수 있고, 새롭게 재정의도 가능하다. 연산 프로퍼티를 정의한 클래스에서는 연산 프로퍼티에 프로퍼티 감시자를 구현할 수 없지만, 자식 클래스에서는 부모 클래스에서 정의한 연산, 저장 프로퍼티에 프로퍼티 감시자를 구현할 수 있다. 기반 클래스(Base Class) 아무 클래스도 상속받지 않는 클래스 class Person { let name: String? var age: Int? } 서브 클래싱(subclassing) 기반 클래스를 통해 새로운 클래스를..