왕논의 연구실

패스트캠퍼스 챌린지 9일차(수정) 본문

강의/강의 챌린지(iOS 앱 개발 올인원 패키지 Online)

패스트캠퍼스 챌린지 9일차(수정)

ywangnon 2021. 11. 9. 21:18

9일차는 함수의 고급기능을 공부하였습니다.

 

함수를 사용할 때 기능이 같지만 처리하는 데이터가 다른 경우가 있습니다. 예를 들어 내가 가진 돈을 보여주는 함수를 만든다고 했을 때, 돈을 보여주는 기능은 같지만, 어느나라 돈이냐에 따라서 표기나 환율 등을 다르게 표기할 수도 있습니다. 그럴때 사용하는게 오버로드입니다.

 func printTotalPrice(price: Int, count: Int) {
     print("Total Price: \(price * count)")
 }
 ​
 func printTotalPrice(price: Double, count: Double) {
     print("Total Price: \(price * count)")
 }
 ​
 func printTotalPrice(가격: Double, 갯수: Double) {
     print("Total Price: \(가격 * 갯수)")
 }

위의 함수는 모두 일을 하지만, 처리하는 데이터나 파라미터를 어떻게 작성하느냐에 따라서 다른 함수로 인식하게 합니다.

 

함수의 파라미터는 기본적으로 상수입니다. 이 값은 변경시킬 수 없습니다.

만약 이 값을 변경하고 싶을 때는 inout키워드를 사용하여 직접 변수를 가져오게 합니다.

변수를 직접 가져오기때문에 값을 바꿀 수 있습니다.

사용할 때는 반드시 &기호를 앞에 넣어서 사용해줍니다.

 //func incrementAndPrint(_ value: Int) {
 //   value += 1
 //   print(value)
 //}
 // 에러
 ​
 var value = 3
 func incrementAndPrint(_ value: inout Int) {
     value += 1
     print(value)
 }
 
 // 사용
 incrementAndPrint(&value)

 

이 외에도 함수의 파라미터로 함수를 넣어서 사용할 수 있습니다.

실습사진 1

변수를 사용하다보면 값이 없음을 표현하고 싶을 때가 있습니다. 이때 착각하는게 숫자로 0이 아닐까 싶을 수도 있습니다. 하지만 0은 그 자체로 숫자입니다. 이때 사용하는게 nil입니다.

 var carName: String? = "Tesla"
 carName = nil
 carName = "탱크"

변수를 선언할 때, 타입의 뒤에 ?를 입력하여 옵셔널, 값이 없을 수도 있음을 표현합니다.

 

이 옵셔널은 값이 없을 수도 있기때문에 오류를 일으킬 가능성이 있습니다. 그래서 옵셔널을 받아서 처리할 때는 조심해서 값이 있음을 확인한 수 처리해야 합니다. 그 처리방법에는 4가지가 있습니다.

  • Forced unwrapping > 억지로 박스를 까보기
  • Optional binding(if let) > 부드럽게 박스를 까보자 1
  • Optional binding(guard) > 부드럽게 박스를 까보자 2
  • Nil coalescing > 박스를 까서 값이 없으면, 디폴트 값을 줘보자

 

첫번째는 강제언래핑입니다. 뒤에 !를 넣어서 값이 있으니 처리하라고 강제합니다. 그런데 이렇게 하고선 값이 없으면 당연히 에러가 납니다.

 var carName: String? = "Tesla"
 print(carName!)
 ​
 carName = nil
 // print(carName!) 에러

 

다음은 옵셔널 바인딩입니다. if let으로 변수를 선언해서 옵셔널의 값을 넣어줍니다. 이 경우 값이 있으면 if이 처리하고 없으면 else문이 처리합니다.

 if let unwrappedCarName = carName {
     print(unwrappedCarName)
 } else {
     print("Car Name 없다.")
 }

 

다음은 guard문을 이용한 옵셔널 바인딩입니다. if문을 사용하면 복잡도가 올라갈 수 있습니다. 길게 작성하지 않고 빠르게 옵셔널 바인딩처리하여 처리된 값을 사용할 때 사용합니다.

 func printParsedInt(from: String) {
     guard let parsedInt = Int(from) else {
         return
     }
     
     print(parsedInt)
 }

 

다음은 값이 없을 경우를 대비하여 기본값을 설정해주는 방법입니다. 대입하는 옵셔널 값 뒤에 ?? 키워드를 넣고 그 뒤에 기본값을 넣어줍니다. 이러면 옵셔널이 nil인 경우 기본값을 넣어줍니다.

 carName = nil
 let myCarName: String = carName ?? "모델 S"

 

실습사진 2

 

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

 

https://bit.ly/3FVdhDa

 

수강료 100% 환급 챌린지 | 패스트캠퍼스

딱 5일간 진행되는 환급챌린지로 수강료 100% 환급받으세요! 더 늦기전에 자기계발 막차 탑승!

fastcampus.co.kr

 

#패스트캠퍼스 #패캠챌린지 #직장인인강 #직장인자기계발 #패스트캠퍼스후기 #