iOS
[iOS 프로그래밍을 위한 스위프트 기초] Ch3. 오류처리 및 고차함수 - 28. 오류 처리
오류 처리 - 스위프트에서 오류(Error)는 Error라는 프로토콜을 준수하는 타입의 값을 통해 표현 - Error 프로토콜은 사실상 요구사항이 없는 빈 프로토콜일 뿐이지만, 오류를 표현하기 위한 타입(주로 열거형)은 이 프로토콜을 채택 - 스위프트의 열거형은 오류의 종류를 나타내기에 아주 적합 - 연관 값을 통해 오류에 관한 부가 정보를 제공할 수도 있음 Error 프로토콜과 주로 열거형을 통해서 요류를 표현한다 enum 오류종류 이름: Error { case 종류1 case 종류2 case 종류3 ... } 자판기 오류 예시 enum VendingMachineError: Error { case invalidInput case insufficientFunds(moneyNeeded: Int) case ..

[iOS 프로그래밍을 위한 스위프트 기초] Ch2. 다양한 표현 및 확장 - 27. 익스텐션
익스텐션 (Extension) - 익스텐션은 스위프트의 강력한 기능 중 하나 - 익스텐션은 구조체, 클래스, 열거형, 프로토콜 타입에 새로운 기능을 추가할 수 있는 기능 - 기능을 추가하려는 타입의 구현된 소스 코드를 알지 못하거나 볼 수 없다 해도, 타입만 알고 있다면 그 타입의 기능을 확장할 수도 있음 스위프트의 익스텐션이 타입에 추가할 수 있는 기능 - 연산 타입 프로퍼티 / 연산 인스턴스 프로퍼티 - 타입 메소드 / 인스턴스 메소드 - 이니셜라이저 - 서브스크립트 - 중첩 타입 - 특정 프로토콜을 준수할 수 있도록 기능 추가 *익스텐션은 타입에 새로운 기능을 추가할 수 있지만, 기존에 존재하는 기능을 재정의할 수는 없음 클래스의 상속 vs 익스텐션 이 둘은 비슷해보이나 실제 성격은 많이 다름 클래..
[iOS 프로그래밍을 위한 스위프트 기초] Ch2. 다양한 표현 및 확장 - 26. 프로토콜
프로토콜 - 프로토콜은 특정 역할을 수행하기 위한 메소드, 프로퍼티, 기타 요구사항 등의 청사진을 정의 - 구조체, 클래스, 열거형은 프로토콜을 채택해서 특정 기능을 수행하기 위한 프로토콜의 요구사항을실제로 구현 가능 - 어떤 프로토콜의 요구사항을 모두 따르는 타입은 '그 프로토콜을 준수한다'고 표현 - 타입에서 프로토콜의 요구사항을 충족시키려면 프로토콜이 제시하는 청사진의 기능을 모두 구현해야 함. 즉, 프로토콜은 기능을 정의하고 제시할 뿐이지 스스로 기능을 구현하진 않음 정의 protocol 프로토콜 이름 { 정의부 } 구현 - 프로퍼티 요구는 항상 var 키워드 사용 - get은 읽기 전용, set은 쓰기 전용 protocol Talkable { //프로퍼티 요구 var topic: String ..

[iOS 프로그래밍을 위한 스위프트 기초] Ch2. 다양한 표현 및 확장 - 25. assert / guard
Assertion - 애플리케이션이 동작 도중에 생성하는 다양한 결과값을 동적으로 확인하고 안전하게 처리할 수 있도록 확인하고 빠르게 처리 가능. - 디버깅 모드에서만 동작 - 배포하는 애플리케이션에서는 제외 - 예상했던 조건의 검증을 위해 사용 var someInt: Int=0 //검증 조건 & 실패시 나타낼 문구 작성 , 뒤에 메세지는 안써도 됨 //검증 조건에 부합하면 지나감 assert(someInt == 0, "someIng != 0") someInt = 1 assert(someInt == 0) // int값 바꾸고 assert 실행시키면 에러 발생. 여기서 멈춰버림 assert(someInt == 0,"someInt != 0") // 뒤에 메세지를 작성한 경우 func functionWithA..
[iOS 프로그래밍을 위한 스위프트 기초] Ch2. 다양한 표현 및 확장 - 24. 타입 캐스팅
타입 캐스팅 - 인스턴스의 타입을 확인하는 용도 - 클래스의 인스턴스를 부모 혹은 자식 클래스의 타입으로 사용할 수 있는지 확인하는 용도 - is, as 사용 //예제 클래스들 class Person { var name: String = "" func breath() { print("숨 쉰다!!!!!") } } class Student { var school: String = "" func goToSchool() { print("학교 쨀 사람?") } } class UniversityStudent: Student { var major: String="" func goToMT() { print("니 술 좀 묵나? 일로 와바라 ㅋㅋ") } } //인스턴스 생성 var park: Person = Person(..

[iOS 프로그래밍을 위한 스위프트 기초] Ch2. 다양한 표현 및 확장 - 23. 옵셔널 체이닝과 nil 병합
옵셔널 체이닝 - 옵셔널 체이닝은 옵셔널 내부의 내부의 내부로 옵셔널이 연결되어 있을 때 유용하게 활용 가능 - 옵셔널 내부에 옵셔널 내부에 옵셔널 ... 이런 상황에서는 계속 nil 체크를 해야할 상황이 생길 수도 있다. - 이때 옵셔널 체이닝으로 매번 nil 확인을 하지 않고 최종적으로 원하는 값이 있는지 없는지 확인할 수 있음 * 옵셔널 체이닝 사용 비교 nil 병합 연산자 - 중위 연산자. ? -> ? -> ? ... - Optional ?? Value - 옵셔널 값이 nil일 경우, 우측의 값을 반환 - 띄어쓰기 조심! 옵셔널 체이닝을 공부하면서 옵셔널이라는 개념이 모호하다는 것을 깨달았다. 스위프트에서는 옵셔널이 중요하다고 하는데 다시 확실히 짚고 넘어가야 할 것 같다... 어렵다 ..
[iOS 프로그래밍을 위한 스위프트 기초] Ch2. 다양한 표현 및 확장 - 22. 인스턴스 생성 / 소멸 (init / deinit)
init : 이니셜라이저. 인스턴스를 생성한다 deinit: 디이니셜라이저. 인스턴스가 소멸될 때 호출된다 프로퍼티 초기값 - 스위프트의 모든 인스턴스는 초기화와 동시에 모든 프로퍼티에 유효한 값이 할당되어 있어야 함 - 프로퍼티에 미리 기본값을 할당해두면 인스턴스가 생성됨과 동시에 초기값을 지니게 됨 class PersonA { //모든 저장 프로퍼티에 기본값을 할당 var name: String = "unknown" var age: Int = 0 var nickName: String = "aka" } //인스턴스 생성 let jason: PersonA = PersonA() //기본값이 인스턴스가 지녀야 할 값과 맞지 않다면 (새로 지정을 해준다면) //생선된 인스턴스의 프로퍼티에 각각 값 할당 (새로..

[iOS 프로그래밍을 위한 스위프트 기초] Ch2. 다양한 표현 및 확장 - 21. 상속 (클래스의 상속)
빌딩을 상속 받고 싶다 스위프트 상속 - 상속은 클래스, 프로토콜에서 가능 - 열거형, 구조체에서는 상속 불가 - 스위프트의 클래스는 단일 상속. 다중 상속을 지원하지 않음 클래스 상속 문법 //클래스 상속 문법 class 이름: 상속받을 클래스 이름 { 구현부 } 사용 - final : 재정의(override) 방지 - static : static으로 타입 메소드 만들면 재정의 불가능 - class : class로 타입 메소드 만들면 재정의 가능 - final + class : class 앞에 final을 붙이면 static 키워드를 사용한 것과 동일하게 동작. final class = static - override : 부모 클래스의 메소드 재정의