일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- String
- url
- 디자인패턴
- initalizer
- struct
- type
- Class
- Terminal
- init
- property
- 이니셜라이저
- enum
- interpace
- instance
- Protocol
- Method
- Foundation
- 코딩테스트
- extension
- IOS
- tuist
- 스위프트
- UIKit
- Git
- Xcode
- delegate
- Unicode
- initializer
- Swift
- optional
- Today
- Total
목록2021/08 (24)
아리의 iOS 탐구생활
Property Requirments 프로토콜에서는 프로퍼티가 저장프로퍼티인지 연산프로퍼티인지 명시하지 않고, 이름과 타입 그리고 gettable, settable한지 명시한다. 프로퍼티는 항상 var로 선언해야 한다. 프로토콜에서의 var 키워드는 가변성과는 아무런 관계가 없다. 대신 선언하는 멤버가 프로퍼티라는 것을 나타낸다. protocol Protocols { var name: String { get set } static var age: Int { get set } } get과 set이 모두 포함되어있다면 형식에서 읽기와 쓰기가 가능한 프로퍼티로 구현해야하고, get만 포함되어있는 경우에는 읽기 가능하도록 구현하면 된다. 타입 프로퍼티로 선언할때는 var 키워드 앞에 static을 추가해주면 된..
프로토콜(Protocol)은 최소한으로 가져야할 속성이나 메서드를 정의해줄 수 있다. 구현은 하지않고 정의만 하는게 특징이다. 프로토콜을 적용하면 프로토콜에서 정의한 속성과 메서드를 모두 구현해야 한다. 하나의 타입으로 사용되기 때문에 아래와 같이 타입 사용이 허용되는 모든 곳에 프로토콜을 사용할 수 있다. 함수, 메소드, 이니셜라이저의 파라미터 타입 혹은 리턴 타입 상수, 변수, 프로퍼티의 타입 배열, 딕셔너리의 원소타입 🔍 기본형태 protocol name { // 프로토콜 정의 } 구조체, 클래스, 열거형 등에서 프로토콜을 채택하려면 타입 이름 뒤에 콜론”:”을 붙여준 후 채택할 프로토콜 이름을 쉼표”,”로 구분하여 명시해준다. SubClass의 경우 SuperClass를 가장 앞에 명시한다. st..
🔍 Swift는 메모리 관리를 어떻게 할까? ARC(Automatic Reference Counting)를 사용한다. 🔍 RC(Referenc Count)란 무엇인가? 인스턴스를 현재 누가 가르키고 있느냐 없느냐(참조하냐 안하냐)를 숫자로 표현한 것. 참조 계산 시점: Complie Time에 언제 참조되고 해제되는지 결정되어 런타임 때 그대로 실행된다. 장점: 개발자가 참조 해제 시점을 파악할 수 있고, RunTime 시점에 추가 리소스가 발생하지 않는다. 단점: 순환 참조가 발생 시 영구적으로 메모리가 해제되지 않을 수 있다. Objective-C는 MRC(직접 할당/해제)를 사용했었다. 🔍 RC는 어떤 기준으로 숫자를 셀까? Count Up : 인스턴스의 주소값을 변수에 할당할 때 인스턴스 생성(새..
✔️ Class’s initalizer 🔍 Designated initalizer (지정 초기화) 흔히 보는 기본적인 initalizer이다. 부모 Class의 initalizer를 호출할 수 있다. class 내부에는 반드시 한 개 이상의 Designated initalizer가 있어야 한다. init(매개 변수) { /* 구현부 */ } 🔍 Convenience initalizer (편의 초기화) Designated initalizer의 일부 매개변수의 기본값을 설정하여 초기화하는 initalizer이다. 쉽게 말하면 기존 Designated initalizer에 default를 주고 싶은 경우에 사용한다. 더 적은 입력으로 초기화를 편리하게 할 수 있게 도와주는 역할을 한다. convenience ..
✔️ Struct’s initalizer 종류 🔍 Memberwise initalizer 구조체 내에 프로퍼티가 하나라도 초기화 되지 않은 경우, 초기값이 없는 속성을 매개변수로 갖는 Memberwise initalizer가 제공된다. 속성이 모두 let으로 값까지 모두 초기화 되어있는 경우에는 Memberwise initalizer는 제공되지 않는다. 🔍 기본 initalizer 프로퍼티가 모두 초기화 되어있는 경우 매개변수가 없는 initalizer가 제공된다. struct Sample { let own: Int let two: String let three: Bool } let test1 = Sample(own: 1, two: "문자열", three: true) // Memberwise inital..
이니셜라이저(initalizer)란? 쉽게 예를 들어본다면 아이폰에서 공장초기화를 하는 것을 생각해보면 된다. 초기에 상품이 나올때의 상태로 세팅하는 것과 같다고 볼 수 있다. class, struct, enum 등의 Instance를 생성할 때 필요한 값들을 넣어주는 준비 작업이다. Property의 초기값을 설정한다. 초기화 작업이 완료되면 메모리에 Instance가 생성 된다. 가장 기본적인 형태는 매개변수가 없는 형태이다. init() { // 이 곳에서 초기화를 구현 } struct Say { var text = "말" init() { print(text) } } let test = Say() // 출력: 말 🔍 기본값을 지정하여 초기화 초기화할때 프로퍼티의 선언과 동시에 값을 할당하면 그 값을..
앞서 배우기 전에 값 타입과 참조 타입이 뭔지 알아볼까? ✔️ Swift에서 값 타입과 참조 타입 Value Type Reference Type Structure Enumeration Tuple Class Closure 🔍 값 타입(Value Type) 원본의 복사본을 가진 독립 인스턴스를 가지고 있다. 즉 함수의 매개변수로 값을 보낼 때나 값을 할당할 때 copy 속성으로 값을 처리한다는 것이다. 인스턴스 생성시 스택에 인스턴스가 저장된다. 🔍 참조 타입(Reference Type) 값 타입과 달리 값이 복사되는 것이 아닌 메모리를 참조한다. 즉 메모리 위치를 전달한다. 인스턴스 생성시 스택에는 힙메모리주소가 저장되고 힙에는 인스턴스가 저장된다. 그리고 인스턴스는 스택에 생성된 메모리에 연결된다. 값타..
✔️ inout이 뭔데? Swift는 기본적으로 'call by value' 형식이다. 그래서 call by reference를 구현하려면 함수의 매개변수를 inout parameter로 구현해야한다. 함수의 매개변수는 기본적으로 상수(let)이다. 함수는 값을 복사하여 내부에 전달하지만, inout 키워드를 사용하면 참조로 전달하게 된다. 예를 들어 일반적인 함수를 만들어서 확인해보면, var A = 3 var B = 9 func swapTwoTest(_ numbersOwn: Int, _ numbersTwo: Int) { // numbersOwn = 6 // Cannot assign to value: 'numbersOwn' is a 'let' constant // numbersTwo = 18 // Ca..
메모리 구조에 대해서 알아보기전에 메모리의 대한 내용 먼저 다루기 데이터나 프로그램을 저장하는 저장 공간은 계층 구조를 가진다. CPU에서 가장 가까운 저장공간은 레지스터인데, 레지스터 -> CPU 캐시 메모리 -> 메인메모리 -> 보조기억장치 -> 외부기억장치 순으로 멀어진다. CPU로부터 멀어질수록 데이터를 저장하는 용량이 커지고 접근 속도는 느려진다. ROM은 Read Only RAM은 Read / Write 가능 메모리 구조 스택(Stack) 먼저 들어간건 나중에 나온다. (LIFO 후위선출 구조) 할당과 해제를 반복하기 때문에 데이터 용량이 불확실하다. 메모리의 높은 주소부터 낮은 주소 순으로 할당 된다. 함수에 포함된 지역변수들만 접근할 수 있다. 컴파일 시에 할당될 영역의 크기가 결정된다. ..
Swift의 자료구조 중 하나인 Set, 컬렉션 타입 이다. 순서가 중요하지 않거나, 항목이 한번만 표시되도록 해야하는 경우 배열 대신 집합을 사용할 수 있겠다. 배열과 달리 중복 요소를 허용하지 않고, 해시를 통해 값을 저장하기 때문에 배열에 비해 검색속도가 빠르다. 저장되는 자료형은 Hashable 프로토콜을 준수하고 있어야 한다. ✔️ 초기화 빈 Set을 만들땐 꼭 타입을 명시해줘야 한다. 빈 Set은 타입추론이 불가능하다. var intSet: Set = [] 값이 있는 Set은 'Set'만 명시해준다면 타입추론이 가능하다. let stringSet: Set = ["lee", "ari", "babo"] // Set ✔️ 값 추가 insert()와 update()는 같은 일을 하지만 아래와 같이 반..