프로토콜 프로토콜(Protocol) 은 특정 역할을 수행하기 위한 메서드, 프로퍼티, 기타 요구사항 등의 청사진을 정의합니다. 구조체, 클래스, 열거형은 프로토콜을 채택(Adopted) 해서 특정 기능을 수행하기 위한 프로토콜의 요구사항을 실제로 구현할 수 있습니다. 어떤 프로토콜의 요구사항을 모두 따르는 타입은 그 프로토콜을 준수한다(Conform) 고 표현합니다. 타입에서 프로토콜의 요구사항을 충족시키려면 프로토콜이 제시하는 청사진의 기능을 모두 구현해야 합니다. 즉, 프로토콜은 기능을 정의하고 제시 할 뿐이지 스스로 기능을 구현하지는 않습니다. 자바의 인터페이스와 유사함 정의 문법 protocol 키워드를 사용하여 정의합니다. protocol 프로토콜 이름 { 정의부 } //프로토콜 구현 proto..
https://github.com/JeaSungLEE/iOSInterviewquestions GitHub - JeaSungLEE/iOSInterviewquestions: 👨🏻💻👩🏻💻iOS 면접에 나올 질문들 총 정리 👨🏻💻👩🏻💻iOS 면접에 나올 질문들 총 정리 . Contribute to JeaSungLEE/iOSInterviewquestions development by creating an account on GitHub. github.com
assert와 guard 애플리케이션이 동작 도중에 생성하는 다양한 연산 결과값을 동적으로 확인하고 안전하게 처리할 수 있도록 확인하고 빠르게 처리할 수 있습니다. Assertion assert(_:_:file:line:) 함수를 사용합니다. assert 함수는 디버깅 모드에서만 동작합니다. 배포하는 애플리케이션에서는 제외됩니다. 주로 디버깅 중 조건의 검증을 위하여 사용합니다. 내가 예상 했던 조건들이 확실히 맞는가 검증하기 위해 사용함 var someInt: Int = 0 // 검증 조건에 부합하므로 지나갑니다 assert(someInt == 0, "someInt != 0") // 맞으면 지나치고 아니면 someInt != 0 메세지 출력 someInt = 1 //assert(someInt == 0)..
스위프트의 타입캐스팅은 인스턴스의 타입을 확인 하는 용도 또는 클래스의 인스턴스를 부모 혹은 자식 클래스의 타입으로 사용할 수 있는지 확인 하는 용도로 사용합니다. is, as를 사용합니다. let someInt: Int = 100 let someDouble: Double = Double(someInt) 기존 다른 언어에서 타입 케이팅을 이런식으로 했었음 이건 실질적으로 스위프트에서 타입 케스팅이 아님 이건 더블타입에 인스턴스를 하나더 생성 해주는 것임 주로 스위프트에서 타입 케스팅은 클레스 인스턴스에서 사용 많이함 타입 캐스팅 //타입 캐스팅 예제를 위한 클래스 정의 class Person { var name: String = "" func breath() { print("숨을 쉽니다") } } cla..
옵셔널 체이닝 우리가 구조체, 클레스 선언해줄때 구조체 안에 구조체인스턴스 또 구조체 안에 구조체 인스턴스 이렇게 연결 연결 되서 들어올수가 있음 그런데 이프러퍼티 자체가 옵셔널인 경우에는 이것이 nil인지 체크 해야 하는경우가 있는데 이럴때 옵셔널 체이닝이 유용하게 사용됨 옵셔널 체이닝은 옵셔널의 내부의 내부의 내부로 옵셔널이 연결되어 있을 때 유용하게 활용할 수 있습니다. 매 번 nil 확인을 하지 않고 최종적으로 원하는 값이 있는지 없는지 확인할 수 있습니다. class Person { var name: String var job: String? var home: Apartment? init(name: String) { self.name = name } } class Apartment { var b..
인스턴스 생성과 소멸 이니셜라이저와 디이니셜라이저 init, deinit //MARK: - 프로퍼티 기본값 // 스위프트의 모든 인스턴스는 초기화와 동시에 // 모든 프로퍼티에 유효한 값이 할당되어 있어야 합니다 // 프로퍼티에 미리 기본값을 할당해두면 인스턴스가 생성됨과 동시에 초기값을 지니게 됩니다 class PersonA { // 모든 저장 프로퍼티에 기본값 할당 var name: String = "unknown" var age: Int = 0 var nickName: String = "nick" } let jason: PersonA = PersonA() jason.name = "jason" jason.age = 30 jason.nickName = "j" //MARK: - 이니셜라이저 // 프로퍼티..
상속 스위프트의 상속은 클래스, 프로토콜 등에서 가능합니다. 열거형, 구조체는 상속이 불가능합니다. 스위프트는 다중상속을 지원하지 않습니다. (스위프트는 단일 상속임) 이번 파트에서는 클래스의 상속에 대해서 알아봅니다\ */ /* 클래스의 상속과 재정의 상속 문법 class 이름: 상속받을 클래스 이름 { /* 구현부 */ } // 기반 클래스 Person class Person { var name: String = "" func selfIntroduce() { print("저는 \(name)입니다") } // final 키워드를 사용하여 재정의(오버라이드)를 방지할 수 있습니다 final func sayHello() { print("hello") } // 타입 메서드 // 재정의 불가 타입 메서드 - ..
프로퍼티 감시자 프로퍼티 감시자를 사용하면 프로퍼티 값이 변경될 때 원하는 동작을 수행할 수 있습니다. 값이 변경되기 직전에 willSet블럭이, 값이 변경된 직후에 didSet블럭이 호출됩니다. 둘 중 필요한 하나만 구현해 주어도 무관합니다. 변경되려는 값이 기존 값과 똑같더라도 프로퍼티 감시자는 항상 동작합니다. willSet 블럭에서 암시적 매개변수 newValue를 사용할 수 있고, didSet 블럭에서 암시적 매개변수 oldValue를 사용할 수 있습니다. 프로퍼티 감시자는 연산 프로퍼티에 사용할 수 없습니다. struct Money { // 프로퍼티 감시자 사용 var currencyRate: Double = 1100 { willSet(newRate) { print("환율이 \(currency..