본문 바로가기

etc/Swift28

추가적으로 공부해야할 것들 제네릭(Generics) 서브스크립트(Subscript) 접근수준(Access Control) ARC(Automatic Reference Counting) 중첩타입(Nested Types) 사용자정의 연산자(Custom Operators) 오류 처리(Error Handling) 불명확 타입(Opaque Types) 프로토콜 지향 프로그래밍(Protocol Oriented Programming) 공부하자 2021. 5. 28.
고차함수 오늘은 고차함수에 대해 공부했다. 고차함수란 전달인자로 함수를 전달받거나 함수실행의 결과를 함수로 반환하는 함수이다. 그냥 한마디로 하자면, 유용한 함수들 알려주는거다. map map 함수는 컨테이너 내부의 기존 데이터를 변형하여 새로운 컨테이너를 생성한다. - for 구문 사용 let numbers: [Int] = [0,1,2,3,4] var doubledNumbers: [Int] var strings: [String] //MARK: for 구문 사용 doubledNumbers = [Int]() strings = [String]() for number in numbers { doubledNumbers.append(number * 2) strings.append("\(number)") } print(do.. 2021. 5. 28.
오류 처리 오늘은 오류처리에 대해서 공부하였다. 보통 Error 프로토콜과 열거형을 통해서 오류를 표현한다 정의 enum 오류종류이름: Error { case 종류1 case 종류2 case 종류3 //... } 코드는 이렇게 작성한다. 보통 열거형으로 사용한다. 자판기 동작 오류의 종류를 표현한 VendingMachineError 열거형 enum VendingMachineError: Error { case invalidInput case insufficientFund(moneyNeeded: Int) case outOfStock } 이렇게 에러의 종류들을 생성해준다. 함수에서 발생한 오류 던지기 class VendingMachine { let itemPrice: Int = 100 var itemCount: Int .. 2021. 5. 28.
익스텐션(Extension) 오늘은 익스텐션에 대해 공부했다. 익스텐션은 구조체, 클래스, 열거형, 프로토콜 타입에 새로운 기능을 추가할 수 있는 기능이다. (혁신적이다. ㄹㅇ 개좋다) 기능을 추가하려는 타입의 구현된 소스 코드를 알지 못하거나 볼 수 없다고 해도, 타입만 알고 있다면 그 타입의 기능을 확장할 수도 있다. 익스텐션으로 추가 할 수 있는 기능 연산 타입 프로퍼티 / 연산 인스턴스 프로퍼티 타입 메서드, 인스턴스 메서드 이니셜라이저 서브스크립트 중첩 타입 특정 프로토콜을 준수할 수 있도록 기능 추가 단, 기존에 존재하는 기능을 재정의할수는 없다. 정의 extension 확장할 타입 이름 { /* 타입에 추가될 새로운 기능 구현 */ } // 익스텐션은 기존에 존재하는 타입이 // 추가적으로 다른 프로토콜을 채택할 수 있.. 2021. 5. 28.
프로토콜(Protocol) 오늘은 프로토콜에 대해 공부했다. 프로토콜은 우리가 잘 알고있는 단어의 뜻인 '규약'과 관련이 있다. 프로토콜은 특정 역할을 수행하기 위한 메서드, 프로퍼티, 이니셜라이저 등의 요구사항을 정의한다. 구조체, 클래스, 열거형(enum)은 프로토콜을 채택(약간 상속느낌이다)해서 프로토콜의 요구사항을 실제로 구현할 수 있다. 어떤 프로토콜의 요구사항을 모두 따르는 타입은 ' 프로토콜을 준수한다' 고 표현한다. 프로토콜의 요구사항을 충족시키려면 프로토콜이 제사히는 기능을 모두 구현해야 한다. 이미 채택한 것들은 무조건 구현해야 컴파일 에러가 안난다. 정의 protocol 프로토콜 이름 { /* 정의부 */ } 위와 같은 형식으로 구현한다. protocol Talkable { // 프로퍼티 요구 // 프로퍼티 요.. 2021. 5. 28.
assert와 guard 오늘은 동작을 중지시킬 수 있는 키워드인 assert와 guard를 배워보았다. 두 키워드는 애플리케이션 동작 도중에 생성하는 다양한 결과값을 동적으로 확인하고 안전하게 처리할 수 있도록 확인하고 빠르게 처리할 수 있다. 그래서 많이 사용할 듯 싶다 Assertion var someInt: Int = 0 assert(someInt == 0, "someInt != 0") someInt = 1 // assert(someInt == 0) // 동작 중지, 검증 실패 // assert(someInt == 0, "someInt != 0") // 동작 중지, 검증 실패 // assertion failed: someInt != 0: file guard_assert.swift, line 26 func functionW.. 2021. 5. 28.

IT_learning's Commit