본문 바로가기

프로그래밍 [KOR]/Swift

(27)
Swift의 오류처리(Error Handling) 1. 오류 처리 •스위프트에서 오류(Error)는 Error라는 프로토콜을 준수하는 타입의 값을 통해 표현됨 •Error 프로토콜은 사실상 요구사항이 없는 빈 프로토콜일 뿐이지만, 오류를 표현하기 위한 타입(주로 열거형)은 이 프로토콜을 채택 •스위프트의 열거형은 오류의 종류를 나타내기에 아주 적합한 기능 •연관 값을 통해 오류에 관환 부가 정보를 제공할 수도 있음 이번 예제에는 프로그램 내에서 자판기를 작동시키려고 할 때 발생하는 오류상황을 구현 2. 오류 표현 •Error 프로토콜과 (주로)열거형을 통해서 오류를 표현 12345enum VendingMachineError: Error { case invalidInput case insufficientFunds(moneyNeeded: Int) case ..
Swift의 익스텐션(Extension) 1. 익스텐션익스텐션(Extension) 은 스위프트의 강력한 기능 중 하나익스텐션은 구조체, 클래스, 열거형, 프로토콜 타입에 새로운 기능을 추가 할 수 있는 기능기능을 추가하려는 타입의 구현된 소스 코드를 알지 못하거나 볼 수 없다 해도, 타입만 알고 있다면 그 타입의 기능을 확장 가능 연산 타입 프로퍼티 / 연산 인스턴스 프로퍼티타입 메서드 / 인스턴스 메서드이니셜라이저서브스크립트중첩 타입특정 프로토콜을 준수할 수 있도록 기능 추가** 익스텐션은 타입에 새로운 기능을 추가할 수는 있지만, 기존에 존재하는 기능을 재정의할 수는 없음 이 둘은 비슷해보이지만 실제 성격은 많이 다름클래스의 상속은 클래스 타입에서만 가능하지만 익스텐션은 구조체, 클래스, 프로토콜 등에 적용이 가능.또 클래스의 상속은 특정 ..
Swift의 프로토콜(Protocol) 1. 프로토콜 •프로토콜(Protocol)은 특정 역할을 수행하기 위한 메서드, 프로퍼티, 기타 요구사항 등의 청사진을 정의 •구조체, 클래스, 열거형은 프로토콜을 채택(Adopted) 해서 특정 기능을 수행하기 위한 프로토콜의 요구사항을 실제로 구현 가능 •어떤 프로토콜의 요구사항을 모두 따르는 타입은 그 프로토콜을 준수한다(Conform)고 표현 •타입에서 프로토콜의 요구사항을 충족시키려면 프로토콜이 제시하는 청사진의 기능을 모두 구현해야 함. 즉, 프로토콜은 기능을 정의하고 제시 할 뿐이지 스스로 기능을 구현하지 않음 2. 정의 •protocol 키워드를 사용하여 정의 123protocol 프로토콜 이름 { /*정의부*/}cs 3. 구현 •프로퍼티 요구는 항상 var 키워드를 사용 •get은 읽기만..
Swift의 assert와 guard 애플리케이션이 동작 도중에 생성하는 다양한 연산 결과값을 동적으로 확인하고 안전하게 처리할 수 있도록 확인하고 빠르게 처리할 수 있음 1. Assertion •assert(_:_:file:line:) 함수를 사용 •assert함수는 디버깅 모드에서만 동작 •배포하는 애플리케이션에서는 제외됨 •예상했던 조건의 검증을 위하여 사용 1234567891011121314151617181920212223var someInt: Int = 0 // 검증 조건과 실패시 나타날 문구를 작성// 검증 조건에 부합하므로 지나감assert(someInt == 0, "someInt !=0") someInt = 1//assert(someInt == 0) // 동작 중지, 검증 실패//assert(someInt == 0, "some..
Swift의 타입 캐스팅 1. 스위프트 타입 캐스팅 •인스턴스의 타입을 확인하는 용도 •클래스의 인스턴스를 부모 혹은 자식 클래스의 타입으로 사용할 수 있는지 확인하는 용도 •is, as를 사용 * 형변환은 'ex. let someDouble = Double(2)' 타입 캐스팅이 아니라 새로운 값을 생성하는 것 2. 예제 클래스 1234567891011121314151617181920class Person { var name: String = "" func breath() { print("숨을 쉽니다") }} class Student: Person { var school: String = "" func goToSchool() { print("등교를 합니다") }} class UniversityStudent: Student { v..
Swift의 옵셔널 체이닝과 nil 병합 연산자 1. 옵셔널 체이닝 •옵셔널 체이닝은 옵셔널의 내부의 내부의 내부로 옵셔널이 연결되어 있을 때 유용하게 활용할 수 있음 •매번 nil 확인을 하지 않고 최종적으로 원하는 값이 있는지 없는지 확인할 수 있음 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778// 예제 클래스// 사람 클래스class Person { var name: String var job: String? var home: Apartment? init(name: String) { self.name = name }}// 사람이 사..
Swift의 인스턴스의 생성과 소멸 •프로퍼티 초기값•이니셜라이저 init - 인스턴스를 생성•디이니셜라이저 deinit - 클래스의 인스턴스가 소멸될 때 호출됨 1. 프로퍼티 초기값 •스위프트의 모든 인스턴스는 초기화와 동시에 모든 프로퍼티에 유효한 값이 할당되어 있어야 함 •프로퍼티에 미리 기본값을 할당해두면 인스턴스가 생성됨과 동시에 초기값을 지니게 됨 123456789101112131415class PersonA { // 모든 저장 프로퍼티에 기본값 할당 var name: String = "unknown" var age: Int = 0 var nickName: String = "nick"} // 인스턴스 생성let jennie: PersonA = PersonA() // 기본값이 인스턴스가 지녀야 할 값과 맞지 않다면// 생성된 인스..
Swift의 상속 1. 스위프트 상속 •상속은 클래스, 프로토콜 등에서 가능 •열거형, 구조체는 상속이 불가능 •스위프트의 클래스는 단일상속으로, 다중상속을 지원하지 않음 2. 문법 123class 이름: 상속받을 클래스 이름 { /* */}cs 3. 사용 •final 키워드를 사용하면 재정의(override)를 방지할 수 있음 •static 키워드를 사용해 타입 메서드를 만들면 재정의가 불가능 •class 키워드를 사용해 타입 메서드를 만들면 재정의가 가능 •class 앞에 final을 붙이면 static 키워드를 사용한 것과 동일하게 동작 •override 키워드를 사용해 부모 클래스의 메서드를 재정의 할 수 있음 1234567891011121314151617181920212223242526272829303132333..