본문 바로가기

develop8

Swift-11. 고차 함수 - map, filter, reduce ** edwith - Swift 프로그래밍 입문 강의 참고 ** # 고차함수 # - 고차함수(Higher-order-function)는 '다른 함수를 전달인자로 받거나 함수 실행의 결과를 함수로 반환하는 함수'를 말합니다. - 고차함수 중에서도 map, filter, reduce 함수는 스위프트 표준 라이브러리의 컨테이너 타입(Array, Set, Dictionary 등)에 구현되어 있습니다. [ map ] - 컨테이너 내부의 기존 데이터를 변형하여 새로운 컨테이너를 생성 /* 변형하고자 하는 numbers와 변형 결과를 받을 dn, str 선언 */ let numbers: [Int] = [0, 1, 2, 3, 4] var dn: [Int] var str: [String] /* 1. 기존의 for 구문 .. 2023. 2. 24.
Swift-10. 오류 처리 - throw, rethrows, defer ** edwith - Swift 프로그래밍 입문 강의 참고 ** # 오류 발생 # - 스위프트에서 오류는 Error라는 프로토콜을 준수하는 타입의 값을 통해 표현됩니다. - Error 프로토콜은 사실 상 요구사항이 없는 빈 프로토콜일 뿐이지만, 오류를 표현하기 위한 타입(주로 열거형)은 이 프로토콜을 채택합니다. [ 오류 표현 ] - Error 프로토콜과 (주로) 열거형을 통해서 오류를 표현 /* 자판기 동작 오류의 종류를 표현한 VendingMachineError 열거형 */ enum VendingMachineError: Error { case invalidInput case insufficientFunds(moneyNeeded: Int) case outOfStock } [ 함수에서 발생한 오류 던지기.. 2023. 2. 24.
Swift-9. 프로토콜(protocol), 익스텐션(extension) ** edwith - Swift 프로그래밍 입문 강의 참고 ** # 프로토콜(protocol) # - 구조체, 클래스, 열거형 등에 프로토콜을 이용해서, 어떠한 기능을 구현해놔야 하는지 알려줍니다. - 클래스 상속은 클래스끼리만 가능했던 것과 달리, 프로토콜을 따르는 것은 클래스 뿐만 아니라 value type인 struct, enum에도 적용 가능합니다. - 따라서 보다 넓은 확장성과 재사용성을 보장합니다. protocol pName { /* 프로토콜 정의 */ } [ 프로퍼티 요구 ] protocol Talkable { /* 프로퍼티 요구 - 항상 var 사용 */ var topic: String { get set } // 읽고 쓰기 모두 가능 var language: String { get } //.. 2023. 2. 24.
Swift-8. assert, precondition, guard ** edwith - Swift 프로그래밍 입문 강의 참고 ** assert - assert(_:_:file:line:) 함수 사용 - 디버깅 모드에서만 동작 (실제 배포 환경에서는 동작 X) - 예상했던 조건의 검증을 위해 사용 - 디버깅 모드에서 assert() 등을 통해 애플리케이션이 죽으면, 죽은 위치가 확실하게 보여집니다. 이를 통해 버그를 방지하거나 디버그에 유용한 정보로 사용할 수 있습니다. var someInt: Int = 0 // 검증 조건과, 검증 실패시 나타날 문구 작성 // assert(someInt == 0, "someInt != 0") someInt = 1 assert(someInt == 0) // 동작 중지, 검증 실패 assert(someInt == 0, "someInt !=.. 2023. 2. 24.
Swift-5. 인스턴스 생성 및 소멸 ** edwith - Swift 프로그래밍 입문 강의 참고 ** # init / deinit # 인스턴스를 생성하는 이니셜라이저(init)와 클래스의 인스턴스가 소멸될 때 호출되는 디이니셜라이저(deinit) 프로퍼티 초기값 - swift의 모든 인스턴스는 초기화와 동시에 모든 프로퍼티에 유효한 값이 할당되어 있어야 함. - 프로퍼티에 미리 기본값을 할당해두면 인스턴스가 생성됨과 동시에 초기값을 지니게 됨. class PersonA { // 모든 저장 프로퍼티에 기본값 할당 var name: String = "unknown" var age: Int = 0 var nickName: String = "been" } // 인스턴스 생성 let eenii: PersonA = PersonA() // 기본값이 인스.. 2023. 2. 24.
Swift-4. 클로저, 프로퍼티 ** edwith - Swift 프로그래밍 입문 강의 참고 ** # 클로저 # - 실행가능한 코드 블럭 - 함수와 다르게 이름정의는 필요하지 않지만, 매개변수 전달과 변환 값이 존재할 수 있다는 점이 동일 - 함수는 이름이 있는 클로저 - 일급객체로 전달인자, 변수, 상수 등에 저장 및 전달이 가능 // 클로저 기본 문법 { (/* 매개변수 목록*/) -> /* 반환 타입 */ in /* 실행 코드 */ } // 클로저 사용 // sum이라는 상수에 클로저 할당 let sum: (Int, Int) -> Int = { (a: Int, b: Int) in return a + b } let sumResult: Int = sum(1, 2) print(sumResult) // 3 // 함수의 전달인자로서의 클로저.. 2023. 2. 24.
Swift-3. 구조체, 열거형 ** edwith - Swift 프로그래밍 입문 강의 참고 ** # 구조체 # - swift 대부분 타입은 구조체로 되어 있습니다. - 구조체는 값(value) 타입 - 타입이름은 대문자 카멜케이스를 사용하여 정의 // 구조체 기본 문법 struct /*이름*/ { /* 구현부분 */ } // 구조체 property 및 method 구현 struct Sample { // 가변 프로퍼티 : 값 변경 가능 var mutableProperty: Int = 100 // 불변 프로퍼티 : 값 변경 불가능 let immutableProperty: Int = 100 // 타입 프로퍼티 : static 키워드 사용 - 타입 자체가 사용하는 프로퍼티 static var typeProperty:Int = 100 // 인스.. 2023. 2. 24.
Swift-2. 반복문, 옵셔널/옵셔널체이닝/옵셔널바인딩 ** edwith - Swift 프로그래밍 입문 강의 참고 ** # 반복문 # for - in 구문 // for-in 구문 기본 형태 for item in items { /* 실행 구문 */ } // 예시 var number = [1, 2, 3] let people = ["yagom": 10, "eric": 15, "mike": 12] for num in number { print(num) } for (name, age) in people { print("\(name): \(age)") } repeat - while 구문 // repeat-while 구문 기본 형태 repeat { /* 실행 구문 */ } while /* 조건 */ // 예시 repeat { number.removeLast() } whi.. 2023. 2. 24.