일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스위프트
- UIKit
- Unicode
- init
- 이니셜라이저
- 디자인패턴
- instance
- extension
- Protocol
- enum
- Swift
- Xcode
- Git
- initializer
- interpace
- Foundation
- type
- Method
- struct
- tuist
- optional
- url
- IOS
- String
- 코딩테스트
- delegate
- Terminal
- Class
- initalizer
- property
- Today
- Total
목록Swift (58)
아리의 iOS 탐구생활
Protocol Types 프로토콜은 first-class Citizen이다. 즉 독립적인 타입이다. 변수나 상수를 사용할때 자료형으로 사용하거나 파라미터의 자료형으로 사용할 수 있다. 반환타입으로 선언하는 것도 가능하다. protocol TypeA { func say() } class A: TypeA { let text: String = "난 A야!" func say() { print(text) } } let a = A() let t: TypeA = A() // 타입을 프로토콜로 선언하여도 에러가 없다. 확인해보면 프로토콜 타입으로 클래스 인스턴스를 생성하여도 에러가 없다. 왜냐하면 클래스 A는 프로토콜 TypeA를 채택하고 있기 때문이다. 이것은 슈퍼클래스 타입을 저장하는 업캐스팅과 유사하다. 업캐스..
Initializer Requirements 🔍 구조체와 클래스에서 생성자 구현의 차이 구조체는 Memberwise Initializers를 통해 프로토콜 요구사항을 충족시킬 수 있다. 직접 이니셜라이저를 구현해줘도 상관없다. 클래스는 상속을 고려해야하고 모든 서브클래스에서 프로토콜의 요구사항을 충족시켜야 한다. 그래서 클래스에서는 required initializer로 선언해야 한다. protocol Test { var name: String { get } init(name: String) } //struct A: Test { // var name: String // Memberwise Initializers를 통해 프로토콜 요구를 충족시킨다. //} struct A: Test { var name: S..
Method Requirements 👉🏻 프로토콜에서의 메소드 정의하기 protocol Protocols { func A(param: Int) -> Int static func B(param: String) -> String mutating func C(param: Double) -> Double // 값타입 전용은 아니다. 참조타입에서도 채택가능하다. } 프로토콜은 메서드 이름, 파라미터 이름과 타입, 리턴 타입만 정의한다. 채택하여 메서드를 구현할때 구현부는 자유롭게 작성할 수 있다. protocol Talk { func say() } class A: Talk { func say() { print("난 클래스 A라고 해.") } } 만약 구조체안에 메서드가 프로퍼티의 값을 바꾸려한다면 mutating..
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) 값 타입과 달리 값이 복사되는 것이 아닌 메모리를 참조한다. 즉 메모리 위치를 전달한다. 인스턴스 생성시 스택에는 힙메모리주소가 저장되고 힙에는 인스턴스가 저장된다. 그리고 인스턴스는 스택에 생성된 메모리에 연결된다. 값타..