728x90

1월 27일 목요일 / 4일 차

 


 

CH01

21. 익스텐션

22. 열거형

23. 옵셔널 체이닝

24. try-catch

25. 클로저

26. 고차함수

 

 

 

 

CH01_21 실습

 

 

 

익스텐션

기존의 클래스, 구조체, 열거형, 프로토콜에 새로운 기능을 추가하는 기능

 

중요 내용 예시 코드
익스텐션이 타입에 추가할 수 있는 기능
 - 연산 타입 프로퍼티 / 연산 인스턴스 프로퍼티
 - 타입 메서드 / 인스턴스 메서드
 - 이니셜라이저
 - 서브스크립트
 - 중첩 타입
 - 특정 프로토콜을 준수할 수 있도록 기능 추가

 새로운 기능을 추가할 수는 있지만 기존에 존재하는 기능을 오버라이드 할 순 없다


extension SomeType {
    추가기능
 }
extension Int {
    var isEven: Bool {
        return self % 2 == 0
    }
    
    var isOdd: Bool {
        return self % 2 == 1
    }
}

var number = 3
number.isOdd
number.isEven

 익스텐션은 연산 프로퍼티를 추가할 수 있지만 저장 프로퍼티는 추가할 수 없다

☞ 타입에 정의되어있는 기존의 프로퍼티의 프로퍼티 감시자를 추가할 수 없다

 

 

 

열거형

연관성이 있는 값을 모아 놓은 것

 

중요 내용 예시 코드
- 특정 타입의 값을 원시값으로 가지게 하려면 열거형 이름 오른쪽에 타입을 명시해주면 된다
- 변수를 열거형 타입으로 지정해주면 컴파일러가 알아서 추론하여 열거형 이름 작성 생략가능
- 열거형은 switch와 사용하면 다양하게 활용할 수 있다
- 항목의 연관 값을 추가하려면 항목옆에 연관 값의 타입을 소괄호로 묶어주면 됨
- 열거형 인스턴스를 생성할때 매개 변수로 원시 값을 넘겨주면 원시 값을 가지고 열거형을 반환하게 할 수 있다
enum CompassPoint: String
    case north = "북"
    case south = "남"
    case east = "동"
    case west = "서"
}

var direction = CompassPoint.east
direction = .west

 

 

 

옵셔널 체이닝

옵셔널에 속해 있는 nil 일지도 모르는 프로퍼티, 메서드, 서브스크립션 등을 가져오거나 호출할 때 사용할 수 있는 일련의 과정

 

중요 내용 예시 코드
- 옵셔널에 값이 있다면 프로퍼티 메서드 등을 호출할 수 있고, 옵셔널이 nil 이라면 프로퍼티 메서드 등은 nil을 반환한다.
- ? 로 옵셔널체이닝을 하면 접근한 프로퍼티의 값은 항상 옵셔널에 감싸져있다.
- ! 로 옵셔널체이닝을 하면 옵셔널 프로퍼티를 강제 언래핑하여 접근하기 때문에 값이 옵셔널로 감싸져있지 않다
struct Developer {
    var name: String
}


struct Company {
    let name: String
    var developer: Developer?
}


var developer = Developer(name: "han")
var company = Company(name: "gunter", developer: developer)
print(company.developer)
print(company.developer?.name)
print(company.developer!.name)

 

 

 

에러 처리

프로그램 내에서 에러가 발생한 상황에 대해 대응하고 이를 복구하는 과정

중요 내용 예시 코드


swift의 에러 처리

 - 발생(throwing)
 - 감지(catching)
 - 전파(propagating)
 - 조작(manipulating)


swift 오류를 처리하는 4가지 방법
 - 함수에서 발생한 오류를 해당함수를 호출한 코드에 전파하는 방법
 - do-catch구문을 이용해서 오류를 처리
 - 옵셔널 값으로 오류를 처리
 - 오류가 발생하지 않을 것이라고 확신하는 방법


