iOS-Study (23) 썸네일형 리스트형 iOS Study : 7주차 - 프로토콜 지향 프로그래밍(P.O.P) 프로토콜 지향 프로그래밍 - P.O.P 애플에서 스위프트는 프로토콜 지향 언어(Protocol-Oriented Language)라고 했다. 스위프트는 클래스로 구현된 타입이 없고 대부분 구조체로 기본 타입이 구현되어 있는데 이는 프로토콜과 익스텐션의 조화를 통해 가능한 것이다. 프로토콜 초기 구현 익스텐션을 통한 프로토콜의 실제 구현 // 무언가를 수신할 수 있는 기능 protocol Receiveable { func received(data: Any, from: Sendable) } extension Receiveable { // 메시지를 수신합니다. func received(data: Any, from: Sendable) { print("\(self) received \(data) from \(fro.. iOS Study : 7주차 - 접근제어(모듈과 소스파일, 접근수준, 접근제어 구현 참고사항, private와 fileprivate, 읽기 전용 구현) 접근제어 코드끼리 상호작용을 할 때 파일 간 또는 모듈 간에 접근을 제한할 수 있는 기능 접근제어를 통해 코드의 상세 구현은 숨기고 허용된 기능만 사용하는 인터페이스를 제공할 수 있다. 접근제어의 필요성 외부에서 보거나 접근하면 안되는 코드가 있는 경우 꼭 필요한 부분만 제공해야 하는데 전체 코드가 노출될 가능성이 있을 때 접근제어를 이용한다. 모듈 모듈은 배포할 코드의 묶음 단위이다. 통상 하나의 프레임워크나 라이브러리, 애플리케이션이 모듈 단위가 될 수 있다. 스위프트에서는 import 키워드를 사용해 불러온다. 소스파일 소스파일은 하나의 스위프트 소스 코드 파일을 의미한다. 스위프트에서 보통 파일 하나에 타입 하나만 정의하지만, 때로는 소스파일 하나에 여러 타입이나 함수 등 많은 것을 정의하거나 구.. iOS Study : 6주차 - Simple Value / Control Flow / Functions and Closures / Object and Classes Simple Value let은 상수값을 만드는데 사용되고 , var은 변수값을 만드는데 사용된다. 상수나 변수를 만들 때 값을 선언하면 컴파일러에서 해당 자료형을 추론하기 때문에 자료형은 생략해도 된다. 문자열에 값을 표현하기 위해서는 \()에서 괄호 안에 변수명을 넣어주면 된다. Control Flow if문이나 switch문을 사용하여 조건을 명시하고 for-in, while, repeat-while 구문을 사용하여 반복 실행한다. if문을 사용할 때는 실행 코드가 한줄이더라도 { } 를 사용해야 한다. 명령문에서 if 조건의 반환값은 Bool 타입이어야 한다. switch문에서는 case 끝에 break를 작성할 필요가 없다. for 문에서 범위를 표현할 때 ...을 사용한다. ex) 0 ... .. iOS Study : 6주차 - 오류처리 / 고차함수 오류처리(error handling) 스위프트에서 오류(Error)는 Error라는 프로토콜을 준수하는 타입의 값을 통해 표현된다. Error 프로토콜은 사실상 요구사항이 없는 빈 프로토콜일 뿐이지만, 오류를 표현하기 위한 타입은 이 프로토콜을 채택한다. 오류표현 Error 프로토콜과 주로 열겨형을 통해서 오류를 표현한다. enum 오류종류이름: Error { case 종류1 case 종류2 case 종류3 //... } enum VendingMachineError: Error { case invalidInput case insufficientFunds(moneyNeeded: Int) case outOfStock } 함수에서 발생한 오류 던지기 자판기 동작 도중 발생한 오류를 던지는 메서드를 구현해 보자.. iOS Study : 6주차 - 타입 확장(프로토콜, 익스텐션) 프로토콜 특정 역할을 수행하기 위한 메서드, 프로퍼티, 이니셜라이저 등의 요구사항을 정의한다. 구조체, 클래스, 열거형은 프로토콜을 채택해서 특정 기능을 수행하기 위한 프로토콜의 요구사항을 실제로 구현할 수 있다. 어떤 프로토콜의 요구사항을 모두 따르는 타입은 그 프로토콜을 준수한다고 표현한다. 프로토콜의 요구사항을 충족시키려면 프로토콜이 제시하는 기능을 모두 구현해야 한다. 프로토콜은 기능을 정의하고 제시 할 뿐, 스스로 기능을 구현하지는 못한다. 정의 문법 protocol 프로토콜 이름 { /* 정의부 */ } 프로토콜 구현 protocol Talkable { // 프로퍼티 요구 // 프로퍼티 요구는 항상 var 키워드를 사용합니다 // get은 읽기만 가능해도 상관 없다는 뜻이며 // get과 se.. iOS Study : 5주차 - SwiftUI 암호화 된 입력값을 보여주는 방법 SecureField를 사용한다. import SwiftUI struct ContentView: View { @State var myPassword: String = "" @State var isSecureMode: Bool = true var body: some View { VStack { Text(myPassword) HStack { if isSecureMode { SecureField("Password", text: $myPassword ) .textFieldStyle(.roundedBorder) } else { TextField("Password", text: $myPassword) .textFieldStyle(.roundedBorder) } Button { is.. iOS Study : 5주차 - 옵셔널 심화(옵셔널 체이닝, nil 병합 연산자, 타입 캐스팅) / assert와 guard 옵셔널 체이닝(Optional Chaining) 옵셔널 체이닝은 옵셔널 요소 내부의 프로퍼티로 또 다시 옵셔널이 연속적으로 연결되는 경우에 유용하게 사용할 수 있다. 사용 class Person { var name: String var job: String? var home: Apartment? init(name: String) { self.name = name } } class Apartment { var buildingNumber: String var roomNumber: String var `guard`: Person? var owner: Person? init(dong: String, ho: String) { buildingNumber = dong roomNumber = ho } } let yag.. iOS Study : 5주차 - 타입 심화(프로퍼티, 상속) 프로퍼티 프로퍼티는 클래스, 구조체, 열거형과 연관된 값이다. 타입과 관련된 값을 연산할 수도, 저장할 수도 있다. 종류 인스턴스 저장 프로퍼티 타입 저장 프로퍼티 인스턴스 연산 프로퍼티 타입 연산 프로퍼티 지연 저장 프로퍼티 저장 프로퍼티와 연산 프로퍼티 프로퍼티는 구조체, 클래스, 열거형 내부에 구현이 가능하지만 열거형 내부에는 연산 프로퍼티만 구현할 수 있다. 연산 프로퍼티는 var로만 선언 가능하다. 연산 프로퍼티는 읽기 전용으로는 구현 가능하지만, 쓰기 전용으로는 불가능 하다. 읽기 전용으로 구현하려면 get 블럭을 작성해 주고, 읽기와 쓰기는 get set블럭을 모두 구현해야 한다. set 블록에서 암시적 매개변수 newValue를 사용할 수 있다. struct Student { // 인스턴스.. 이전 1 2 3 다음