Optional, Function(2022-07-07 수업4)

2022. 7. 8. 22:51SeSAC/수업정리

목차

1. Optional(옵셔널)
   옵셔널이란?

   옵셔널 오류 발생시 해결방법 

2. Function(함수)

   함수와 메서드

   Parameter & Argument(매개변수와 전달인자)

  ▶ Argument Label(외부매개변수) & Parameter Name(내부매개변수)

   매개변수 기본값

   와일드카드

3. References


1. Optional

 옵셔널이란?

-. 값을 처리하는 과정에서 오류가 발생할 가능성이 있는 값을 옵셔널 타입이라는 객체로 감싸서 반환하는 것을 말한다.

-. 옵셔널 타입은 변수, 상수에 값이 할당되지 않은 상황을 안전하게 처리하기 위한 방법이다.(오류 발생할 경우 nil값을 반환하여 오류 피함. 그렇게 하지 않으면 오류가 발생했을 때 앱이 종료됨.)

-. 옵셔널은 프로그래밍 언어 중 Swift에만 있는 개념이다.

-. 옵셔널 타입 선언 방법 : 타입 뒤에 "?" 문자를 쓴다. (ex. var x: Int? = 10)

-. 옵셔널에서 초기값 할당하지 않으면 nil값이다.

-. 옵셔널 타입은 Unwrapping(언래핑)해야 다른 타입과 연산 할 수 있다.

 

옵셔널에서 초기값 할당하지 않으면 nil값이다.
옵셔널 타입은 Unwrapping(언래핑)해야 다른 타입과 연산 할 수 있다.

 

 옵셔널 오류 발생시 해결방법

-. 옵셔널 오류 발생시 해결방법은 Forced Unwrapping, Optional Binding, Optional Chaining 3가지다.

-. 옵셔널 변수에 값이 있으면 옵셔널로 래핑되었다고 하는데, 래핑된 값을 언래핑된 타입으로 변환하여 에러를 해결한다.

 

▷ Forced Unwrapping(강제언래핑)

-. 옵셔널 타입 언래핑 방법 : 변수명 뒤에 "!" 문자를 쓴다.(ex. var x: Int? = 10 일 때, x!)

-. 가장 간단하지만 값이 nil일 경우 !를 사용하면 앱이 꺼진다.(언래핑할 값이 없기 때문)

-. 문자열 보간법 사용시 옵셔널 타입이 있다면 반드시 언래핑을 해주어야 한다.(문자열 보간법 내 요소는 항상 값이 존재해야하기 때문)

 

문자열 보간법 사용시 반드시 언래핑

▷ Optional Binding(옵셔널 바인딩)

-. 옵셔널에 할당된 값을 임시 변수 또는 상수에 할당하여 언래핑한다.

-. ?? 또는 조건문을 사용하여 표현한다.

 

옵셔널 바인딩 기본방식, 예시
??를 사용한 옵셔널 바인딩
조건문을 사용한 옵셔널 바인딩

 

▷ Optional Chaining(옵셔널 체이닝)

-. 옵셔널 체이닝은 nil일 수도 있는 프로퍼티, 메소드, 서브스크립트에 질의하는 과정이다. 어떤 프로퍼티나 메소드까지 깊숙이 접근해야 할 때 거쳐가는 것들 중 옵셔널 타입이 하나라도 있다면 옵셔널을 표현해주는 것이 옵셔널 체이닝이다.

-. 그 질의문 중 어느 하나라도 값이 nil이면 전체 결과는 nil이 된다. 옵셔널이 연속으로 연결되는 경우에 유용하게 쓸 수 있다.
-. 옵셔널 체이닝은 옵셔널값 뒤에 ?를 붙여서 표현할 수 있다. 옵셔널 체이닝 값은 항상 옵셔널값이 된다.

 

if let을 할 때 ?가 되게 많은데, 잘 보면 ?가 붙은 것들은 다 옵셔널 타입들이다. 그러니까, nil일 수도 아닐 수도 있는 값들인 것이다. 이처럼 어떤 프로퍼티나 메소드까지 깊숙이 접근해야 할 때 거쳐가는 것들 중 옵셔널 타입이 하나라도 있어서 저렇게 표현해야 하는 것들이 옵셔널 체이닝이다. 만약 중간에 nil이 나오면 중단되고 else 구문으로 가게 된다. 여기서는 home에 guard가 없으므로 "문제가 있습니다"가 출력된다.

2. Function

함수와 메서드

-. 상황과 위치에 따라 용어가 다를 뿐 역할은 같다.

-. Function(함수) : 모듈 전체에서 전역적으로 사용할 수 있는 함수

-. Method(메서드) : 클래스, 구조체, 열거형 등 특정 타입과 연관되어 사용하는 함수

 

함수와 메서드 관계

 

▶ Parameter & Argument(매개변수와 전달인자)

-. Parameter(매개변수)함수 안에서 정의되어 있는 변수를 말한다.

-. Argument(전달인자)는 함수를 호출 할 때 전달되는 실제 값을 말한다.

 

 

▶ Argument Label(외부매개변수) & Parameter Name(내부매개변수)

-. 일반적으로 함수에서 매개변수를 정의할 때  Argument Label과 Parameter Name을 같은 이름으로 사용할 수 있지만 Argument Label을 별도로 지정하면 함수외부에서 매개변수의 역할을 보다 명확하게 알 수 있다.

-. 함수 내부에서는 외부매개변수를 사용 할 수 없고, 함수를 호출할 때는 내부매개변수를 사용할 수 없다.

 

Argument Label(외부매개변수) & Parameter Name(내부매개변수) 예시

 

▶ 매개변수 기본값

-. 매개변수가 전달되지 않을 때 기본값을 사용 할 수 있다.

-. 기본값이 없는 매개변수는 중요한 값을 전달할 가능성이 높아, 매개변수가 여러개 일 때 기본값이 없는 매개변수를 기본값이 있는 매개변수 앞에 사용 할 수 있다.(ex.print)

-. 기본값에 옵셔널 타입도 사용 가능하다.

 

기본값이 "고객"이므로 함수호출시 아규먼트 없으면 "고객님, 오늘 하루 수고했어요"라고 반환됨.


▶ 와일드카드 식별자

-. 스위프트에서 와일드 카드란 사용되는 곳의 값을 무시(생략)할 때 사용하는 식별자이다.

-. for구문이나, switch구문에 많이 사용된다.

 

2번처럼 외부매개변수 자리에 와일드카드를 적용하면 함수호출시 외부매개변수 이름을 선언하지 않아도 된다.

3. References

1. sesac 교육자료

2. Optional

유튜브 : Smile Han iOS프로그래밍기초

https://dev-dain.tistory.com/143

https://babbab2.tistory.com/32

https://velog.io/@wook4506/iOS-Swift-%EC%98%B5%EC%85%94%EB%84%90-%EC%B2%B4%EC%9D%B4%EB%8B%9D-Optional-Chaining

3. Function

https://brunch.co.kr/@njnamju/106

https://wayhome25.github.io/etc/2017/12/31/parameter-argument/

https://boidevelop.tistory.com/22

https://dvlpr-chan.tistory.com/21