do {
    try 오류 발생 가능코드
 } catch 오류 패턴 {
    처리 코드
 }
do {
    try checkPhoneBatteryStatus(batteryLevel: 20)
} catch PhoneError.unknown {
    print("알 수 없는 에러입니다.")
} catch PhoneError.batteryLow(let batteryLebel) {
    print("배터리 전원 부족 남은 배터리: \(batteryLebel)%")
} catch {
    print("그 외 오류 발생 : \(error)")
}

☞ try? 를 사용하면 오류를 옵셔널 값으로 변환하여 처리 가능, 동작하던 코드가 오류를 던지면 코드의 반환 값은 nil이 된다.

☞ try! 는 try? 와 유사하지만 throwing 함수나 메서드가 에러를 던져주지 않을 거라고 확신할 때 사용하는 방법

 

 

 

클로저

코드에서 전달 및 사용할 수 있는 독립 기능 블록이며, 일급 객체의 역할을 할 수 있음

 

중요 내용 예시 코드


일급 객체란 전달 인자로 보낼 수 있고, 변수/상수 등으로 저장하거나 전달할 수 있으며, 함수의 반환 값이 될 수도 있다.
보통 클로저라 하면 이름없는 함수, 익명 함수를 지칭, 네임드,언네임드 둘 다 포함하지만 보통 언네임드 클로져를 말함
 - Named closure
 - Unnamed closure


- 클로져가 조금 길어지거나 가독성이 떨어지면 후행 클로져 기능을 사용하면 됨, 단 후행 클로져는 맨 마지막 매개변수로 전달되는 클로져에만 해당.
- 매개변수로 클로져 여러개를 전달할 때는 맨 마지막 클로져만 후행 클로져를 사용 가능


{ (매개 변수) -> 리턴 타입 in  
    실행 구문
 }
let hello = { () -> () in
    print("hello")
}


hello()

 

 

 

 

고차 함수

다른 함수를 전달 인자로 받거나 함수 실행의 결과를 함수로 반환하는 함수

 

중요 내용 예시 코드
map let numbers = [0,1,2,3]
let mapArray = numbers.map { (number) -> Int in
    return number * 2
}
print("map \(mapArray)")
filter let intArray = [10,5,20,13,4]
let filterArray = intArray.filter { $0 > 5 }
print("filter \(filterArray)")
reduce let someArray = [1,2,3,4,5]
let reduceResult = someArray.reduce(0) {
    (result: Int, element: Int) -> Int in
    print("\(result) + \(element)")
    return result + element
}

print("reduce \(reduceResult)")

 


 

4일 차 코드 및 깃허브 Push

 

복습할 내용

 

옵셔널 체이닝 사용 방법

에러 처리 try-catch 외의 내용

클로저 전부다

고차함수 전부다

 

 

 

 

 

오늘의 공부 후기

 

어느새 수강 4일 차에 접어들었습니다.

스위프트에서 가장 기본적인 문법만 요약해놓은 챕터 1을 공부하면서 어려운 점도 많았지만

다른 언어와 비교했을 때 스위프트 언어만의 특성을 제대로 알 수 있게 되었습니다.

 

실습에 앞서 복습할 내용들을 한번 더 수강하고 정리하여 기본적인 문법들을 완벽히 숙지하고 넘어가겠습니다.

5일 차는 본격적으로 앱 개발 실습을 진행할 예정입니다. 

강의를 신청하면서 가장 기대했던 부분이기 때문에 최대한 열심히 해보겠습니다

 

 

 

 

 

 

 

 

 

 

 

 

챕터 1을 진행하면서 작성한 playground 파일들은 깃허브에 올려두었습니다.

https://github.com/cocobomi/iOS_App_Class 

 

 

 

 

https://bit.ly/37BpXi

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

 

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

 

 

 

 

728x90

+ Recent posts